domingo, dezembro 12, 2010

XNA - Primeira experiência

Resolvi propor o desenvolvimento de uma Slot Machine no âmbito de um projecto de trabalho para uma disciplina do meu Mestrado.
Não o queria fazer usando labels e picture boxes e uma função randomica que me retornasse uma figura. Queria fazer algo mais real, com recursos gráficos e por isso resolvi experimentar a plataforma XNA que me dá isso tudo (DirectX inclusive).

De facto com esta plataforma tudo se torna mais fácil.
Baseado na leitura que efectuei em http://felipearon.net/curso-online-xna/aula-01-o-que-e-xna, resolvi meter mãos á obra.

Criei uma Sprite de frutos, uma classe roda e o resto já funciona. Agora falta acrescentar algumas funcionalidades e melhorar bastante as imagens. O motor está quase pronto.
Assim que estiver finalizada irei colocar o código da classe roda aqui. Até porque não consegui encontrar nada do género feito em XNA na Internet.

terça-feira, outubro 26, 2010

Photoshop change color of line

Start a new layer over the line-art layer

Fill the layer with the desired color.

Dois cliques na layer e definir blending options
In the Layers Palette Blending modes pull-down, select:
* Lighten
* Screen
* Linear Dodge

and the image will take on that color.

quarta-feira, outubro 13, 2010

Aplicação web tenta usar Exchange 2007 para envio de mensagens

A aplicação web tenta usar as credenciais do servidor exchange 2007 para enviar notificações mas recebe 5.7.1 unable to relay.

Para colmatar este problema, deve-se criar um SMTP receive connector para os IPs em questão "Receber emails de servidores remotos". De seguida providenciar relay com o tipo de autenticação Anonymous e escrever na linha de comandos "Shell" o seguinte:

Get-ReceiveConnector "Intranet" | Add-ADPermission -User "NT AUTHORITY\ANONYMOUS LOGON" -ExtendedRights "ms-Exch-SMTP-Accept-Any-Recipient"

domingo, setembro 19, 2010

Criar default values no XSD gerado

Verificar defaults da tabela para cria-los no dataset XSD

SELECT c.COLUMN_DEFAULT
FROM INFORMATION_SCHEMA.COLUMNS c
WHERE c.COLUMN_DEFAULT IS NOT NULL
and c.TABLE_NAME = ''
AND C.COLUMN_NAME = ''

Another Way
http://support.microsoft.com/default.aspx?scid=kb;EN-US;Q318048

domingo, setembro 12, 2010

Carregar User Controls em runtime

É possível carregar Usercontrols em runtime usando o método Loadcontrol. É ainda possível definir valores para propriedades que tenhamos criado para os mesmos.

Para podermos carregar os Usercontrol, temos de dizer onde queremos que eles apareçam na nossa página e para isso usamos por exemplo o objecto PlaceHolder:

 Control FeaturedProductUserControl = LoadControl(Request.ApplicationPath + "/UserControls/UCfeeds.ascx");
  
           FeaturedProductUserControl.ID = "UsercontrolID" + counter.ToString();
  
           Type typ = FeaturedProductUserControl.GetType();
  
           //Procurar propriedade definida no objecto Usercontrol
  
           System.Reflection.PropertyInfo pi = typ.GetProperty("nome");
  
           pi.SetValue(FeaturedProductUserControl, "nome", null);
  
           plh1.Controls.Add(FeaturedProductUserControl);  

sexta-feira, setembro 10, 2010

Criar menu com subitems especificados em control menu

Este código permite criar um menu apenas com os subitems de um item especificado.

1:  <asp:Menu ID="Menu1" runat="server" DataSourceID="SiteMapDataSource1">
  
2:      <DataBindings>
  
3:        <asp:MenuItemBinding DataMember="SiteMapNode" />
  
4:      </DataBindings>
  
5:    </asp:Menu>
  
6:    <div id="recibo" runat="server">
  
7:      <asp:SiteMapDataSource ID="SiteMapDataSource1" runat="server" ShowStartingNode="false"
  
8:        StartingNodeUrl="~/Users/default.aspx?i=1" />  

Criar combobox com ultimos 12 meses

Com este código pretende-se criar uma combobox carregada com os ultimos 12 meses:

1:  DateTime month = Convert.ToDateTime(DateTime.Now.ToString()).AddMonths(-12);
  
2:        for (int i = 0; i < 12; i++)
  
3:        {
  
4:          DateTime NextMont = month.AddMonths(i);
  
5:          ListItem list = new ListItem();
  
6:          list.Text = NextMont.ToString("yyyy") + "-" + NextMont.ToString("MMMM").PadRight(15);
  
7:          list.Value = NextMont.Month.ToString();
  
8:          ddlmeses.Items.Add(list);
  
9:        }
  
10:        if (SetCurruntMonth == true)
  
11:        {
  
12:          MyddlMonthList.Items.FindByValue(DateTime.Now.Month.ToString()).Selected = true;
  
13:        }  

terça-feira, setembro 07, 2010

Profile asp.net

 A classe ProfileCommon não é gerada quando asp.net Application project. Para isso teremos de utilizar o WebProfileGenerator em:
  
 http://webprofile.codeplex.com/Thread/View.aspx?ThreadId=20291
  
 Para o utilizar com o Visual Studio 2010 temos de colocar uma pasta chamada AddIns e dentro colocar o ficheiro .dll.
  
 Teremos ainda de alterar o ficheiro (WebProfileGenerator.AddIn) de forma a contemplar o seguinte:
  
 (...)
  
 <code>
  
  <HostApplication>
  
   <Name>Microsoft Visual Studio</Name>
  
   <Version>10.0</Version>
  
  </HostApplication>
  
 </code>
  
 (...)
  
 De seguida surge dentro do Visual Studio uma opção (clique lado direito do botão do rato) para gerar a classe profile.
  
 Após classe gerada, podemos por exemplo adicionar uma opção de perfil a um determinado utilizador:
  
 <code>
  
  //Criar o profile para colocar a informacao adicional
  
       WebProfile webProfile = new WebProfile();
  
       WebProfile pro = webProfile.GetProfile(username.Text);
  
       pro.GenericField= ddlphc.SelectedItem.Value;
  
       pro.Save();
  
 </code>
  
 Não esquecer de definir o web.config:
  
 (...)
  
 <code>
  
 <profile defaultProvider="MyProfileProvider" enabled="true">
  
    <providers>
  
     <add name="MyProfileProvider" connectionStringName="intraweb.Properties.Settings.ConnString" applicationName="intraweb" type="System.Web.Profile.SqlProfileProvider, System.Web,Version=2.0.0.0, Culture=neutral, PublicKeyToken=xxxxxxxxxxx"/>
  
    </providers>
  
    <properties>
  
     <add name="GenericField" type="String" />
  
    </properties>
  
   </profile>
  
 </code>
  
 (...)  

Verificar também Custom Membership, Role Providers, Website administration tool, and Role based access to individual files:

http://beta.codeproject.com/KB/aspnet/innovative_rolebased_WAT.aspx?msg=3228998

sábado, setembro 04, 2010

JQuery para Date Picker

Primeiro efectuar download de Jquery:
http://jqueryui.com/download/

De seguida integra-lo no VS na solução. Copy paste dos scripts.

Colocar o seguinte código nos header das páginas.


<!-- Jquery para datepicker -->

        "<link href="../js/jquery-ui-1.8.4.custom/css/ui-lightness/jquery-ui-1.8.4.custom.css" rel="stylesheet" type="text/css" />

        <script type="text/javascript" src="../js/jquery-ui-1.8.4.custom/development-bundle/jquery-1.4.2.js"></script>

        <script type="text/javascript" src="../js/jquery-ui-1.8.4.custom/development-bundle/ui/jquery-ui-1.8.4.custom.js"></script>

        <script type="text/javascript" src="../js/jquery-ui-1.8.4.custom/development-bundle/ui/jquery.effects.core.js"></script>

        <script type="text/javascript" src="../js/jquery-ui-1.8.4.custom/development-bundle/ui/jquery.ui.datepicker.js"></script>

        <script type="text/javascript" src="../js/jquery-ui-1.8.4.custom/development-bundle/ui/i18n/jquery.ui.datepicker-pt-BR.js"></script>

        <script type="text/javascript" >

            $(document).ready(function () {

                $.datepicker.setDefaults($.datepicker.regional['']);

                $("input[name*='dtactivodeTextBox']").datepicker($.datepicker.regional['pt-BR']);

                $("input[name*='dtactivodeTextBox']").datepicker();

                $("input[name*='dtactivoateTextBox']").datepicker($.datepicker.regional['pt-BR']);

                $("input[name*='dtactivoateTextBox']").datepicker();

                

            });

        </script>"

        <!-- Fim jquery datepicker -->

Multiselect Gridview

Adicionar propriedade de multiselect com inheritance.

http://www.mostlydevelopers.com/mostlydevelopers/blog/post/2008/09/17/MultiSelect-GridView-Control.aspx

sexta-feira, setembro 03, 2010

Formatar datas em datalist ou Gridview

De forma a aparecer o ShortDate deveremos colocar no itemtemplate o seguinte:

Eval(´date´, ´{0:d}´ )

http://forums.asp.net/t/1230232.aspx

Trocar acentos por aspas.

Plataforma de desenvolvimento: Windows + Visual Studio 2010
Linguagem de programação: .NET 4.0

quinta-feira, setembro 02, 2010

Problema .NET framework 4 com SeparatorImageUrl em MENU (ASP:NET)

O til (~) não é resolvido com Page.resolveclienteUrl.
O workaround para master pages é colocar no page.load:

//Necessário incluir este snipet para resolver questao do resoveclienturl dos separator menus
foreach (MenuItem binding in Menu1.Items)
{
binding.SeparatorImageUrl = ResolveClientUrl(binding.SeparatorImageUrl);
}

http://connect.microsoft.com/VisualStudio/feedback/details/537674/tilde-in-separatorimageurl-of-menuitem-control

Plataforma de desenvolvimento: Windows + Visual Studio 2010
Linguagem de programação: .NET 4.0

terça-feira, agosto 31, 2010

Instalar flex builder com asp.net development server

Ao tentar criar um projecto novo com ligação ao asp.net development server, poderá surgir um erro a informar da indisponibilidade do webdev.

Deveremos procurar os ficheiros WebDev.WebServer.EXE ou WebDev.WebServer40.EXE e copia-los para a pasta de framework 2.057 em c:\windows\microsoft.net\framework\xxx e renomea-los, caso diferente daquilo que o Flex Buider procura (webdev.webserver40.exe) para WebDev.WebServer.EXE.

http://www.ironspeed.com/Designer/7.0.2/WebHelp/Part_VI/The_ASP_NET_Development_Server.htm

Adicionar parametros a addEventListeners

stage.addEventListener(MouseEvent.CLICK,
function(e : MouseEvent) : void
{
fMyFunction(e, "hello world")
},
false , 0 , false);

function fMyFunction(e : MouseEvent, vMsg:String) : void
{
trace(vMsg);
}


Plataforma de desenvolvimento: Windows + Visual Studio 2008 + Flex Builder 3
Linguagem de programação: actionScript
SGBD: MSSQL 2005

sexta-feira, abril 10, 2009

GPS Tracking System

Vou falar um pouco sobre o que me foi proposto fazer em Abril de 2009. O cliente em questão tem um negócio que abrange todas as áreas relativas ao ramos automóvel. Este, para juntar ao grupo de serviços que dispões, quer um sistema próprio de GPS Tracking para poder servir os seus clientes.

Um serviço de GPS tracking pressupõe uma panóplia de requisitos essenciais.

Tipo de dispositivos a serem usados nos automoveis;
Tipo de informação a ser processada (Strings de GPS GPRMC, etc);
Serviço Online 24x7;
Acesso personalidado mediante autenticação;
Acesso a informação actualizada sobre o rumo, direcção, posicionamento, geo-referenciação imediato e em tempo real.

Mediante estes pressupostos resumidos e após análise resolvi por mãos à obra.

1º Fase - Recepção e processamento
Em primeiro criei um serviço Windows que corre em servidor dedicado para receber as coordenadas do GPS. O GPS dispositivo envia de x em x segundos um conjunto de dados incluindo a String GPRMC, conhecida por Recomended Minimum sentence que contem quase tudo que a aplicação precisa de receber para processar. A string envia, de modo codificado, a latitude, longitude, velocidade, direcção em º , satellite-derived time, fix status e magnetic variation.

O dispositivo em questão teve de ser programado para enviar de x em x segundos, via TCP para um socket onde o serviço windows fica activo.

Este serviço recebe a string, processa-a e guarda toda a informação préviamente tratada em Base de dados MSSQL 2005.

2º Fase - Presentation Layer
Nesta segunda fase a preocupação foi a apresentação dos dados, visto que grande parte do processamento e tratamento da informação é efectuada na recepção dos dados.

Para isso Usei a linguagem de programação FLEX (XML). Como o flex não trabalha directamente com os dados, era preciso um serviço Web que os disponibilizasse.

Criei um serviço web em vb.NET alojado no servidor dedicado de recepção e armazenamento de coordenadas GPS que sirva de camada intermediária de dados para a aplicação Web em FLEX.

A aplicação permite aos utilizadores terem acesso imediato a localização dos veículos, disponibilidade de colocação de marcadores, rotas percorridas, tempos de paragem e viagem, soma de km, etc.

Tempo de desenvolvimento: 1 mês
Plataforma de desenvolvimento: Windows + Visual Studio 2008 + Flex Builder 3
Linguagem de programação: vb.net, Flex
SGBD: MSSQL 2005

terça-feira, setembro 16, 2008

.NET + WEBSERVICES - SMS por E-Mail

Foi-me requisitado a análise e elaboração de uma aplicação activa de envio de sms's por e-mail.
Basicamente, o cliente envia um email para determinados números de telefone, por ex: 93456456@xxx.xx.pt e este é reecaminhado para o telémovel da pessoa a contactar.

Coloca-se desde logo um problema. Visto que deverá correr como serviço num servidor, pois quero que a aplicação se active independentemente do facto de existir alguém logado ou não no sistema, apenas este facto leva-me a pensar que terei de criar um Windows Service de propósito. Mas não.... Felizmente sou adepto fervoroso do Code Project e lá encontrei uma aplicação fantásticamente simples que faz aquilo que queria. Na verdade, o xyntservice faz isso. Vale a pena ver.


Finalmente e após análise dos requisitos, elaborei a base de dados para MSSQL.
Todo o programa foi desenvolvido em vb.net e usei como classes de manuseio de e-mail, umas antigas adaptadas que tinha no meu cofre de programas. 

A operadora de telecomunicações, forneceu o WEBSERVICE que propicia a interface de envio de smss. Basicamente teria de formatar a informação.

Mais tarde, desenvolvi uma aplicação de gestão para gerar relatórios para os clientes de numero de mensagens...etc.

A aplicação passou nos curtos testes e neste momento corre já à 2 meses sem grandes problemas.

Tempo de desenvolvimento: 1 mês e 15 dias
Plataforma de desenvolvimento: Windows + Visual Studio 2008
Linguagem de programação: vb.net
SGBD: MSSQL 2005



domingo, setembro 17, 2006

Networking Windows 2003 server

Mais um trabalho, mais uma dor de cabeça. Desta vez prende-se com o facto de migrar toda uma rede antiga assentada em tecnologia NT e Linux para Windows 2003.

A rede assenta em vários sectores com dois controladores de dominio (1 avariado), 2 servidores de aplicações, um proxy + mail (Linux) e 2 maquinas com aplicações partilhadas.

Redefenindo tudo, acordei com o cliente, uma rede com recursos Active Directory (Desde W2000), com partilha DFS, Storage server, Exchange e dois DC.

Os controladores de dominio serão 2 constituindo assim uma redundância segura em caso de falha de um deles. Os disco estão em raid por software.

Um aplication server, onde no fundo será também um file server, onde serão instaladas todas as aplicações do cliente (alguma bem antigas), aplicações essas que sofreram alguns testes de compatilidade, todos com sucesso.

Um Exchange Server com 3 discos em raid.

Um Storage server com o Windows 2003 Storage Server também com algumas aplicações de interesse, tais como o interface Web de Administração do Storage Server.

Um dos servidores antigos será constituido como um servidor de suporte a avarias.

Em vez do proxy, concluá que uma appliance Firewall, com gateway antivirus + RBL filter seria boa escolha.

Por fim, deslocalização do WWW portal para a zona DMZ.

Colocarei um desenho da solução aqui mais tarde.

Tempo de desenvolvimento: 1 mês e 15 dias
Plataforma de desenvolvimento: Windows 2003 R2 + Linux RedHat
Linguagem de programação: N/A
SGBD: N/A

segunda-feira, setembro 04, 2006

WRT54G3G - OPERACIONAL!!!!

Ok. Desta vez parece que ficou funcional. De 10 em 10 minutos ia abaixo mas com a alteração de última hora de usar o PROTO TCP em vez de PROTO UDP, resolveu a questão.

Clientes desligam VPN 3G

Mas que grande imbróglio. Após ter conseguido a ligação VPN, ao ligar um cliente especifico VPN, a ligação perde-se passados 10 minutos ou 1 hora. Porquê? Penso que tem a ver com o facto de não estar a fragmentar o tamanho dos pacotes enviados.
A testar nas configurações cliente/servidor:

Colocar TCP em vez de UDP;
Colocar fragment XXX em ambos os lados cliente e servidor;
Colocar mssfix xxx;

A ver como me saio. O cliente em questão é um automato que gera um volume de trafego substancial.

quinta-feira, agosto 24, 2006

WRT54G3G - ligando 2 routers 3G com openvpn

Finalmente. Após longas horas de compilação de firmware (openwrt) + configurações openvpn, lá consegui colocar os dois routers a comunicar. É uma solução única onde optei pelo modo de funcionamento em bridge. Cria uma ligação segura com certificados 128 bits mais tls authentication.

Tempo de desenvolvimento: 1 semana
Plataforma de desenvolvimento: Linux Fedora Core 5 + OpenWrt ToolChain
Linguagem de programação: Shell Scripting
SGBD: N/A