Archives for Uncategorized category

Francamente, é cada uma viu.

Depois do super sucesso de simuladores de flatulência, como o iFart (link, 0,99), que gerou uma quantidade de dinheiro bem razoável de mais de 70 mil dólares, chega mais uma inutilidade na App Store (desta vez _quase_ de graça), o Do Not Press The Red Button.

Leia o resto deste artigo »

Ontem, alguns puderam perceber, que a App Store saiu do ar por algum tempo. Isso se deve ao fato de uma eminente atualização na loja de aplicativos que permitirá aos desenvolvedores de enviar suas criações, com palavras-chave pré-definidas de cada aplicativo.

A mudança sem sombra de dúvidas é muito bem vinda, por trazer uma SEO dentro do iTunes (Search Engine Optimization), se assim pode-se dizer. Em outras palavras, encontrar aplicativos será muito mais fácil na App Store. Por exemplo, um app que dá informações sobre gripe suína, pode ter como palavras chave “gripe, suína, febre, H1N1, doença, Brasil, apps brasileiros”.

As palavras serão comporão no máximo 255 caracteres, e deverão ser separadas por uma vírgula. Incluir as palavras-chaves não só é melhor para o cliente e para os desenvolvedores, como é obrigatório.

É claro que a fiscalização deve ser rigorosa. Não duvido nada que vai ter gente escrevendo “Jailbreak” lá no meio :P

[via] e [via]
[Post retirado na integra do post em que eu colaboro, PontoGeek].

Veja agora uma coletânea especial com todas as fases da programação. Desde uma simples sintaxe, até o uso de strings, comandos de memória e complexos códigos. No final, o cara ficou tão poderoso que não programa mais, e sim manda programarem. Ótimo! 

High School/Jr.High

  10 PRINT "HELLO WORLD"
  20 END

First year in College

  program Hello(input, output)
    begin
      writeln('Hello World')
    end.

 

Senior year in College

  (defun hello
    (print
      (cons 'Hello (list 'World))))

New professional

  #include <stdio.h>
  void main(void)
  {
    char *message[] = {"Hello ", "World"};
    int i;
    for(i = 0; i < 2; ++i)
      printf("%s", message[i]);
    printf("\n");
  }

Seasoned professional

  #include <iostream.h>
  #include <string.h>
 
  class string
  {
  private:
    int size;
    char *ptr;
 
  string() : size(0), ptr(new char[1]) { ptr[0] = 0; }

    string(const string &s) : size(s.size)
    {
      ptr = new char[size + 1];
      strcpy(ptr, s.ptr);
    }
 
    ~string()
    {
      delete [] ptr;
    }
 
    friend ostream &operator <<(ostream &, const string &);
    string &operator=(const char *);
  };
 
  ostream &operator<<(ostream &stream, const string &s)
  {
    return(stream << s.ptr);
  }
 
  string &string::operator= (const char *chrs)
  {
    if (this != &chrs)
    {
      delete [] ptr;
     size = strlen(chrs) ;
      ptr = new char[size + 1];
      strcpy(ptr, chrs);
    }
    return(*this) ;
  }

  int main()
  {
    string str;
 
    str = "Hello World";
    cout << str << endl;
    return(0);
  }

Master Programmer

  [
  uuid(2573F8F4- CFEE-101A- 9A9F-00AA0034282 0)
  ]
  library LHello
  {
      // bring in the master library
      importlib("actimp.tlb");
      importlib("actexp.tlb");

      // bring in my interfaces
      #include "pshlo.idl"

      [
      uuid(2573F8F5- CFEE-101A- 9A9F-00AA0034282 0)
      ]
      cotype THello
   {
   interface IHello;
   interface IPersistFile;
   };
  };
  [
  exe,
  uuid(2573F890- CFEE-101A- 9A9F-00AA0034282 0)
  ]
  module CHelloLib
  {
      // some code related header files
      importheader(<windows.h>);
      importheader(<ole2.h>);
      importheader(<except.hxx>);
      importheader("pshlo.h");
      importheader("shlo.hxx");
      importheader("mycls.hxx");

      // needed typelibs
      importlib("actimp.tlb");
      importlib("actexp.tlb");
      importlib("thlo.tlb");

      [
      uuid(2573F891- CFEE-101A- 9A9F-00AA0034282 0),
      aggregatable
      ]
      coclass CHello
   {
   cotype THello;
   };
  };

  #include "ipfix.hxx"
  extern HANDLE hEvent;

  class CHello : public CHelloBase
  {
  public:
      IPFIX(CLSID_ CHello);
      CHello(IUnknown *pUnk);
      ~CHello();

      HRESULT  __stdcall PrintSz(LPWSTR pwszString);
 
  private:
      static int cObjRef;
  };

  #include <windows.h>
  #include <ole2.h>
  #include <stdio.h>
  #include <stdlib.h>
  #include "thlo.h"
  #include "pshlo.h"
  #include "shlo.hxx"
  #include "mycls.hxx"
  int CHello::cObjRef = 0;

  CHello::CHello( IUnknown *pUnk) : CHelloBase(pUnk)
  {
      cObjRef++;
      return;
  }
 
  HRESULT  __stdcall  CHello::PrintSz( LPWSTR pwszString)
  {
      printf("%ws
", pwszString);
      return(ResultFromSc ode(S_OK) );
  }

  CHello::~CHello( void)
  {
 
  // when the object count goes to zero, stop the server
  cObjRef--;
  if( cObjRef == 0 )
      PulseEvent(hEvent) ;

  return;
  }

  #include <windows.h>
  #include <ole2.h>
  #include "pshlo.h"
  #include "shlo.hxx"
  #include "mycls.hxx"

  HANDLE hEvent;

   int _cdecl main(
  int argc,
  char * argv[]
  ) {
  ULONG ulRef;
  DWORD dwRegistration;
  CHelloCF *pCF = new CHelloCF();

  hEvent = CreateEvent( NULL, FALSE, FALSE, NULL);
 
  // Initialize the OLE libraries
  CoInitializeEx( NULL, COINIT_MULTITHREADE D);

  CoRegisterClassObje ct(CLSID_ CHello, pCF, CLSCTX_LOCAL_ SERVER,
      REGCLS_MULTIPLEUSE, &dwRegistration) ;

  // wait on an event to stop
  WaitForSingleObject (hEvent, INFINITE);

  // revoke and release the class object
  CoRevokeClassObject (dwRegistration) ;
  ulRef = pCF->Release();
 
  // Tell OLE we are going away.
  CoUninitialize( );

  return(0); }

  extern CLSID CLSID_CHello;
  extern UUID LIBID_CHelloLib;

  CLSID CLSID_CHello = { /* 2573F891-CFEE- 101A-9A9F- 00AA00342820 */
      0x2573F891,
      0xCFEE,
      0x101A,
      { 0x9A, 0x9F, 0x00, 0xAA, 0x00, 0x34, 0x28, 0x20 }
  };

  UUID LIBID_CHelloLib = { /* 2573F890-CFEE- 101A-9A9F- 00AA00342820 */
      0x2573F890,
      0xCFEE,
      0x101A,
      { 0x9A, 0x9F, 0x00, 0xAA, 0x00, 0x34, 0x28, 0x20 }
  };
 
  #include <windows.h>
  #include <ole2.h>
  #include <stdlib.h>
  #include <string.h>
  #include <stdio.h>
  #include "pshlo.h"
  #include "shlo.hxx"
  #include "clsid.h"
  int _cdecl main(
  int argc,
  char * argv[]
  ) {
  HRESULT  hRslt;
  IHello        *pHello;
  ULONG  ulCnt;
  IMoniker * pmk;
  WCHAR  wcsT[_MAX_PATH] ;
  WCHAR  wcsPath[2 * _MAX_PATH];
 
  // get object path
  wcsPath[0] = '';
  wcsT[0] = '';
  if( argc > 1) {
      mbstowcs(wcsPath, argv[1], strlen(argv[ 1]) + 1);
      wcsupr(wcsPath) ;
      }
  else {
      fprintf(stderr, "Object path must be specified\n");
      return(1);
      }
 
  // get print string
  if(argc > 2)
      mbstowcs(wcsT, argv[2], strlen(argv[ 2]) + 1);
  else
      wcscpy(wcsT, L"Hello World");
 
  printf("Linking to object %ws\n", wcsPath);
  printf("Text String %ws\n", wcsT);

  // Initialize the OLE libraries
  hRslt = CoInitializeEx( NULL, COINIT_MULTITHREADE D);

  if(SUCCEEDED( hRslt)) {

      hRslt = CreateFileMoniker( wcsPath, &pmk);
      if(SUCCEEDED( hRslt))
   hRslt = BindMoniker( pmk, 0, IID_IHello, (void **)&pHello);
      if(SUCCEEDED( hRslt)) {
   // print a string out
   pHello->PrintSz(wcsT) ;

   Sleep(2000);
   ulCnt = pHello->Release();
   }
      else
   printf("Failure to connect, status: %lx", hRslt);

      // Tell OLE we are going away.
      CoUninitialize( );
      }
  return(0);
  }

Apprentice Hacker

  #!/usr/local/ bin/perl
  $msg="Hello, world.\n";
  if ($#ARGV >= 0) {
    while(defined( $arg=shift( @ARGV))) {
      $outfilename = $arg;
      open(FILE, ">" . $outfilename) || die "Can't write $arg: $!\n";
      print (FILE $msg);
      close(FILE) || die "Can't close $arg: $!\n";
    }
  } else {
    print ($msg);
  }
  1;

Experienced Hacker

  #include <stdio.h>
  #define S "Hello, World\n"
  main(){exit( printf(S) == strlen(S) ? 0 : 1);}

Seasoned Hacker

  % cc -o a.out ~/src/misc/hw/ hw.c
  % a.out

Guru Hacker

  % echo "Hello, world."

New Manager

  10 PRINT "HELLO WORLD"
  20 END

Middle Manager

  mail -s "Hello, world." bob@b12
  Bob, could you please write me a program that prints "Hello, world."?
  I need it by tomorrow.
  ^D

Senior Manager

  % zmail jim
  I need a "Hello, world." program by this afternoon.

Chief Executive

  % letter
  letter: Command not found.
  % mail
  To: ^X ^F ^C
  % help mail
  help: Command not found.
  % damn!
  !: Event unrecognized
  % logout

Nas palavras de planetbeing:This is the best jailbreak tutorial I’ve ever seen in my life.

Realmente, incrível a criação abaixo:

[via @planetbeing no Twitter]

O purpler1n, ferramenta de jailbreak do iPhone 3GS mudou tudo o que conhecemos sobre o fato. Pesando míseros 400Kb, muito menos que os 30MB do QuickPwn (sem falar dos firmwares que você têm que baixar), a ferramenta consegue fazer o jailbreak do 3GS com exelência. Outra vantagem é não precisar baixar firmware nenhum, além de ser One Click- jailbreak, lembrando a época do ZiPhone.

De baixo de toda essa simplicidade, está um programa muito bem feito. Geohot fez um post no TheiPhoneWiki contando com todos os detalhes como ela funciona, e eu traduzi, adicionando observações. É realmente incrível.

(o artigo abaixo é muito técnico. Se você não tem nenhum conhecimento disso, não vale a pena ler).

Parte 1 - Dentro do purplera1n

  • O purplera1n manda um comando através do iTunesMobileDevice para colocar o aparelho em modo recovery. O mesmo comando é mandando pelo nosso programa Hacks2All.
  • Uma vez que ele está em recovery, é enviado o iBoot Enviromental Variable Exploit, que permite execução de código customizado lá.
  • O purplera1n roda o comando “geohot”, que ativa o payload.
  • Acaba o trabalho do purplera1n.

Parte 2 - O payload

  • O payload faz um pequeno patch no iBoot para img3s customizadas rodarem.
  • É carregada a imagem do purplera1n (aquela do geohot) no aparelho.
  • A NOR começa a ser patcheada.
  • LLB (Low Level Bootloader) é decripitado, patcheado, e com isso adicionado 200 bits finais, que o tornam maior que 0X2400. Esse é o 0X2400 Segment Overflow exploit.
  • NOR acaba de ser patcheada, assim como o iBoot também. Ambos são colocados em seus lugares.
  • Agora é a vez do Kernel, que é lido, decripitado e modificado.
  • Agora é o Ramdisk customizado é carregado. Kernel patcheado também vai pro seu devido lugar.
  • Acaba o trabalho do payload.

Parte final - Ramdisk

  • /dev/disk0s1 é montado. Essa é a partição do jailbreak.
  • Freezer.app é transferido. 
  • Kernel é lido pelo final do Ramdisk. Tudo é limpo, e alguns arquivos como o fstab são patcheados.
  • Aparelho reinicia com jailbreak!
Fim! Realmente impressionante, não?

Um novo comercial de televisão sobre o iPhone 3GS já está circulando. O filme se chama Skateboard, e demonstra a gravação, edição e compartilhamento de vídeo direto do aparelho. O vídeo é feito gravando alguém andando de Skate em uma rampa (aí que veio o nome).

Confira:

Gostei muito do vídeo, como sempre. Só me pergunto como alguém consegue deixar a mão imóvel por tanto tempo. :P

O filme está disponível no site da Apple, onde pode ser visto em alta-definição também.

[via: iClarified]

Um aplicativo muito bacana e que nós incluímos na pauta da semana passada, mas por problemas técnicos não conseguimos postar sobre. O AirCoaster 3D já é bem antiguinho, mas eu gosto muito. Se você é assim como, eu apaixonado por montanhas-russas, não deixe de conferir essa aplicação super completa.

Com o AirCoaster 3D você simula de verdade uma montanha russa, podendo adicionar diversos efeitos, e conferindo tudo de primeira pessoa. Dentro das características estão a quantidade/altura na motanha-russa, loopings, subidas, descidas, gritos, e aquele impagável barulho de vento no ouvido.

 

Leia o resto deste artigo »

Não bastasse alguns meses atrás, da super propaganda da RIM, que atacava a Apple em todos os sentidos, dizendo algo como “nem a maça nos para”, agora foi a vez da Palm de fazer o mesmo.

Começou a ser vinculada uma propaganda no Flickr deles, e em breve estará nas ruas, a menos que a Apple faça algo.

Confira abaixo a “obra de arte”, que mostra um Palm Pre apoiado por uma maça comida:

Pior ainda é “Seu contrato com o iPhone acabou. Hora perfeita”. Segundo o artigo: “O Palm Pre faz coisas que o iPhone não faz, como rodar múltiplas aplicações ao mesmo tempo (…).”

E aí pessoal, como vamos responder a eles?

[via]
  • Apps

  • Criando uma conta na iTunes Store americana sem cartão de crédito