Assuntos relacionados à programação, pedaços de códigos, pequenas dicas, pequenos tutoriais, alguns vídeos, algumas fotos e etc.

Pegando o conteúdo de uma url com Objective-C

Posted: fevereiro 4th, 2009 | Author: Carlan Calazans | Tags: , , , , | No Comments »

Desde ontem estava tentando pegar o conteúdo de uma url qualquer e imprimir no console. Até que não é tão complicado comparando com Ruby ou Python. Minha maior dificuldade foi converter de NSMutableData para NSString. Também não sei por que cargas d’águas não está funcionando para todas as urls, a do google, por exemplo.

Estou gostando de Objective-C, mas sinto falta das facilidades de  Ruby e Python, provavelmente por estar mais acostumado a elas. E é muito fácil se perder na chamada a métodos utilizando a sintaxe dos colchetes, pior se eles estiverem aninhados. Como estou programando utilizando o ubuntu a “dot-syntax” não está disponível, acredito que somente no Mac Os. É nessa hora que um bom editor de textos faz toda a diferença.

Pra quem se interessar, segue o código.

#import <Foundation/Foundation.h>

// 03-02-2009
// Carlan Calazans (carlancalazans at gmail.com)

//connection.h
@interface Connection: NSObject
{
  NSString                 *strUrl;
  NSMutableData        *myReceivedData;
}
  -(void) initialize;
@end

//connection.m
@implementation Connection
  -(void) initialize
  {
  NSLog(@"Started...");
  strUrl = [NSString stringWithFormat:@"http://carlancalazans.com"];

  NSLog(@"URL: %@", strUrl);
  myReceivedData = [[NSMutableData dataWithContentsOfURL:[NSURL URLWithString:strUrl]] autorelease];

  NSLog(@"Received %d bytes of data.", [myReceivedData length]);
  NSString *content = [[NSString alloc] initWithData:myReceivedData encoding:NSUTF8StringEncoding];

  NSLog(@"Content received: %@", content);
  NSLog(@"Finished...");

  [content release];
  }
@end

//main.m
int main(int argc, const char *argv[])
{
  NSAutoreleasePool *pool = [[NSAutoreleasePool alloc] init];

  Connection *con = [[Connection alloc] init];
  [con initialize];

  [con release];
  [pool release];

  return 0;
}

Dica: Objective-C no Ubuntu

Posted: janeiro 29th, 2009 | Author: Carlan Calazans | Tags: , , , , | No Comments »

Após ter lido alguns how-to’s aqui e ali, resolvi testar. Segui os seguintes passos:

sudo apt-get install gnustep gobjc gnustep-make libgnustep-base-dev
gnustep-netclasses gnustep-dl2

sudo chmod +x /usr/share/GNUstep/Makefiles/GNUstep.sh

Editei o ~/.bashrc e adicionei no final do arquivo:

#gnustep

GNUSTEP_ROOT=/usr/share/GNUstep
export GNUSTEP_ROOT
source $GNUSTEP_ROOT/Makefiles/GNUstep.sh

E agora eu consigo fazer isto:

dog.m

#import <Foundation/NSObject.h>
#import <stdio.h>

// 29-01-2009
// Carlan Calazans (carlancalazans at gmail.com)

// dog.h
@interface Dog: NSObject
{
// instance variables
}

  -(void) bark;
  -(void) eat;
  -(void) chaseCat;
@end

// dog.m
@implementation Dog
  -(void) bark
  {
    printf("Ruff, ruff, ruff...\n");
  }

  -(void) eat
  {
    printf("Im hungry, i love dog food.\n");
  }

  -(void) chaseCat
  {
    printf("I think i saw a pussy cat.\n");
  }
@end

// main.m
int main ( int argc, const char *argv[] )
{
  Dog *zorro = [[Dog alloc] init];

  [zorro chaseCat];
  [zorro bark];
  [zorro eat];

  [zorro release];

  return 0;
}

Compilar com o gcc e rodar :)


Clocking it

Posted: novembro 12th, 2008 | Author: Carlan Calazans | Tags: , , , , | 2 Comments »

Clocking it é um aplicativo para gerência de projetos que tenho utilizado com o pessoal do trabalho. Em comparação com o dot project e o redmine, é o que eu mais gosto. Me sinto muito a vontade utilizando ele no meu dia-a-dia e já estou usufruindo dos benefícios, no meu caso é sair com a cabeça limpa do trabalho e ir pra casa sem preocupações e com o bolso/mochila sem as milhares de anotações em papel. Uma curiosidade, o clocking it e o redmine, foram desenvolvidos em Rails, o framework da moda (não se engane com a minha forma de me expressar, eu também o utilizo).

Uma coisa que acredito ser primordial para o meu tipo de trabalho, desenvolvimento de software, é um time tracker ou gerenciador de tempo, como preferir. Com um aplicativo deste instalado na máquina, acabou aquelas anotações em papel ou em editor de textos com informações sobre aquilo que você está trabalhando no momento. Nada contra quem gosta de papel, mas eu não gosto, não combina comigo. Como desenvolvedor, eu tenho a necessidade de aplicativos (ou scripts) mais simples (fáceis de usar) e que simplifiquem o meu trabalho, tanto na empresa quanto em casa.

Voltando ao assunto do gerenciador de tempo, isto me deixava muito frustrado. Tentei alguns aplicativos, foram úteis por um período de tempo, mas eu me dei conta que estava trabalhando com 02 softwares: um para gerenciamento de projetos e outro para gerenciamento de tempo.

Comecei a pesquisar a forma de juntar estas duas ferramentas em uma só, na época o time tracker do redmine não era exatamente o que eu estava procurando. A coisa boa era que o código estava disponível, mas eu estava engatinhando em Ruby e em Rails, nem tinha feito o curso do Ruby Learning e nem era um Assist. Teacher como hoje. Após muita pesquisa, encontrei o clocking it.

Acho muito bacana o esquema de time tracker dele, onde o desenvolvedor pode simplesmente dar um play em uma tarefa, um pause para o café e pode também terminar o seu dia de trabalho ou simplesmente fechar a tarefa em que estava trabalhando. O tempo vai sendo contado e você não precisa mais se preocupar com ele, seu foco fica na tarefa ou nos comentários ao fechá-la. E como se não bastasse, tem outras funcionalidades muito úteis como: wiki, chat, fórum, relatórios e etc ( mais aqui ).

O tempo de adaptação no sistema é extremamente curto. Esta semana lançaram dois screencasts (primeiro e segundo), em inglês, explicando o básico do sistema. Por enquanto estou utilizando o serviço gratúito disponilizado pelo site, mas já estou pensando em instalar ele em um dos servidores da empresa.