abr 26

Bloquear notificações do aplicativo Meu Calendário

Se você não quer mais receber notificações ou solicitações do aplicativo Meu Calendário do Facebook, basta seguir 3 passos:

1- Vá até o ícone de notificações no topo do facebook e escolha a opção “Exibir todas notificações”:

2- Procure uma notificação do aplicativo Meu Calendário e clique no [x] ao lado e escolha a opção “Modificar configurações do aplicativo”.

3- Escolha a opção para ser notificado “Nunca” e salve as configurações.

Pronto! Nunca mais esse aplicativo chato vai te mandar solicitações. O mesmo processo pode ser aplicado para solicitações de joguinhos.

Método alternativo:

Se você não tem nenhuma notificação do aplicativo, o processo para bloquear o aplicativo é um pouco mais trabalhoso, mas também pode ser feito. Veja a dica abaixo que o meu amigo Edson Dias http://twitter.com/edsbox criou:

Para facebook em inglês:
- Menu ‘Home’, do lado direito
- ‘Privacy Settings’
- Rolando a tela, abaixo tem ‘Blocked People and Apps’, selecione do lado ‘Manage Blocking’
- No campo ‘Block apps:’ digite ‘Meu calendário’, e clique nele quando aparecer
- Deve aparecer na lista de aplicações bloqueadas “Meu Calendário’ e ‘unblock’

Em português
- Menu ‘Página inicial’, do lado direito
- ‘Configurações de privacidade’
- Rolando a tela, abaixo tem ‘Pessoas e aplicativos bloqueados’, selecione do lado ‘Gerenciar bloqueio’
- No campo ‘Block apps:’ digite ‘Meu calendário’, e clique nele quando aparecer. (legal que a tradução tá bem tosca)
- Deve aparecer na lista de aplicações bloqueadas “Meu Calendário’ e ‘Desbloquear’

[]‘s,

mar 13

SQL Express 2008 Full Text Index Amazon EC2

Ao criar uma nova instância de servidor na Amazon EC2 é possível selecionar uma AMI que já traga instalado o SQL Server 2008 R2 Express.

Porém, quando fui tentar utilizar Full-Text-Index do SQL Server, notei que esse componente não estava instalado.

O comando:

EXEC sp_fulltext_column [Tabela], [Coluna], 'add'

Retornava o seguinte erro:

Full-Text Search is not installed, or a full-text component cannot be loaded.

Na lista de serviços do Windows, aparecia o serviço: “SQL Server (EC2SQLEXPRESS)”, porém o serviço do Full Text não aparecia.

No meu caso, eu estava utilizando o “Windows Server 2008 R2 64bit” e o “SQL Express 2008 R2 With Advanced Tools”

Localizando a versão do seu sistema operacional

Você pode verificar a versão do seu sistema operacional clicando com o botão direito sobre o “Meu Computador” que aparece no meu Iniciar do Windows e escolhendo a opção “Propriedades”

Localizando a versão do seu SQL Server

Para verificar a versão do seu SQL Server, abra o Management Studio, conecte no servidor, clique com o botão direito sobre o nome do servidor e escolha a opção “Propriedades”. Procure os atributos “Version” e “Language”. Pegue o número da versão, por exemplo “10.50.2500.0″ e pesquise aqui: http://support.microsoft.com/kb/321185/pt. Importante você notar também a versão da instação no atributo “Language”.

Algumas das versões mais comuns são:

Versão “10.50.1600.1″ = SQL Server 2008 R2 RTM
Versão “10.50.2500.0″ = SQL Server 2008 R2 Service Pack 1

Versão “10.00.1600.22″ = SQL Server 2008 RTM
Versão “10.00.2531.00″ = SQL Server 2008 Service Pack 1
Versão “10.00.4000.00″ = SQL Server 2008 Service Pack 2
Versão “10.00.5500.00″ = SQL Server 2008 Service Pack 3

Microsoft® SQL Server® 2008 R2 Service Pack 1

Como o meu SQL Sever não tinha o Service Pack 1, primeiramente foi necessário instalar esse Pack.

Você pode baixar o Service Pack no seguinte link: http://www.microsoft.com/download/en/details.aspx?displaylang=en&id=26727

Note que nesse link estão disponíveis o Service Pack 1 do SQL Express 2008 e do SQL Express 2008 R2, ambos disponíveis em 32 e 64 bits e na linguagem em inglês. Você precisa verificar a versão do seu SQL Server para baixar o Pack correto.

No meu caso, baixei o arquivo: SQLServer2008R2SP1-KB2528583-x64-ENU.exe

Você terá que reiniciar o servidor para finalizar a instalação.

Se você tentar instalar o pack errado (como instalar o SP1 do SQL2008 no SQL2008R2) será apresentada uma mensagem dizendo que a versão não é compatível.

Microsoft SQL Server2008 R2 RTM – Express with Advanced Services

Depois é necessário rodar o setup do “Microsoft SQL Server2008 R2 RTM – Express with Advanced Services” para adicionar a feature do Full-Text-Index na instância existente.

Você pode baixar o instalador do Microsoft SQL Server2008 R2 RTM – Express with Advanced Services aqui: http://www.microsoft.com/download/en/details.aspx?displaylang=en&id=25174

Rode o instalador e escolha a opção para adicionar features a uma instância existente. Selecione a instância e clique em continuar.

Selecione a funcionalidade Full Text Index e finalize a instalação.

Depois, verifique se o serviço está rodando:

É isso o full text index está instalado.

Enable Full Text Index

Ao tentar criar o Full Text Index, você pode receber o erro:

Msg 6263, Level 16, State 1, Line 1
Execution of user code in the .NET Framework is disabled. Enable "clr enabled" configuration option.

Para corrigir esse problema, rode no SQL os seguintes comandos:

sp_configure 'show advanced options', 1;
GO
RECONFIGURE;
GO
sp_configure 'clr enabled', 1;
GO
RECONFIGURE;
GO

Criação do Full-Text-Index

Executados todos esses passos, você já pode criar o índice:

EXEC sp_fulltext_database 'enable'
GO

CREATE FULLTEXT CATALOG [NOMECatalog] WITH ACCENT_SENSITIVITY = OFF
GO

EXEC sp_fulltext_table [TABELA], 'create', '[NOMECatalog]', [PK_NOME]
EXEC sp_fulltext_column [TABELA], [Coluna], 'add'
EXEC sp_fulltext_table [TABELA], 'activate'
EXEC sp_fulltext_table [TABELA], 'start_full'

EXEC sp_fulltext_table [TABELA], 'start_change_tracking'
EXEC sp_fulltext_table [TABELA], 'start_background_updateindex'
go

dez 05

Envio de e-mail com Amazon SES usando C#

O que é o SES

Dentre os serviços disponíveis no Amazon AWS, existe um exclusivo para envio de e-mail, é o SES (Amazon Simple Email Service).

Criando as chaves para acessar o serviço

Antes de utilizar esse serviço, é necessário criar as chaves de acesso para a API, para isso, siga os seguintes passos:

  1. Acesse o site da Amazon:
    http://aws.amazon.com/, clique em “Sign in to the AWS Management Console e forneça o seu usuário e senha
  2. Clique em “Security Credentials”.
  3. Clique na opção “Create a new Access Key”.
  4. Serão geradas duas chaves: “Access Key” e “Secret Access Key”. Você precisará dessas chaves para fazer o envio.

Cadastrando os remetentes

Você só pode enviar e-mail utilizando remetentes cadastrados, para cadastrar um remetente siga os seguintes passos:

  1. Acesse a área SES do console do Amazon AWS. https://console.aws.amazon.com/ses/home
  2. Adicione o endereço do e-mail de remetente que deseja adicionar.
  3. Você receberá um e-mail nessa conta. Clique no link do e-mail recebido para confirmar esse remetente.

Envio utilizando a API via C#

Para fazer envio de e-mail utilizando o serviço SES do Amazon AWS utilizando a linguaguem C#, siga os seguintes passos:

  1. Baixe a API .NET da Amazon no seguinte endereço: http://aws.amazon.com/sdkfornet/
  2. Instale a API
  3. Adicione no seu projeto uma referência para a DLL “AWSSDK.dll”, deve ter sido instalada no caminho: “C:\Program Files (x86)\AWS SDK for .NET\bin\AWSSDK.dll”

O código da rotina de envio é o seguinte:


        public static Boolean SendRawEmail(String from, String to, String cc, String Subject, String text, String html, String replyTo, String returnPath, List<System.Net.Mail.Attachment> attachmentList)
        {
            MailMessage mailMessage = new MailMessage();

            mailMessage.From = new MailAddress(from);

            List<string> toAddresses = to.Replace(", ", ",").Replace(",", ";").Split(',').ToList();
            foreach (string toAddress in toAddresses)
                mailMessage.To.Add(new MailAddress(toAddress));

            if (!string.IsNullOrEmpty(cc))
            {
                List<string> ccAddresses = cc.Replace(", ", ",").Split(',').ToList();
                foreach (string ccAddress in ccAddresses)
                {
                    mailMessage.CC.Add(new MailAddress(ccAddress));
                }
            }

            mailMessage.Subject = Subject;
            mailMessage.SubjectEncoding = Encoding.UTF8;

            if (!string.IsNullOrEmpty(replyTo))
            {
                List<string> replyAddresses = replyTo.Replace(", ", ",").Replace(",", ";").Split(',').ToList();
                foreach (string replyAddress in replyAddresses)
                    mailMessage.ReplyToList.Add(new MailAddress(replyAddress));
            }

            if (!string.IsNullOrEmpty(text))
            {
                AlternateView plainView = AlternateView.CreateAlternateViewFromString(text, Encoding.UTF8, "text/plain");
                mailMessage.AlternateViews.Add(plainView);
            }

            if (!string.IsNullOrEmpty(html))
            {
                AlternateView htmlView = AlternateView.CreateAlternateViewFromString(html, Encoding.UTF8, "text/html");
                mailMessage.AlternateViews.Add(htmlView);
            }

            if (attachmentList != null)
            {
                foreach (var objAttach in attachmentList)
                {
                    ContentDisposition disposition = objAttach.ContentDisposition;
                    disposition.DispositionType = "attachment";
                    disposition.CreationDate = System.IO.File.GetCreationTime(objAttach.Name);
                    disposition.ModificationDate = System.IO.File.GetLastWriteTime(objAttach.Name);
                    disposition.ReadDate = System.IO.File.GetLastAccessTime(objAttach.Name);
                    mailMessage.Attachments.Add(objAttach);
                }
            }

            RawMessage rawMessage = new RawMessage();

            using (MemoryStream memoryStream = ConvertMailMessageToMemoryStream(mailMessage))
            {
                rawMessage.WithData(memoryStream);
            }

            SendRawEmailRequest request = new SendRawEmailRequest();
            request.WithRawMessage(rawMessage);
            request.WithDestinations(toAddresses);
            request.WithSource(from);

            AmazonSimpleEmailServiceClient serMailSer = new AmazonSimpleEmailServiceClient(ACCESS_KEY, SECRET_ACCESS_KEY);

            try
            {
                SendRawEmailResponse response = serMailSer.SendRawEmail(request);

                SendRawEmailResult result = response.SendRawEmailResult;

                Console.WriteLine("Email sent.");
                Console.WriteLine(String.Format("Message ID: {0}", result.MessageId));

                return true;
            }
            catch (Exception ex)
            {
                Console.WriteLine(string.Format("EXCEPTION: {0}", ex.Message));

                return false;
            }
        }

        private static MemoryStream ConvertMailMessageToMemoryStream(MailMessage message)
        {
            BindingFlags flags = BindingFlags.Instance | BindingFlags.NonPublic;
            Assembly assembly = typeof(SmtpClient).Assembly;
            MemoryStream stream = new MemoryStream();
            Type mailWriterType = assembly.GetType("System.Net.Mail.MailWriter");
            ConstructorInfo mailWriterContructor = mailWriterType.GetConstructor(flags, null, new[] { typeof(Stream) }, null);
            object mailWriter = mailWriterContructor.Invoke(new object[] { stream });
            MethodInfo sendMethod = typeof(MailMessage).GetMethod("Send", flags);
            sendMethod.Invoke(message, flags, null, new[] { mailWriter, true }, null);
            MethodInfo closeMethod = mailWriter.GetType().GetMethod("Close", flags);
            closeMethod.Invoke(mailWriter, flags, null, new object[] { }, null);
            return stream;
        }

Um exemplo de chamada do código é o seguinte:


        private const string ACCESS_KEY = "xxxxxx"; //Substituir pela sua chave
        private const string SECRET_ACCESS_KEY = "xxxxxxxxx"; //Substituir pela sua chave

            List<System.Net.Mail.Attachment> attachmentList = new List<System.Net.Mail.Attachment>();
            //attachmentList.Add(new System.Net.Mail.Attachment(@"c:\temp\teste.txt"));
            //attachmentList.Add(new System.Net.Mail.Attachment(@"c:\temp\teste2.txt"));

            SendRawEmail("remetente@email.com", "destinatario@email.com", null, "teste", "texto teste", "<h2>mensagem teste</h2>", "no-reply@email.com.br", null, attachmentList);

Lembrando que você deve substituir nesse código além das chaves “Access Key” e “Secret Access Key” geradas no passo anterior, também os endereço de rementente, destinatário e a mensagem.

Download do exemplo

Esse exemplo pode ser baixado aqui: www.educoutinho.com.br/downloads/AmazonSESEmailSend.zip

Mais informações

Para obter mais informações sobre o SES, consulte os seguintes links:
http://aws.amazon.com/ses/
http://aws.amazon.com/documentation/ses/

dez 01

O que são meta tags

O que são meta tags?

Meta tags permitem adicionar as páginas html informações sobre a própria página, por exemplo: uma breve descrição, data de criação, autor, palavras chave etc.

Utilização:

Devem ser adicionadas no cabeçalho da página, ex:


<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" >
<head>
    <title>Relógios XYZ - Loja relógios, Preços de relógios, Catálogo</title>
    <meta name="description" content="Relógios XYZ possui uma lista completa de reláogios masculinos e femininos para compra, além de serviços de manutenção e uma galeria com a evolução dos relógios" />
</head>
<body>
    Página
</body>
</html>

Exemplo:

Um exemplo mais completo de meta tag:


<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" >
<head>
    <title>Relógios XYZ - Loja relógios, Preços de relógios, Catálogo</title>

    <meta name="description" content="Relógios XYZ possui uma lista completa de reláogios masculinos e femininos para compra, além de serviços de manutenção e uma galeria com a evolução dos relógios" />
    <meta name="keywords" content="relógios, compra, femininos, masculinos, esportivos, relógios históricos" />

    <meta name="robots" content="follow" />

    <meta http-equiv="cache-control" content="no-cache" />
    <meta http-equiv="content-language" content="pt-br" />
    <meta http-equiv="content-type" content="text/html; charset=UTF-8" />
    <meta http-equiv="expires" content="0" />

    <meta name="author" content="Eduardo" />
    <meta name="copyright" content="© 2009 Eduardo" />
</head>
<body>
    <div>
        Conteúdo da página
    </div>
</body>
</html>

 

Detalhamento:

Description
Breve descrição da página

Keywords
Palavras-chave utilizadas por alguns motores de busca exibir informações da página para os usuários

Author
Nome do autor da página

Cache-Control

  • Public: Os dados da página podem ser armazenados de forma compartilhada, isto é, será utilizado por diferentes usuários de um mesmo browser (Notar que só é possível especificar usuários de browser no Firefox e Opera).
  • Private: É o contrário de public, o cache é armazenado para um específico usuário.
  • No-Cache: A página não é armazenada em Cache.
  • No-Store: É feito um cache temporário, a página não é arquivada.

Content-language
Declara a(s) linguagem(ns) natural(is) do documento. Pode ser usada pelos motores de busca para categorizar por idioma. Podem ser indicados mais de um idioma, ex: “pt-br, en-US, fr”

Content-type:
Define o tipo de conteúdo da página e o tipo de codificação de caracteres. Pode-se dizer que é a meta tag mais importante, sempre deve ser usada.

Copyright
Direito autoral da página

Expires
Indica quando o conteúdo da página expira. É utilizado “0″ (zero) para indicar que o robô deve indexar o conteudo novamente a cada visita.

Robots
Especifica informações de indexação para os robôs de busca, suporta os seguintes valores:

  • All: Valor default, significa vazio, o robô de busca não recebe nenhuma informação.
  • Index: Os robôs de busca podem incluir a página normalmente.
  • Follow: Robôs podem indexar a página e ainda seguir os links para outras páginas que ela contém.
  • NoIndex:Os links podem ser seguidos, mas a página não é indexada.
  • NoFollow: A página é indexada, mas os links não são seguidos.
  • None: Os robôs podem ignorar a página.
  • NoArchive (Apenas Google): A página não é arquivada.

 

Adicionando via codebehind de páginas aspx

Para adicionar meta tags em páginas aspx através do codebehind, utilize:

System.Web.UI.HtmlControls.HtmlMeta metaKeywords = new System.Web.UI.HtmlControls.HtmlMeta();
metaKeywords.Name = "keywords";
metaKeywords.Content = "";
System.Web.UI.HtmlControls.HtmlMeta metaDescription = new System.Web.UI.HtmlControls.HtmlMeta();
metaDescription.Name = "description";
metaDescription.Content = "";
Page.Header.Controls.Add(metaKeywords);
Page.Header.Controls.Add(metaDescription);

Referências:

Utilizando meta tags: https://developer.mozilla.org/pt/Utilizando_meta_tags
Html meta (em inglês): http://www.w3schools.com/html/html_meta.asp
Google Robots meta tag (em inglês): http://googlewebmastercentral.blogspot.com/2007/03/using-robots-meta-tag.html

 

Assuntos relacionados:

SEO = (Search Engine Optimization, Otimização de Sites) são técnicas utilizadas para melhorar o posicionamento de um site nos resultados de sites de busca.
- Search Engine Optimization (em ingles) http://www.google.com/support/webmasters/bin/answer.py?answer=35291
- Google’s Search Engine Optimization
Starter Guide (em ingles) http://www.google.com/webmasters/docs/search-engine-optimization-starter-guide.pdf

dez 01

Instalação do TFS Team Foundation Server

Detalharei aqui o processo de instalação do TFS (Team Foundation Server), o servidor do Team System.

Manual de instalação:

Nesse link você encontra o manual de instalação em ingles: http://www.microsoft.com/downloads/details.aspx?FamilyID=FF12844F-398C-4FE9-8B0D-9E84181D9923&displaylang=en

Pré-requisitos:

Os pré-requisitos são:

1- Windows Server 2003;

2- IIS (para instalar o IIS utilize a opção: Start / Contol Panel / Add or Remove Programs / botão lateral: Add or Remove Windows Components / Application Server / Marcar a opção: Internet Information Server (IIS);

tfs_install_iis

3- SQL 2005 ou 2008. No meu caso utilizei o SQL 2005.

Na instalação do SQL você deve fazer as seguintes configurações:

  • Instalar os componentes : SQL Server Database Services, Analysis Services, Reporting Services;
  • Marcar para iniciar automaticamente os serviços: SQL Server, SQL Server Agent, Analysis Services, Reporting Services, SQL Browser.
  • Selecionar uma Collation Case sensitive SIM e Accent sensitive NAO. No meu caso, utilizei a seguinte configuração:
tfs_install_sql_collation

4- SQL Service Pack – Instale o Service Pack 1 ou 2 no SQL. No meu caso instalei o SP2.

 

Instalação do TFS:

Insira o DVD de instação do Team Foundation Server no drive do servidor e clique na opção “Team Foundation Server”.

tfs_install_01

Você passará pelas seguintes telas:

tfs_install_02

 tfs_install_03

tfs_install_04

Na tela abaixo você deve indicar a instancia do SQL que você quer utilizar para instalar os databases utilizados pelo Team Foundation Server. No meu caso estou utilizando a instância padrão, por isso, informei o nome da minha máquina “VMSERVER01″.

tfs_install_05

Na próxima etapa, o instalador verifica se todos os pré-requisitos para instalação estão ok. Caso algum não tenha sido atendido, será exibida uma página com um relatório dos problemas, você deve corrigir os problemas e iniciar o processo de instalação novamente.

Caso todos os pré-requisitos tenham sido atendidos, é exibida a tela abaixo:

tfs_install_06

Se você obter a seguinte mensagem:

TF220059: An error occurred while the Setup program was querying the installation settings for Team Foundation Server. For more information about this error, see the installation logs. For more information about the installation logs, see “Troubleshooting Installation for Team Foundation” in the Team Foundation Installation Guide.

Verifique se o SQL Reporting Services está instalado.

tfs_install_07

Na etapa abaixo você deve indicar um usuário para executar o SQL Reporting Services.

tfs_install_08

tfs_install_09

No meu caso, eu criei um novo usuário.

Para criar um novo usuário:

  1. Start / Control Panel / Administrative Tools / Computer Management / Local Users and Groups
  2. Clicar com o botão direito do mouse sobre a pasta “Users” e escolher a opção “New user”.
  3. Informar um nome de usuário, no meu caso utilizei “servicos”, informei uma senha e marquei para a senha não expirar.

 tfs_install_account_01

 Depois de criado o usuário, clica com o botão direito sobre ele, escolha a opção “Properties” e adicione ele no grupo “administrators”:

tfs_install_account_02

No processo de instalação do Team Foundation Server, informe o usuário:

tfs_install_10

Na tela abaixo, você pode configurar um SMTP para envio de e-mail com notificações de TFS:

tfs_install_11

tfs_install_12

tfs_install_13

tfs_install_14

Após a conclusão da instalação é solicitado que você reinicie o servidor:

tfs_install_15

Abaixo você pode visualizar a lista de Banco de Dados que a instalação do TFS cria na instância de SQL informada:

tfs_install_db

dez 01

Problema conexão Windows 7 e Virtual PC Windows 2003

Eu estou utilizando o Windows 7 e montei uma Virtual Machine usando o Virtual PC 2007 e instalei o Windows 2003 R2 SP2, no entanto eu não estava conseguindo nem da minha máquina acessar a VM e nem da VM acessar a minha máquina.

O que eu tentei fazer e não funcionou foi o seguinte:

1- Configurei a VM para usar tipo de conexão NAT (nas propriedades de configuração da VM)

2- Configurei na VM um IP fixo (ip: 192.168.0.100 / subnet mask: 255.255.255.0 / gateway: 192.168.0.1) na mesma faixa de IP da minha máquina local (ip: 192.168.0.10 / subnet mask: 255.255.255.0 /gateway: 192.168.0.1), mesmo assima não funcionou, quando eu usava o comando “ping 192.168.0.10″ na VM não encontrava a minha máquina.

3- Desabilitei o Firewall da VM (Control Panel / Windows Firewall) e na minha máquina local (Control Panel / System and Security / Windows Firewall) desabilitei o firewall para a rede interna (Home or work [private] network)

4- Na VM instalei o Networking Services (Control Panel / Add Remove Programs / Windows Components / Networking Services)

Depois de tudo isso e ainda assim não funcionando, resolvi dar uma pesquisada melhor na internet e encontrei o seguinte site:

http://www.eggheadcafe.com/conversation.aspx?messageid=29381135&threadid=29186855

Depois de ler isso, fiz o seguinte na minha máquina e funcionou:

1- Control Panel / Network and Internet / Network and Sharing Center / Change Adapter Settings, cliquei com o botão direito sobre o nome do meu adaptador de rede, selecionei propriedades e marquei a opção “Virtual Machine Network Services” e confirmei

2- Fui nas propriedades de configuração da VM e marquei para usar esse adaptador de rede. Pronto funcionou!

Essa descrição está bem focada no meu problema, mas talvez ajude mais alguém com o mesmo problema.

Abraços.

dez 01

iPhone – Criar conta app store americana (itunes) utilizando cartão internacional

No seu iPhone, se você criou uma conta na App Store do Brasil, já deve ter notado que o número de aplicativos é bastante reduzido e que não tem nenhum jogo. Já na App store, a coisa é bem diferente, o número de aplicativos e jogos é muito grande.

Algum tempo atrás, era possível criar uma conta sem informar um número de cartão de crédito, apenas marcando como forma de pagamento a opção “none”, mas essa opção foi removida. A opção que encontrei para criar a conta na App Store foi utilizar um cartão internacional mesmo sendo do Brasil.

Para criar a conta, faça o seguinte:

  • Abra o software iTunes (que é utilizado para sincronizar o iPhone com o computador);
  • Menu: “Loja” / “Finalizar sessão” (para sair do seu usuário atual, caso você tenha um do Brasil
  • Menu: “Loja” / “Criar conta”
  • Na página de “Boas-vindas”, clique no botão “Avançar”
  • Na página com o contrato, você deve altera-lo para “Estados Unidos”, na parte superior, clique em “Se o endereço de cobrança de suas informações de pagamento não estiverem no Brazil, clique aqui”;
  • Selecione o pais: “Estados Unidos” e clique no botão “Change Country”;
  • Repita os passos acima para voltar a página do contrato, que agora deve estar em inglês;
  • Marque a opção para aceitar o contrato “I have read and agree…” e clique no botão “Continue”;
  • Página “Apple ID”, preencha os dados do usuário e informe um novo usuário (que você não tenha utilizado para criar outra conta);
  • Na página da forma de pagamento:
  1. Informe os dados do seu cartão de crédito internacional
  2. No endereço de conbrança (Billing Address) informe um endereço dos estados unidos, por exemplo, podemos utilizar o endereço do google em Nova York
    76 Ninth Avenue
    4th Floor
    New York, NY 10011
  3. No campo “zipcode”, informe os 5 primeiros dígitos do
    SEU CEP aqui no Brasil, se o seu cep começar com zero, desconsidere o zero. Por exemplo, se o SEU CEP for: “09876-543″ informe o zip code “9876″. Se não funcionar, tente procurar uma cidade com o CEP iniciando com Zero, ex: “098765″;
  4. Você tem que ajustar a cidade e estado do seu cadastro para uma cidade dos Estados Unidos que tenha esse mesmo zip code, então faça o seguinte, entre no seguite site: http://zip4.usps.com/zip4/citytown_zip.jsp digite o seu zip code, por exemplo “12345″, nesse caso, a cidade correspondente é: “SCHENECTADY, NY’ utilize essa cidade e esse estado no seu cadastro;
  • Pronto! pode utilizar a sua conta App Store no iPhone para baixar jogos

out 28

WordPress – Erro 500 nas imagens – IIS7

Ao instalar o WordPress no IIS7 é possível configurar as urls amigáveis criando um arquivo “web.config” que deverá ser colocado na raiz do site com o seguinte conteúdo:

<?xml version="1.0"?>
<configuration>
 <system.webServer>
 <defaultDocument>
  <files>
    <remove value="index.php" />
    <add value="index.php" />
  </files>
 </defaultDocument>
<rewrite>
 <rules>
     <rule name="Main Rule" stopProcessing="true">
         <match url=".*" />
         <conditions logicalGrouping="MatchAll">
             <add input="{REQUEST_FILENAME}" matchType="IsFile" negate="true" />
             <add input="{REQUEST_FILENAME}" matchType="IsDirectory" negate="true" />
         </conditions>
         <action type="Rewrite" url="index.php/{R:0}" />
     </rule>
 </rules>
</rewrite>
</system.webServer>
</configuration>

Esse config fará a configuração do redirecionamento utilizando o “URL Redirect” do IIS7.

Depois, através do painel de administração do WordPress, clique na opção “Configurações” do menu da direita do painel e depois em “Links permanentes”. Marque a opção “Estrutura personalizada” e cole o seguinte texto: “/%category%/%postname%/”

Isso fará com que os seus posts sejam publicados com um modelo de url como: “/categoria/titulo” ao invés de algo como: “/2011/10/29/sample-post/”

Mas não é sobre esse redirecionamento para utilizar url’s amigáveis que gostaria de falar e sim, de um problema que estava acontecendo no meu servidor.

Notei que todas as imagens que eu fazia upload e que eu configurava para serem exibidas nos tamanhos pequeno, médio ou grande, apareciam normalmente no site. Porém a imagem no tamanho original, que é exibida quando o usuário clica na imagem para amplia-la, apresentava o seguinte erro:


HTTP Error 500.50 – URL Rewrite Module Error.
The page cannot be displayed because an internal server error has occurred.

Module RewriteModule
Notification BeginRequest
Handler StaticFile
Error Code 0×80070005

* PS: Essa descrição completa do erro é exibida somente quanda a página é visualizada no servidor. Nos outros casos, é exibido somente a mensagem de erro 500.

Então, o problema era o seguinte:
Ao fazer upload de uma imagem com o nome: “000.jpg”, são criados thumbs (miniaturas) de vários tamanhos, ex: “000-150×150.jpg”, “000-300×210.jpg” e “000-539×198.jpg”

Esses 3 arquivos eram carregados normalmente pelo browser porém ao acessar o arquivo original: “000.jpg”, ocorria o erro 500.

Eu comecei esse post falando do Rewriter para urls amigáveis porque inicialmente achei que o problema de erro 500 das imagens era gerado devido a um problema do Rewrite

Porém, o problema no meu caso era de permissão de acesso nos arquivos das imagens.

A correção é a seguinte:

Adicione na pasta “wp-content” permissão de acesso para o usuário “IIS_IUSRS” e faça a permissão ser replicada para todas as subpastas.

Adicione também permissão para o usuário “IIS_IUSRS” na pasta “Windows\Temp”, porque o WordPress copia os arquivos de upload para essa pasta antes de copia-los para a pasta “wp-content”

out 18

Remover caracteres especiais e acentuação com Regex e c#

A função c# abaixo remove caracteres especiais e de acentuação utilizando Regex e um array com os caracteres para substituir.

A função substitui caracteres com acento por exemplo, trocando “á” por “a” e “ç” por “c”, remove caracteres especiais como “.” ou “#”, tem uma opção para aceitar espaços e mantém maiúsculas e minúsculas.

Exemplos de entrada e saída, passando como parâmetro aceitaEspaco=false e substituiAcentos=false:
- “Maça” -> “Maca”
- “212.221.521-50″ -> “21222152150″
- “José da Silva” -> “Jose da Silva”
- “Coração” -> “Coracao”
- “teste!@#” -> “teste”


public static string RemoveCaracteresEspeciais(string texto, bool aceitaEspaco, bool substituiAcentos)
        {
            string ret = texto;

            if (string.IsNullOrEmpty(ret))
                return ret;

            if (substituiAcentos)
                ret = RemoveAcentos(ret);

            if (aceitaEspaco)
                ret = System.Text.RegularExpressions.Regex.Replace(ret, @"[^0-9a-zA-ZéúíóáÉÚÍÓÁèùìòàÈÙÌÒÀõãñÕÃÑêûîôâÊÛÎÔÂëÿüïöäËYÜÏÖÄçÇ\s]+?", string.Empty);
            else
                ret = System.Text.RegularExpressions.Regex.Replace(ret, @"[^0-9a-zA-ZéúíóáÉÚÍÓÁèùìòàÈÙÌÒÀõãñÕÃÑêûîôâÊÛÎÔÂëÿüïöäËYÜÏÖÄçÇ]+?", string.Empty);

            return ret;
        }

        public static string RemoveAcentos(string text)
        {
            StringBuilder sb = new StringBuilder();
            for (int i = 0; i < text.Length; i++)
                sb.Append(s_Accents1]);

            return sb.ToString();
        }

        private static readonly char[] s_Accents = GetAccents();
        private static char[] GetAccents()
        {
            char[] accents = new char[256];

            for (int i = 0; i < 256; i++)
                accents[i] = (char)i;

            accents[(byte)'á'] = accents[(byte)'à'] = accents[(byte)'ã'] = accents[(byte)'â'] = accents[(byte)'ä'] = 'a';
            accents[(byte)'Á'] = accents[(byte)'À'] = accents[(byte)'Ã'] = accents[(byte)'Â'] = accents[(byte)'Ä'] = 'A';

            accents[(byte)'é'] = accents[(byte)'è'] = accents[(byte)'ê'] = accents[(byte)'ë'] = 'e';
            accents[(byte)'É'] = accents[(byte)'È'] = accents[(byte)'Ê'] = accents[(byte)'Ë'] = 'E';

            accents[(byte)'í'] = accents[(byte)'ì'] = accents[(byte)'î'] = accents[(byte)'ï'] = 'i';
            accents[(byte)'Í'] = accents[(byte)'Ì'] = accents[(byte)'Î'] = accents[(byte)'Ï'] = 'I';

            accents[(byte)'ó'] = accents[(byte)'ò'] = accents[(byte)'ô'] = accents[(byte)'õ'] = accents[(byte)'ö'] = 'o';
            accents[(byte)'Ó'] = accents[(byte)'Ò'] = accents[(byte)'Ô'] = accents[(byte)'Õ'] = accents[(byte)'Ö'] = 'O';

            accents[(byte)'ú'] = accents[(byte)'ù'] = accents[(byte)'û'] = accents[(byte)'ü'] = 'u';
            accents[(byte)'Ú'] = accents[(byte)'Ù'] = accents[(byte)'Û'] = accents[(byte)'Ü'] = 'U';

            accents[(byte)'ç'] = 'c';
            accents[(byte)'Ç'] = 'C';

            accents[(byte)'ñ'] = 'n';
            accents[(byte)'Ñ'] = 'N';

            accents[(byte)'ÿ'] = accents[(byte)'ý'] = 'y';
            accents[(byte)'Ý'] = 'Y';

            return accents;
        }

set 24

Como testar ou ativar o novo facebook 2011 no seu perfil

Vou detalhar aqui como testar ou ativar o novo facebook no seu perfil. Depois de realizar todos esses passos, todos visualizarão o seu perfil no modelo novo que por enquanto está restrito para poucas pessoas.

Vou adiandar que para você ativar o novo facebook no seu perfil, você precisará mudar o idioma do seu facebook para inglês, então se você  tiver dificuldade em utilizar o facebook em inglês pode não ser uma boa fazer isso.

Primeiramente, entre nas opções da sua conta, mude o idioma para Inglês e clique no botão “Salvar alterações”:

Agora, vamos criar uma aplicação de testes dentro do facebook.

Entre na url: http://www.facebook.com/developers/ e clique no botão “Create new app” no canto superior direito da página:

Digite um nome qualquer para a aplicação, só é importante que esse nome não tenha sido utilizado por outra pessoa (Available), você pode por exemplo usar seu nome junto com a palavra teste, exemplo “seunome-teste”. Depois clique no botão “Continue”:

Preencha o captcha com a frase e clique em “Submit”:

Se você não tiver o número de celular associado na sua conta, será exibida a mensagem: “Your account must be verified before you can take this action. Please verify your account by adding your mobile phone or credit card”. Clique no link “Mobile” dessa mensagem.

Preencha com o DDD e o número do seu celular e clique no botão “Confirm”, será enviado um SMS para você com um código de validação. OBS: Me parece que isso só fuciona com alguma operadoras de celular, eu testei com a TIM e funcionou.

Depois que você receber o código de confirmação via SMS, digite ele na próxima tela:

Será exibida uma mensagem que o código foi confirmado corretamente:

Agora, confirme novamente a criação da aplicação:

Será exibida uma página para configuração da nova aplicação, clique na opção “Open Graph” no meu da esquerda:

Adicione alguma ação para a sua aplicação, pode ser:
People can “see” a “profile”. Depois clique no botão “Get started”:

Depois clique no botão “Save changes”:

Agora clique no botão “Save and Finish”:

Quando você entrar no seu perfil, será exibida uma caixa com uma mensagem. Clique no botão “Get It now”:

Será exibido o seu perfil no novo layout do facebook 2011. Clique no botão “Publish now” para publicar a alteração para todos.

É só isso.

Posts mais antigos «