SQL Express Profiler

A versão Express do SQL Server não disponibiliza um profiler tal como as outras versões mais avançadas. No entanto houve dois senhores que se lembraram de fazer um. Já testei e o resultado é bastante bom.

http://sqlprofiler.googlepages.com/

Revista PROGRAMAR - 17ª Edição


Agora que se aproxima o Natal, a equipa da PROGRAMAR traz a 17ª edição da revista.

Desta vez, encontrará, entre outros, um artigo sobre Subversion, uma introdução ao Desenvolvimento de Jogos com a plataforma XNA e a continuação do artigo de Fundamentos de Segurança em Redes.

Ignore HTML tags

Na minha mensagem anterior tive alguma dificuldade em publicar o código porque os caracteres < e > estavam a ser interpretados como tags html.

De modo a resolver este problema substitui-se por &lt; e &gt; (não esquecendo o ; no fim).

PS: para mostrar os &lt; e &gt; como texto aqui no blogger foi necessário substituir o & por &amp;

Wake On LAN em C#

De modo a evitar deslocações e poupar energia podemos utilizar a funcionalidade de Wake On LAN para "acordar" um computador. Resumidamente teremos que ter essa funcionalidade disponível e activa na BIOS de modo a poder ser recebido e processado o "pacote mágico" que irá acordar a máquina. O pacote mágico é constituído por 6 bytes com 0xFF seguido de 16 vezes o endereço MAC da placa de rede do computador. Este pacote será enviado por broadcast.


//Construct the packet
List<byte> packet = new List<byte>();

//Trailer of 6 FF packets
for (int i = 0; i < 6; i++)
packet.Add(0xFF);

//Repeat 16 time the MAC address (which is 6 bytes)
for (int i = 0; i < 16; i++)
packet.AddRange(macAddress);

//Send the packet to broadcast address
UdpClient client = new UdpClient();
client.Connect(IPAddress.Broadcast, 7); //Any UDP port will work, normally 0, 7 or 9
client.Send(packet.ToArray(), packet.Count);
client.Send(packet.ToArray(), packet.Count);
client.Send(packet.ToArray(), packet.Count);



Nos testes que fiz muitas vezes apenas um envio não resultava de modo a que optei por enviar o pacote 3 vezes.

Fonte do código:
http://blog.memos.cz/index.php/team/2008/06/12/wake-on-lan-in-csharp

Revista Programar no DVD da Exame Informática


Foi conseguido mais um marco na história da Revista PROGRAMAR!
A PCGuia incluiu a revista no seu último DVD, edição de Dezembro de 2008.

iTunes alternative


Não poder simplesmente copias as minhas musicas para dentro do meu iPod já é algo estranho para mim, em cima disto ter que usar o iTunes para o efeito é demais :)
Na minha pesquisa por alternativas esbarrei logo num programa que me enche as medidas:
1- Não é preciso instalar
2- Tem 416kb de tamanho
3- Um interface super simplex

Se simplesmente quer enviar ou remover musicas do seu iPod aqui está uma bela solução!
Para alternativas com mais funcionalidade.... google it :)

PS:
-a ultima versão foi lançada em 2007 (não prevejo que evolua)
-apenas permite envio e remoção de musicas (vídeo, fotos e reparação da base de dados não estão disponíveis)

Videos das apresentações do PDC 2008 (Professional Developers Conference)

Estão disponíveis os vídeos das apresentações feitas no PDC 2008 (Professional Developers Conference).Podemos fazer o download das mesmas nos formatos WMV-HQ, WMV, Zune e/ou MP4.

Tags:
.NET Framework [16] Ad Platform [2] ADO.NET [3] ASP.NET [11] Azure [39] CCR [1] Dynamics [5] Entity Framework [3] Expression [4] HPC [1] Identity [8] IIS [2] Internet Explorer [3] Languages [11] LINQ [4] Live Framework [10] Live Mesh [10] Live Services [14] Office [2] Oslo [6] Parallelism [9] PowerShell [1] Research [4] SharePoint [5] Silverlight [11] SQL Server [16] SQL Server Data Services [8] Surface [1] Sync Framework [3] TFS [3] Unified Communications [3] Velocity [2] Virtual Earth [1] Visual Studio [19] VSTS [7] WCF [7] WF [9] Windows 7 [24] Windows Embedded [1] Windows Home Server [2] Windows Server [12] WMI [1] WPF [9] XNA [1]

Fim de LINQ to SQL

A M$ anunciou que irá apostar na Entity Framework da ADO.NET como forma de acesso a dados, pelo que o acesso a bases de dados relacionais deverá ser realizado através de LINQ to Entities e não LINQ to SQL, sendo que LINQ to SQL terá pouco desenvolvimento.

A meu ver é anunciada a morte do LINQ to SQL.

Update on LINQ to SQL and LINQ to Entities Roadmap

Clarifying the message on L2S Futures.

Sintonizate.net

Este site disponibiliza vários conteúdos online tais como Rádios, TV, Vídeos, Jogos, Musica. Uso-o para ouvir rádio, permite mudar rapidamente de rádio a tem um Top 10 de rádios mais ouvidas.

MSDN Magazine November 2008

Já está disponível para visualização online a edição de Novembro da MSDN Magazine.

Port Forward


Já não vos aconteceu encontar um router com uma interface um bocado estranha e andarem ás aranhas para fazer forward a uma porta?
Aqui está a solução! Façam scroll nessa página e podem ver a imensa lista de Routers, divididos por marca, com o respectivo link de como fazer a operação!

Visual SVN Server

Já que o assembla deixou de ter espaços privados gratuitamente tive que instalar um servidor SVN particular.

Para isso usei o VisualSVN Server, é grátis, muito leve e muito fácil de configurar! Inclui o Subversion, Apache e Consola de Gestão. Isto tudo num pacote com menos de 6MB.
Parece-me bastante seguro, permite acessos por https criando ele mesmo um certificado próprio para o efeito.

Como cliente continuo a usar o TortoiseSVN

Zoho, trabalhe online


What is Zoho all about?
Zoho is a suite of online applications (services) that you sign up for and access from our Website. The applications are free for individuals and some have a subscription fee for organizations.

How much does Zoho cost?
Zoho offers free versions of all its software including our business oriented applications such as CRM. This will never change. You can always have access to our free or "personal editions" Each of our fee-based applications have different pricing models generally charged with a credit card on a monthly basis.

Disponibiliza em português os seguintes serviços:
Sheet, Show, Projects, CRM, Notebook, Meeting, Mail

http://www.indeks.pt/

Indeks.pt - O melhor numa só página é o titulo! Resume-se a uma página com vários links divididos por categoria! Ainda não encontrei muita utilidade neste site mas fica o registo para que numa altura em que não tiver nada para fazer (se isso existir) tirar dali alguma ideia de site a visitar.

OpenProj

OpenProj is a free, open source project management solution. OpenProj is a replacement of Microsoft Project and other commercial project solutions.
OpenProj is ideal for desktop project management and is available on Linux, Unix, Mac or Windows. It even opens existing Microsoft or Primavera files. OpenProj shares the industry's most advanced scheduling engine with Project-ON-Demand and provides Gantt Charts, Network Diagrams (PERT Charts), WBS and RBS charts, Earned Value costing and more.

MSDN Magazine Gratuita

A Microsoft publica online a MSDN Magazine gratuitamente e em português!

Oferecem ainda a possibilidade de fazer o download da revista em formato CHM desde as edições de 2003, assim como acesso ao código dos exemplos.

Como pagar o Imposto Único de Circulação pela internet passo a passo

Como pagar o Imposto Único de Circulação pela internet passo a passo

Link to Everything: A List of LINQ Providers

No Charlie Calvert's Community Blog está disponível uma interessante lista de vários providers para LINQ:
* LINQ to Amazon
* LINQ to Active Directory
* LINQ to Bindable Sources (SyncLINQ)
* LINQ over C# project
* LINQ to CRM
* LINQ To Geo - Language Integrated Query for Geospatial Data
* LINQ to Excel
* LINQ to Expressions (MetaLinq)
* LINQ Extender (Toolkit for building LINQ Providers)
* LINQ to Flickr
* LINQ to Google
* LINQ to Indexes (LINQ and i40)
* LINQ to IQueryable (Matt Warren on Providers)
* LINQ to JSON
* LINQ to NHibernate
* LINQ to JavaScript
* LINQ to LDAP
* LINQ to LLBLGen Pro
* LINQ to Lucene
* LINQ to Metaweb(freebase)
* LINQ to MySQL, Oracle and PostgreSql (DbLinq)
* LINQ to NCover
* LINQ to Opf3
* LINQ to Parallel (PLINQ)
* LINQ to RDF Files
* LINQ to Sharepoint
* LINQ to SimpleDB
* LINQ to Streams
* LINQ to WebQueries
* LINQ to WMI
* LINQ to XtraGrid

Estado de Visualização em ASP.NET

Aqui está o meu primeiro artigo para a Revista Programar que saiu agora na edição nº15 em Agosto de 2008. Espero que gostem.

Estado de Visualização em ASP.NET

Antes de entrar em pormenores sobre estado de visualização é necessário compreender o que é um controlo e como este funciona em ASP.NET. De certa forma o ASP.NET é uma arquitectura baseada em controlos, já que uma página é um controlo e qualquer controlo pode conter controlos filhos.

A arquitectura é semelhante à arquitectura de janelas do Windows, onde o próprio ambiente de trabalho é uma janela, que pode conter janelas filhas. Cada janela é apresentada, apresentando primeiro o seu conteúdo e depois apresentando o conteúdo das janelas filhas. O mesmo se passa em ASP.NET em que cada controlo é apresentado, apresentando primeiro o seu conteúdo e depois apresentando o conteúdo dos seus filhos. A apresentação de uma janela em Windows envolve o desenho de pixeis no ecrã, enquanto que a apresentação de um controlo ASP.NET envolve a geração de HTML para preencher uma parte da resposta a um pedido HTTP.

Uma página serve como controlo raiz e tem três controlos filhos imediatos: um controlo literal para gerar o texto de início da página, um controlo do lado do servidor HtmlForm para representar o formulário e todos os seus controlos filho, e por fim outro controlo literal para gerar o texto de fim da página. Todos os controlos adicionados a uma página estarão dentro do formulário e portanto serão filhos do HtmlForm, em que a ordem pela qual estão definidos dentro desse controlo será a ordem pela qual serão apresentados. Cada um destes controlos tem o seu próprio estado de visualização. Todos os controlos que correspondem a elementos de formulário têm a sua manutenção de estado suportada através do envio automático do valor dos elementos quando o formulário é submetido (post back). Todos os outros terão que definir o seu mecanismo de persistência de estado e será sobre este assunto que iremos conversar.

Em ASP.NET, o estado de visualização entre post backs é mantido através de uma colecção de pares nome/valor acessíveis por qualquer controlo a partir da propriedade ViewState. Quase todo o estado do controlo, se não todo, fica guardado nesta colecção. Esta propriedade retorna uma instância do tipo System.Web.UI.StateBag, que é muito semelhante a uma tabela de hash mas tem a capacidade de registar alterações (fazer tracking), ou seja, permite que sempre que um valor seja alterado na colecção seja também marcado como “dirty”.

A função de registo de alterações pode estar ligada ou desligada, mas uma vez ligada não pode ser desligada. De modo a activar a função use o método TrackViewState(). Se a função de tracking estiver ligada qualquer alteração a um objecto fará com que esse objecto fique marcado como “dirty”. Podemos consultar se o objecto está marcado ou não através do método IsItemDirty(string chave) ou forçar a marcação através do método SetItemDirty(string chave). O leitor tenha em atenção um pormenor, após a activação de TrackViewState() qualquer alteração será marcada, mesmo que o objecto seja alterado para o mesmo estado, como por exemplo:

stateBag["nome"] = "valor";
stateBag.IsItemDirty("nome"); // falso
stateBag.TrackViewState();
stateBag["nome"] = "valor";
stateBag.IsItemDirty("nome"); // verdadeiro


A colecção ViewState, como já foi referido, guarda pares nome/valor, os pares podem ser indexados por string e ter qualquer object como valor. Exemplo:

ViewState["ViewStateVariableName"] = 1;


Para ter acesso á variável guardada basta fazer a indexação com a chave e a respectiva conversão.

int number = (int) ViewState["ViewStateVariable"];


Esta colecção também permite guardar tipos os nossos próprios tipos quase tão facilmente como os tipos básicos. Para tal basta apenas o tipo ser serializável, ou seja, consegue-se converter uma instância desse tipo para uma sequência de bytes e posteriormente fazer a sua recuperação. Vai compreender a necessidade de o tipo ser serializável mais á frente neste artigo quando falarmos de um campo de input oculto chamado __VIEWSTATE.

[Serializable]
public class Pessoa
{
public string _nome;
public int _idade;

public Pessoa(string nome, int idade)
{
_nome = nome;
_idade = idade;
}
}


Como a classe Pessoa está marcada como serializável pode ser guardada em ViewState:

Pessoa p = new Pessoa("Vitor", 25);
ViewState["Cliente"] = p;


Lembre-se que terá de efectuar a respectiva conversão quando necessitar de obter o valor guardado.

Pessoa p = (Pessoa) ViewState["Cliente"];


O protocolo HTTP é stateless, ou seja, cada pedido é executado independentemente e sem conhecimento de pedidos anteriores. Portanto cada pedido feito á arquitectura ASP.NET será servido por uma instância diferente do controlo e por isso não é possível guardar estado de visualização entre post backs em campos de instância. Devido a isso as propriedades em ASP.NET terão um aspecto diferente já que deverão usar a colecção ViewState para guardar qualquer valor:

public int ValorInteiro
{
get { return (int)ViewState["ValorInteiro"]; }
set { ViewState["ValorInteiro"] = value; }
}

Nos casos em que é necessário ter um valor por defeito teremos também que ter em conta que estamos a utilizar a colecção ViewState. Tal como uma tabela de hash, uma StateBag irá retornar null se a colecção não contém uma entrada com essa chave. Portanto, se o valor retornado for nulo é porque ainda não foi atribuído, então deve retornar o valor padrão, caso contrário, retornar o valor obtido.

public string Texto
{
get { return ViewState["Texto"] == null ?
"Valor por Defeito" : (string)ViewState["Text"];
}
set { ViewState["Texto"] = value; }
}


Repare que ao afectar com null uma propriedade definida com este padrão essa propriedade passará a retornar o valor por defeito e não null como acontece com as propriedades ditas normais. Uma alternativa poderá ser afectar a propriedade com String.Empty (um campo que representa um string vazia) em vez de null. De salientar ainda que cada controlo pode aceder á sua colecção ViewState em qualquer momento e por qualquer razão, não apenas através de propriedades.

Deve-se utilizar esta colecção quando as propriedades reflectem directamente tipos primitivos. No caso de controlos que têm pretendem manter um estado mais complexo, usando tipos próprios poderá ser mais complicado utilizar a colecção ViewState. Como alternativa podemos sobrepor dois métodos virtuais definidos na classe base Control sendo eles o SaveViewState() e o LoadViewState(). Estes métodos permitem escrever e ler manualmente o estado do controlo a partir da stream ViewState. Para um objecto poder ser guardado nessa stream tem que ser serializável. O método SaveViewState(), como o nome indica, permite guardar o estado de visualização. Note que este método também é responsável por chamar o método da base e guardar, no objecto a retornar, o resultado dessa chamada.

protected override object SaveViewState()
{
ArrayList OsMeusDados = new ArrayList();
object[] vState = new object[2];
vState[0] = base.SaveViewState();
vState[1] = OsMeusDados;
return vState;
}


O método LoadViewState() permite recuperar o estado de visualização. Note que este método também é responsável por chamar o método da base, passando ao mesmo os dados que lhe pertencem.

protected override void LoadViewState(object savedState)
{
if (savedState != null)
{
ArrayList OsMeusDados;
// Obter o array de objectos guardados em SaveViewState
object[] vState = (object[])savedState;

if (vState[0] != null)
base.LoadViewState(vState[0]);
if (vState[1] != null)
OsMeusDados = (ArrayList)vState[1];
}
}


O leitor certamente reconhece um padrão de recursividade na chamada a estes métodos e é desta forma que a arquitectura ASP.NET constrói uma estrutura de dados com todo o conteúdo de estado de visualização. Como já foi referenciado, o protocolo HTTP não tem memória. Isso significa que o estado da página terá que ser guardado e posteriormente reposto no pedido seguinte. Os pares nome/valor colocados na colecção ViewState antes da apresentação da página são armazenados num campo de input oculto, __VIEWSTATE, e quando a página é de novo acedida através de um pedido de POST, o conteúdo do campo __VIEWSTATE é analisado e usado para reconstituir a colecção ViewState.

Falta-nos agora perceber como é mantido o estado dos controlos de formulário. Como já foi dito anteriormente, todos os controlos que correspondem a elementos de formulário têm a sua manutenção de estado suportada através do envio automático do valor dos elementos quando o formulário é submetido (post back). Esta manutenção de estado é realizada através da implementação da interface IPostBackDataHandler.

public interface IPostBackDataHandler {
bool LoadPostBackData(string postDataKey, NameValueCollection postCollection);
void RaisePostDataChangedEvent();
}


Neste caso a arquitectura faz uma pesquisa no conteúdo do POST de modo a determinar se existem entradas que correspondem a controlos que implementam IPostBackDataHandler e de seguida é invocado o método LoadPostData para todos esses controlos. A string postDataKey, passado como argumento, contém o identificador único associado ao controlo, que pode ser usado para indexar sobre postCollection para localizar o valor corrente do controlo dentro da colecção como se pode verificar no seguinte exemplo:

public virtual bool LoadPostData(string postDataKey, NameValueCollection postCollection) {
string valorAntigo = Text;
string valorNoPOST = postCollection[postDataKey];

if (!valorAntigo.Equals(valorNoPOST)){
Text = valorNoPOST;
return true;
}
return false;
}


O resultado deste método deve ser true se mudou o valor do estado do controlo, caso contrário, o método deve devolver false. Para todos os controlos que retornam true neste método é chamado o RaisePostDataChangedEvent de cada um desses controlos de modo a poderem ser desencadeados eventos de alteração de estado. O leitor repare que o carregamento de dados de POST ocorre em duas fases, o método LoadPostData ocorre antes do método de Load da página e o método de RaisePostDataChangedEvent ocorre depois do método de Load. Isto permite que na altura em que as notificações são geradas todos os controlos tenham o seu estado reposto.

Note ainda que, para além dos eventos de alteração de estado (eventos changed), como por exemplo alterações do texto de uma caixa de texto ou a alteração do índice seleccionado de uma DropDownList, também os eventos de reacção utilizam este mecanismo. Por exemplo, o evento de click de um botão é detectado e lançado utilizando esta interface. Como se deve ter apercebido, a manutenção de estado de controlos de formulário não usa o campo oculto __VIEWSTATE em nenhuma das suas fases e é completamente independente deste. É por essa razão que, mesmo que o ViewState não esteja activo, todos os controlos de formulário têm o seu estado automaticamente reposto.

No entanto, na fase LoadPostData, é necessário saber o valor antigo de modo a poder compará-lo com o que vem no POST. Uma das formas é usar o ViewState para previamente guardar esse valor, que depois será usado na comparação com o valor recebido no POST. Note que, apesar da sua ligação próxima, são funcionalidades independentes.

Voltando ao ViewState, a estrutura de dados com todo o conteúdo de estado de visualização não é directamente convertida para string e armazenada no campo __VIEWSTATE. Lembra-se de falarmos que uma StateBag permitia fazer tracking? Ora bem, apenas são salvos no campo oculto as entradas da StateBag que estão marcadas como “dirty”, ou seja, apenas as entradas em que os seus estados são diferentes do estado estático ou estado por defeito. Não faz sentido guardar estado que será reposto automaticamente assim que exista um novo pedido e seja criada uma nova instância do controlo para atender esse pedido. Neste momento o leitor poderá estar a perguntar-se “então e os controlos definidos declarativamente?” Podemos definir de forma declarativa um controlo, como por exemplo:
< asp:Label ID="Label1" runat="server" Text="Label" >


No momento em que a arquitectura ASP.NET faz parse do formulário, ao encontrar o atributo runat=”server” cria uma instância desse controlo e tenta corresponder todos os atributos definidos a propriedades publicas do controlo. No exemplo anterior olhando para o atributo Text percebemos que a arquitectura vai afectar a propriedade pública Text com o valor “Label”. Sabendo nós que quase todo o estado do controlo, se não todo, fica guardado em ViewState poderíamos ser levados a pensar que estes dados seriam considerados “dirty” visto que estamos a mudar o seu estado. Tal não acontece porque o TrackViewState() só é chamado no evento Init do ciclo de vida de uma página e todas estas afectações são feitas antes desse momento, ou seja, não serão consideradas “dirty”.

Como referido, quando o ocorre a fase de Init é chamado o TrackViewState(). Após o TrackViewState() ser chamado para todas as StateBags é chamado o LoadViewState(), que faz com que todo o estado dinâmico de visualização guardado seja reposto e, mais importante ainda, visto que neste momento o tracking já está activo todo o estado dinâmico carregado será considerado “dirty”. Esta sequência fará com que o estado dinâmico de visualização seja reposto e fique novamente persistente para futuros post backs, ou seja, faz com que seja novamente seriado para __VIEWSTATE. Através deste artigo espero que o leitor fique com uma ideia mais clara de como manter estado nos seus controlos tendo em atenção que quase todo, se não todo, o estado de visualização de um controlo é guardado em ViewState, mas apenas é persistido entre post backs o estado dinâmico. O estado por omissão que é criado quando é criada uma instância desse controlo (estado estático) não é persistido.

Bibliografia

Essential ASP.NET with Examples in C# - Fritz Onion - Addison Wesley

Understanding ASP.NET View State - http://msdn.microsoft.com/en-us/library/ms972976.aspx

ViewState in ASP.NET 2.0 - http://www.beansoftware.com/ASP.NET-Tutorials/ViewState-In-ASP.NET.aspx

TRULY Understanding ViewState - http://weblogs.asp.net/infinitiesloop/archive/2006/08/03/Truly-Understanding-Viewstate.aspx

IPostBackDataHandler Interface - http://msdn.microsoft.com/en-us/library/system.web.ui.ipostbackdatahandler.aspx

StateBag Class - http://msdn.microsoft.com/en-us/library/system.web.ui.statebag.aspx

Não quero imposto M$

Quer comprar um computador mas não quer o Window$, passe neste blog e leia mais sobre o assunto!

Revista Programar - 15ª Edição

How to become a good developer?

Algumas dicas para nos tornar-mos melhores programadores...

Resumo:
1. Attitude.
2. Read the books.
3. Code! Code! Code!
4. Try out tools and utilities that make your work easier.
5. Try out new technologies.
6. Look how other guys develop systems.
7. Everything that shines is not gold.
8. Participate in communities.
9. Visit technology events.

Cache em AJAX

Após o desenvolvimento de um controlo de autenticação todo boneco, com as necessárias preocupações em termos de segurança, usando uma estratégia de desafio-resposta deparei-me com um problema. Um utilizador depois de fazer login e logout já não conseguia fazer login novamente! wow, o que é que se passa...

Como desconfiei logo do que se passava encontrar a solução foi rápido. Mas voltando ao problema, o segundo pedido do desafio era realizado para o mesmo URL que o primeiro, logo, como o browser tinha a resposta a esse pedido em cache nem fazia o pedido ao servidor... conclusão, retornava o mesmo desafio que, naturalmente, já não era válido do ponto de vista do servidor e o processo de login falhava mais à frente.

Solução: meti um parâmetro adicional na queryString só para o pedido ser "diferente" (usei a data actual do sistema do cliente)

AHAH, Asychronous HTML and HTTP

Usando a técnica AJAX recebemos na resposta conteúdo em XML ou JSON.
AHAH pode ser considerado um subset de AJAX na medida em que o que é retornado pelo servidor é XHTML.

Algumas vantagens:

  • Os dados são transmitidos em XHTML o que facilita o processo de debugging e testes.
  • Mais rápido, deixa de haver parsing e uso de DOM já que os dados serão embebidos directamente na página.
  • Podem já vir com estilo (CSS).
  • O Processamento é quase todo efectuado no servidor, no cliente apenas ocorre a afectação.
A função que recebe o pedido limita-se a afectar a página com o resultado:

function ahahDone(target)
{
if (req.readyState == 4)
{
if (req.status == 200)
{
results = req.responseText;
document.getElementById(target).innerHTML = results;
}
else
{
document.getElementById(target).innerHTML="ahah error:n" +
req.statusText;
}
}
}

SQL Server 2008 Release Candidate 0



Ora aí está a RC0 para quem quiser testar....

Google's Android ScreenShots

Aqui podem ver alguns screenshots do Android

Instalar Joomla 1.5 "sobre" o XAMPP










Decidi finalmente experimentar o Joomla. Queria experimentar primeiro um CMS em ASP.NET mas como só tenho o II5 e era preciso o 6 vai já o Joomla para testes... (numa maquina virtual claro)

Antes de fazer algum post sobre esse assunto é preciso instalar o Apache, MySQL, bla bla bla... o XAMPP já trás isso tudo é só instalar...
mas realmente o que me trás a este post é um video que encontrei que explica como instalar o Joomla sobre o XAMPP para testes na máquina local... muito bom o video.
http://www.truveo.com/Installing-XAMPP-Joomla-15/id/2850399800

Atalho para iniciar Servicos Windows

Ter mais que uma instância do SQL Server a iniciar cada vez que o Windows inicia não é vida, estar muitas vezes a ir aos Serviços arrancar com a instância pretendida também não... solução?

Pode-se criar um atalho para iniciar ou parar serviços Windows usando

net stop "service"
net start "service"

Exemplo usando SQL Server:

net start "SQL Server (instanceName)"
ou seja: net start "SQL Server (MSSQLSERVER)"

net start MSSQLSERVER também serve

no registo têm uma lista dos serviços da vossa máquina em HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services

Thumbnails a sério (92% + pequenos)



Num dos trabalhos para a faculdade tivemos necessidade de gerar thumbnails e a julgar pelo tamanho final com que ficavam (em KBs) parecia-nos uma boa solução...
Agora já não parece....porquê? porque eles podem ficar 90% mais pequenos e com a mesma qualidade....
Vejam este post!

Ligar ao SQLServer no Vista


Alguns utilizadores do Windows Vista podem ter problemas em conseguir aceder ao SQLServer, mesmo sendo administradores, mesmo tendo ido ao SQL Server Configuration Manager activar os Named Pipes.

O problema é que ter privilégios de administrador no Windows Vista não garante privilégios de administrador no SQL Server.

Solução? é necessário instalar o SQL Server Service Pack 2, que trás um utilitário chamado SQL Server 2005 User Provisioning Tool for Vista, que permite adicionar os privilégios necessários para correr o SQL Server na conta de administrador.
Salvo erro, esta tool corre automáticamente no final da instalação do SP2, se não correr está disponível no SQL Server Surface Area Configuration onde diz "Add New Administrator"

DIY (Do it yourself) em video


Com mais de 12500 vídeos, divididos por 35 categorias e 431 Sub Categorias aqui está um grande agregador de vídeos faça-você-mesmo.

Agregador porque não permite o upload de vídeos mas sim a sua catalogação após o utilizador o ter carregado noutro site como, por exemplo, o Youtube.

Em termos de informática tem algumas coisinhas, ideal para quem quer dar os primeiros passos em determinados assuntos.

WebRadio com definição de humor



Agora já pode ter musica sem parar... ok, não é novidade... e tipo de musica consoante o seu humor? Mais calmo, mais energético, mais positivo, menos positivo... ainda permite uma escolha entre quase todos os tipos de música... nada como experimentar.
O serviço chama-se Musicovery e está disponivel em musicovery.com

Visual LINQ Query Builder

Visual LINQ Query Builder é um add-in para o Visual Studio 2008 Designer que ajuda a criar queries LINQ to SQL.

No separador de Download existe um vídeo que ensina utilizar o vlinq, aconselho vivamente a sua visualização. Notei que este add-in usa muitos recursos da máquina, de resto tem muito bom "aspecto".

Code Snippet Editor para Visual Basic 2008



Para quem quiser criar os seus próprios code snippet aqui fica um editor.
Permite criar novos e editar os existentes. Muito bom. Não se esqueçam de definir o atalho senão não funciona :)


Agora já podes desenvolver aplicações para a plataforma NET sem precisares de comprar o Visual Studio, o NET framework SDK possui os compiladores C# e VB.NET que permitem a compilação de código NET. O único problema é que não tens o IDE de desenvolvimento do Visual Studio, mas isto pode ser resolvido se efectuares o download do SharpDevelop. O programa é um IDE totalmente gratuito (Open Source) que após instalado permite o desenvolvimento e compilação de código C# e VB.NET. Para isso, é preciso antes efectuares o download da infra-estrutura da nova plataforma de programação da Microsoft, o .NET framework 1.1 SDK . O SharpDevelop permite editar, correr e compilar aplicações nas duas linguagens. Um detalhe interessante: o produto oferece pacotes de idiomas adicionais. Assim, é possível converter a interface do programa para o português. Um download altamente recomendado.

As 11 melhor dicas para uma apresentação técnica

Aqui ficam umas dicas muito boas, principalmente para os meus colegas que vão fazer as apresentações de projecto no ISEL.

Meta as extensões a funcionar no Firefox 3

Muitas daquelas extensões que são "indispensáveis" à nossa navegação diária ainda não foram actualizadas para a versão 3RC. Mas existe uma forma de as meter a funcionar... atenção que podem surgir erros e falhas riscos de segurança visto as extensões não estarem actualizadas para esta versão... eu decidi correr o risco...

Escreva about:config na barra de endereços do Firefox e clique no botão "I'll be careful, I promise!".
Clique direito em qualquer lado e escolha New>Boolean. Escreva como nome no novo valor de configuração extensions.checkCompatibility e atribua-lhe false.
Crie um outro par booleano chamado extensions.checkUpdateSecurity e atribua-lhe false também.
Reinicie o Firefox.

Na página de pesquisa de extensões pode continuar a dizer que não é compatível com a versão mas se visitarem a página de versões de cada extensão já dará para as instalarem. Boa navegação...

Forms Google Suggest User Control (v1)

Visto que o método de Suggest das TextBox não apresenta todas as funcionalidades requerida num dos meus projectos decidi criar um User Control de modo a resolver esse "problemas".
Os problemas eram básicamente dois:
- De vez em quando apanhava uma excepção ao mudar a colecção AutoCompleteCustomSource, umas vezes por escrever muito depressa, outras por escrever palavras que não existiam na base de dados...
- E a principal razão foi, mesmo que a colecção tenha mais resultados só apareçem no suggest aquelas que começam exatamente da mesma forma que o texto na TextBox. Por exemplo, se na TextBox estiver "Avenida Liberdade" mesmo que a customCollection tenha "Avenida da Liberdade" essa opção não aparece... e tem que aparecer...
Como dizia um professor meu...não existe? cria-se!


Este controlo é composto por uma TexBox e uma ListBox que estão sensiveis aos seguintes eventos:
TextBox_TextChanged - Mostra a ListBox, visto que por defeito está escondida;
TextBox_KeyDown - Detecta "Enter" e Seta para baixo de modo a iniciar a navegação por tecla na ListBox.
ListBox_MouseClick - Detecta um click num dos resultados de modo a actualizar a TextBox e esconder a ListBox
ListBox_KeyDow - Detecta o "Enter" para actualizar a TextBox e esconder a ListBox

Foram implementados 2 métodos adicionais:
ListBoxHide - Esconder a ListBox (visible=false e SendToBack() no contentor Parent (importante))
ListBoxShow- Mostra a ListBox (visible=true e BringToFront() no contentor Parent (importante))

De modo a esconder a ListBox ao perder o focus foi ainda adicionado o UserControl_Leave.

Assim pré-resolvida a parte visual do controlo, falta agora toda a parte de actualização das sugestões. Irei criar ainda um mecanismo de notificações de modo a este controlo poder notificar outros que a TextBox já tem um valor.

RockScroll

Hoje descobri o que pode ser uma grande ajuda no desenvolvimento, especialmente naquelas ficheiros em que o código fonte é extremamente extenso.

RockScroll extende a scrollbar do Visual Studio para mostrar um thumbnail do código.
Melhor ainda, esse thumbnail é syntax highlighted. Podemos navegar mais fácilmente pelo código porque esta pequena maravilha marca os break points, bookmarks e ainda código comentado.



Funciona em Visual Studio 2005 e 2008. Trata-se de apenas um DLL e pode ser desactivado removendo o visto na respectiva caixa em Tools|AddIns.
A meu ver só tem um problemazinho, não tem em conta o "collapse to definitions", por exemplo, se tiverem uma region e carregarem no botãozinho de menos para ocultar o código, o RockScroll não tem isso em conta e perde alguma da sua funcionalidade, de resto...5 estrelas.

Download

Visual Studio 2008 e .NET 3.5 SP1 Beta

Bem, a Microsoft não tem parado, já nos apresenta uma vasta lista de correcções e novidades para o VS2008 e .NET 3.5
Ainda pensei em enunciar as novidade mas elas são mais que muitas, sugiro que visitem estes 2 posts, principalmente o primeiro.

Visual Studio 2008 and .NET Framework 3.5 Service Pack 1 Beta
Visual Studio 2008 SP1 Beta

Novo Look

Decidi introduzir mais conteúdo(lixo) no meu blogue, mas antes disso decidi mudar o seu aspecto. Encontrei um site com 70 novos templates para o Blogger e escolhi um. Um template é um ficheiro xml que poderá ser carregado na parte de edição de HTML do Esquema. Fiz o upload do ficheiro e depois "diverti-me" a edita-lo de modo a ficar à minha maneira.
Se alguém se quiser aventurar tenha em atenção que pode perder alguns widgets que tenha no modelo original.

Violência nas Escolas

Agora fala-se muito de violência nas escolas, os alunos agridem os professores por causa de telemóveis... o problema não são as escolas nem os professores, porquê? a escola tem como principal objectivo a formação académica dos alunos, a educação interpessoal tem que vir de base, tem que ser ensinada pelos pais. Na minha opinião não compete aos professores educar os jovens, compete-lhes sim ensinar as matérias das disciplinas.
Agora a escola, como instituição, não devia permitir comportamentos destes e punir os alunos de forma exemplar e principalmente chamar os pais e responsabilizá-los pela educação dos filhos. Quem é que fez os filhos? agora eduquem-nos.



Sendo um fã do Firebug para o Firefox, hoje descobri uma novidade muito interessante que virá com o Internet Explorer 8, a "Developer Tools". Sigam o link e vejam por vós próprios, na minha opinião tem muito bom aspecto. Porquê o interesse? o IE continua a ser um dos browsers mais utilizados, logo faz todo o sentido as aplicações serem compatíveis com o mesmo. O Visual Studio 2008 já trás umas novidades em relação a debug javascript, mas para quem não o usa tem aqui uma bela ferramenta, digo eu :)

Tal como o Miguel alertou, já existe esta ferramenta para a versão 6 e 7 do IE, que pelo que li até está mais completa que a que vem na 8 Beta.Aqui está ela.

ACID3



Cá está a nova versão (ACID3) de testes à compatibilidade dos browsers com os standards. Se quiserem correr o teste no vosso browser...está aqui.

Neste endereço podem ver alguns dos resultados obtidos em várias versões de vários browsers.

Não podia deixar de fazer alguns testes tendo obtido os seguintes resultados:
Firefox 3 Beta5 Pre : 71/100
Opera 9.5 Beta : 61/100
Opera 9.26 : 46/100
IE 8 Beta : 18/100
IE 7 : 14/100

Para os mais desatentos, uma das "grandes" novidades em termos de evolução do IE8 seria correr o teste ACID2 na perfeição. Vamos ver se também melhoram qualquer coisa em relação ao ACID3.

MIX 2008 - Videos das Apresentações

Vejam todas as apresentações feitas no MIX 08. O MIX é um evento sobre a Internet criado pela Microsoft, que ocorre em Las Vegas, onde se reúnem muitos programadores e designers entre outros profissionais da Web.

Mais Gasolina

O Mais Gasolina é um directório interactivo de postos de abastecimento de Portugal, com a localização de vários postos, o preço actualizado dos combustíveis e outras informações úteis aos automobilistas.

Pode assim de uma forma simples através da navegação num mapa ou num directório de distritos, concelhos e localidades encontrar um posto de abastecimento ou comparar preços para encontrar o posto mais barato da sua região.

O Mais Gasolina depende da cooperação e boa vontade de todos os seus utilizadores e respectiva administração. Os utilizadores registados podem contribuir para o Mais Gasolina sugerindo novos postos, actualizando postos já no directório e actualizando os preços dos combustíveis. Para garantir a veracidade destes dados a equipa do Mais Gasolina monitoriza em background as alterações que são efectuadas pelos nossos membros tentado garantir a qualidade e veracidade dos dados aqui apresentados.

ITJobs


Já que no último post falei de emprego deixo-vos aqui um site que o sr. Miguel me passou, muitas ofertas na área de tecnologias de informação.
ITJobs

Cantinho do Emprego

"Descubra um mundo de oportunidades de emprego e esclareça as suas dúvidas legais!"

Se há blogs temáticos muito bons, este deve ser um deles. Estava aqui a tentar criar uma descrição para o blog mas só mesmo vendo é que se pode perceber o quanto este blog pode ser útil. Veja o Cantinho do Emprego

Internet Explorer 8 Beta



Já está disponivel para download a versão Beta1, podem consultar aqui algumas das novidades presentes bem como outras informações.
A instalação demorou algum tempo, o processo de instalação faz uma procura por software malicioso no sistema operativo e faz ainda o download e instalação de actualizações ao próprio IE8.
Para já a novidade mais gritante pareçe ser o cumprimento das normas, já realizei o teste ACID2 tendo obtido um resultado perfeito. Em termos de memória utilizada e velocidade pareçe-me igual á versão anterir. Como curiosidade, vem com um botão que permite emular a versão anterior (IE7).

Framework .NET


Para os mais distraídos aqui fica uma imagem que resume o estado actual da framework .NET
Ao clicar na imagem podem ver o artigo onde está inserida.

OpenID

Acabei à pouco uma mini tradução na wiki do OpenID. Qualquer frase menos bem comentem :)



O que é OpenID?

OpenID é uma estrutura aberta, descentralizada, livre para a identidade digital de utilizadores. OpenID começa com o conceito que qualquer utilizador pode-se identificar a ele próprio na Internet da mesma maneira que os WebSites o fazem, através de um URI (chamado também de URL ou endereço web). Já que os URIs fazem parte do núcleo da arquitectura Web, fornecem uma forma sólida para a identidade de utilizadores.

A primeira peça da estrutura de OpenID é a autenticação - como você prova a posse de um URI. Hoje, os WebSites requerem nomes de utilizador e palavras passe no início de uma sessão, o que significa que muitos utilizadores usam a mesma senha em toda parte. Com a autenticação OpenID, o seu nome de utilizador é o seu URI, a sua palavra passe (ou outras credenciais) estão seguramente armazenadas no seu servidor OpenID (que pode ser disponibilizado por você mesmo, ou usar um fornecedor de terceiros).

Para iniciar sessão num website que suporte OpenID (mesmo um que nunca tenha visitado) é apenas necessário introduzir o seu endereço (URI) OpenID. O website irá redireccioná-lo para o seu servidor OpenID de modo a poder fazer a sua autenticação independentemente de que tipo são as suas credenciais. Uma vez autenticado, o se servidor OpenID irá redireccioná-lo para o website original assim como enviar as credenciais para o autenticar. Ao usar Autenticação Forte quando necessário, a estrutura OpenID pode ser utilizada para todo o tipo de transacções, ambas estendendo o uso de um puro login único bem como da sensibilidade dos dados partilhados.

Além de autenticatição, a estrutura OpenID fornece os meios para os utilizadores partilharem outros componentes da sua identidade digital. Utilizando a especificação emergente da troca do atributo de OpenID, os utilizadores podem controlar claramente que partes de informação podem ser partilhadas pelo seu fornecedor da identidade, tal como o seu nome, morada, ou número de telefone.

Isto sim é uma apresentação


Vejam esta apresentação sobre Identidade 2.0
Simplesmente espectacular.

Microsoft oferece e-books sobre AJAX, Silverlight e LINQ





Já os tenho. Depois de se inscreverem na newsletter apareçem os links para download.
Download e informações aqui.

Desafio: É possivel ainda obter o livro "Introducing SQLServer 2008", quem é que consegue descobrir como? digo já que é fácil!

Testes ACID2

ACID2 é um teste que permite avaliar a compatibilidade de um browser com os standards definidos para a web. O objectivo do teste é que o browser apresente as palavras "Hello World" seguido de um smile amarelo. Os mais curiosos podem consultar aqui o que significa cada parte do smile.

Decidi testar os 3 browsers que tenho instalados e cá estão os resultados:

Internet Explorer 7

Firefox 2.0.0.12

Opera 9.26



Sim, o meu browser favorito é o Opera :)
Para quem quiser testar a sua versão pode passar por aqui.

Para finalizar, a equipa de desenvolvimento do IE já anunciou que a versão 8 já faz correctamente o render do smile, o mesmo se passando para a versão 3 do Firefox.

SMS grátis para todas as redes



Pode ter acesso a 400 SMS grátis para todas as redes, enviadas através da internte claro, não há milagres.
Fui ao site da Rede4, inscrevi-me e enviaram-me gratuitamente para casa um cartão da rede deles, é só metê-lo num telemóvel desbloqueado ou da Optimus para activar o cartão.
Como não existem carregamentos obrigatórios ainda não fiz nenhum carregamento mas passo a ter disponível todos os meses 400 SMS grátis para todas as redes enviados através do site.

Sun adquire MySQL


Recebi um email da Sun onde me informavam da realização desta compra, talvez a compra do ano.

A opinião dos Pinguins Mágicos é que esta aquisição pode ter um impacto grande no mercado de bases de dados.
Apesar de ser um mercado onde a Oracle lidera indiscutivelmente, o facto de MySQL ter agora a Sun por trás e ter um modelo diferente, pode a 3 / 5 anos fazer cócegas à Oracle.
Quanto à utilização do MySQL em plataformas Web o impacto não será tão grande visto que o MySQL já hoje é líder.
Curiosamente, tanto nos grandes (Flickr, Sapo, Google,...) como nos pequenos.

Cifrar Connection String em .NET

Ontem o Sr. Miguel estava-me a dizer que deviamos ter cifrado a connection string no ficheiro de configuração, pois, é verdade, quem tiver acesso ao ficheiro de configuração tem acesso á informação de autenticação... not good

Então mas... como é que se faz que já não me lembro? take a look
Connection Strings, Configuration Files and Security

NHibernate

Criar uma camada de acesso a dados em .NET é chato, os métodos são quase iguais, a classe fica enorme... possível solução? NHibernate

Andei a pesquisar sobre o assunto e encontrei um post muito bom, como não sou de cópias aqui está o link
Primeiros passos com NHibernate

OperaTor - Navegar Anónimo

O OperaTor permite navegar anónimamente pela Internet e além disso é portável.

Resulta da união de 3 aplicações: Opera Browser, The Onion Router e Privoxy.

Útil como browser quando estamos a navegar num computador público ou quando nos queremos armar em hackers, não vá a coisa correr bem e descobrirem quem somos :)

link para o OperaTor

A navegação é naturalmente mais lenta já que o browser não guarda cache e tem que efectuar pedidos pelo proxy. Por cada vez que abrimos o browser temos um endereço IP novo.

20 Melhores Dicas Adsense

Ao criar esta amostra de blog decidi também ver testar o Adsense da Google.

Aqui ficam algumas dicas que encontrei num post algures
20 Melhores Dicas Adsense

Ebooks


Site com muitos livros sobre Informática e Tecnologias de Informação entre outros.

www.FlazX.com

Alterar localizações do "Save As"



Ontem apanhei-me a pensar "epá, ter que estar sempre a procurar aquela pasta sempre que quero guardar um torrent é chato, deve dar para alterar estes atalhos"
fui ao amigo Google e cá está uma solução:

How to set custom shortcuts in the windows XP 'Save as' dialog box

PS: não altera os atalho do Office.

Ciclo .NET Framework 3.5 Development



A Microsoft está a promover um novo ciclo de webcasts, deste vez sobre versão 3.5 da Framework .NET
Mesmo que na hora não possam assistir, podem posteriormente fazer o download da sessão.

Windows Presentation Foundation (2 sessões)
WPF (Windows Presentation Foundation, também conhecido como Avalon) simplifica a construção de aplicações cliente ricas, uma vez que facilita a integração de media, documentos e UI.
Sessão 1 || 26-Fev-2008
Sessão 2 || 27-Fev-2008

Windows Communication Foundation (2 sessões)
Windows Communication Foundation (WCF) fornece uma framework única para a construção rápida de aplicações seguras, fiáveis e orientadas a serviços.
Sessão 3 || 28-Fev-2008
Sessão 4 || 29-Fev-2008

Windows Workflow Foundation (2 sessões)
O Windows Workflow Foundation é constituído por um modelo de programação, um conjunto de ferramentas de desenvolvimento e depuração, e um motor de execução que permite desenvolver com eficácia soluções de negócio em ambiente Windows.
Sessão 5 || 03-Mar-2008
Sessão 6 || 04-Mar-2008

.NET em Português


A comunidade PontoNetPT está direccionada a todos os programadores que trabalhem com a plataforma .NET
A comunidade foi criada com o objectivo de unir todos os programadores que falem Português, que pretendam aprender ou que já estejam a desenvolver aplicações com esta plataforma. Partilhe as suas experiências e conhecimentos.

O website apresenta noticias, eventos, destaques,etc.
http://www.pontonetpt.com

Mas o que achei mais interessante foi a parte dos blogs
http://weblogs.pontonetpt.com