Matérias

Playstation Network API de volta a ativa

postado em 12 de jul de 2012 11:48 por João Miguel Tabosa Vaz Marques Silva   [ 12 de jul de 2012 11:49 atualizado‎(s)‎ ]

Playstation Network Logo
Finalmente depois de muito tempo voltei a desenvolver minha API para a playstation network. Sendo a única API 100% open source você pode implementa-la em seu servidor.

Meu foco principal agora é achar desenvolvedores com conhecimento em C# e parsing de Html, se você é um desenvolvedor e tem paixão por video games, sera muito bem vindo ao projeto.

Hoje em dia a API coleta as informações sobre o perfil e mais os totais de troféis para cada jogo. Para a próxima versão 1.4, será implementada a coleta de dados de detalhes de cada jogo.
Se quiser acompanhar o desenvolvimento da API basta acessar o endereço http://psnapi.codeplex.com e para testar a aplicação basta acessar http://psnapi.miguel.ms/stable/PlaystationNetworkAPI.asmx.

Chrome será o navegador mais utilizado do mundo em breve

postado em 12 de jul de 2012 11:04 por João Miguel Tabosa Vaz Marques Silva   [ 12 de jul de 2012 11:48 atualizado‎(s)‎ ]

Chrome Logo
Andei analizando alguns dados sobre utilização de navegadores pelo mundo e reparei que entre Fevereiro e Março deste ano o Chrome será o navegador mais utilizado do mundo. Neste post você encontrará um gráfico com dados dos últimos 3 anos de uso dos navegadores mais conhecidos. Realmente a um reconhecimento a um bom software. Eu uso e recomendo Chrome pois alem de um navegador estável e rápido ele oferece um mundo de possibilidades. As que eu uso com mais frequencia são a sincronização de configurações e informações entre máquinas com o mesmo usuário. Existem outras muito boas como atalhos para web applications e plugins fantásticos.

Veja o gráfico anexo com as informações que eu compilei… Tracei algumas linhas de tendências e podemos verificar que as linhas do Firefox e Chrome se cruzam entre Fevereiro e Março. Vamos ver se isso se torna realidade até lá!


Como forçar ampulheta do windows em uma aplicação Windows Form

postado em 7 de jun de 2010 15:13 por João Miguel Tabosa Vaz Marques Silva   [ 7 de jun de 2010 16:23 atualizado‎(s)‎ ]

Suponhamos que você tem uma rotina da sua aplicação que demora muito tempo e durante esse tempo você não quer que o usuário interaja com o seu sistema e que para ele seja apresentada a ampulheta do windows. Já encontrei muitas respostas para esse problema porem apenas uma realmente me serviu... Tentei desde trocar a propriedade do ponteiro na sessão até do proprio formulário e por muitas vezes não tive sucesso algum. Encontrei esta solução que me serviu como uma luva e é de muito fácil implementação. Crie uma classe ex: HourGlass.cs

Código Classe HourGlass.cs

using System;
using System.Windows.Forms;

namespace MyApplication
{
    public class HourGlass : IDisposable
    {
        public HourGlass()
        {
            Enabled = true;
        }
        public void Dispose()
        {
            Enabled = false;
        }
        public static bool Enabled
        {
            get { return Application.UseWaitCursor; }
            set
            {
                if (value == Application.UseWaitCursor) return;
                Application.UseWaitCursor = value;
                Form f = Form.ActiveForm;
                if (f != null && f.Handle != null)
                    SendMessage(f.Handle, 0x20, f.Handle, (IntPtr)1);
            }
        }
        [System.Runtime.InteropServices.DllImport("user32.dll")]
        private static extern IntPtr SendMessage(IntPtr hWnd, int msg, IntPtr wp, IntPtr lp);
    }
}
A implementação é muito mais simples usando o comando using (new HourGlass()){} você consegue implementar de forma rápida e simples... Veja um exemplo:

Implementação da HourGlass em um método

private void MetodoASerExecutado()
{
    using (new HourGlass())
    {
        //Coloque aqui a rotina a ser executada...
    }
}
Todo o código que estiver dentro do using (new HourGlass()) será executado e durante esse tempo a interface da aplicação ficará indisponível. Esta implementação funciona onde as outras falham por confiar inteiramente no windows e fazendo a chamada diretamente no sistema operacional na user32.dll e não usando os métodos conhecidos do .net.

Múltiplos valores em um parâmetro de uma Stored Procedure (T-SQL)

postado em 7 de jun de 2010 15:01 por João Miguel Tabosa Vaz Marques Silva   [ 7 de jun de 2010 16:15 atualizado‎(s)‎ ]

Desenvolvendo um software para um cliente eu tive alguns problemas pois o mesmo queria que em um determinado relatório fosse passado n quantidades de "Canais" na geração do relatório. Bem nada complicado para o SQL Server lidar já que tudo é interligado por chaves estrangeiras, porem como eu poderia facilmente passar os valores selecionados em uma caixa de seleção múltipla como parâmetro para um Stored Procedure? Bem até ai pensei, fácil basta passar tudo junto como string Ex: "1,15,36,120,17" até ai muito fácil... Porem como tratar isso no SQL Server para que eu pudesse usar isso em um WHERE IN? Ai sim é que foram elas... Para tal eu desenvolvi baseado e algumas idéias na internet uma função que recebe isso como string e devolve como uma tabela de de uma coluna BIGINT que posso facilmente usar em um WHERE IN... Sendo assim eu simplesmente uso a função desta forma:
SELECT Id FROM func_QuebraVarcharIds("1,15,36,120,17",",") 
Como primeiro parâmetro passei tudo que precisava usando um separador, neste caso ",". No segundo parâmetro passei qual é o separador, neste caso novamente ",".Vejam agora o código da função:

Código Função "func_QuebraVarcharIds"

CREATE FUNCTION [dbo].[func_QuebraVarcharIds]
(
	@ListaIds varchar(max),
	@Delimitador varchar(1)
)
RETURNS @TabelaIds TABLE (Id bigint)
AS
BEGIN

	DECLARE @ListaIdsTemporaria varchar(max)
	SET @ListaIdsTemporaria = @ListaIds

	DECLARE @Indice INT
	DECLARE @Id varchar(max)

	SET @ListaIdsTemporaria = REPLACE (@ListaIdsTemporaria, ' ','')
	SET @Indice = CHARINDEX(@Delimitador, @ListaIdsTemporaria)

	WHILE (LEN(@ListaIdsTemporaria) > 0)
	BEGIN
		
		IF @Indice = 0
			SET @Id = @ListaIdsTemporaria
		ELSE
			SET @Id = LEFT(@ListaIdsTemporaria, @Indice - 1)
			
		INSERT INTO @TabelaIds(Id) VALUES(CONVERT(bigint,@Id))
		
		IF @Indice = 0
			SET @ListaIdsTemporaria = ''
		ELSE
			SET @ListaIdsTemporaria = RIGHT(@ListaIdsTemporaria, LEN(@ListaIdsTemporaria) - @Indice)
			
		SET @Indice = CHARINDEX(@Delimitador, @ListaIdsTemporaria)
		
	END

	RETURN

END
Bem, espero ter ajudado. Abraços e até mais...

1-4 of 4