Tag Archives: udb

VCNews e Performance

Estou real­mente empen­hado no pro­jeto VCNews (apelido). Esta’ muito inter­es­sante desen­volver esse pro­jeto, a quan­ti­dade de infor­ma­cao col­ida e manip­u­lada e’ real­mente grande. Nao esta­mos ape­nas lidando com Twit­ter mais. E so’ o Twit­ter gera muita, mas muita infor­ma­cao para ser manip­u­lada. O que e’ muito bacana, tra­bal­har em algo que tem ser performatico.

  • drive do twit­ter 100% ok com as novas regras da api deles
  • manip­u­la­cao de usuar­ios, sta­tus e tags do twit­ter melhorada
  • geren­ci­a­mento interno de tags e links funcionando
  • agru­pa­mento de instru­coes no drive de banco. Toda oper­a­cao feita no VCNews nao ira’ na mesma hora ao banco de dados.  Recurso novo do UDB. Depois falo sobre isso.
  • come­cei a manip­u­la­cao de noti­cias como Yahoo! News

E para isso fun­cionar a plataforma (Uni­verse) teve de ser mel­ho­rada, o que foi muito bom. Podemos con­tar agora com Thread­ings mel­ho­radas e com auto-balanceamento de carga.

UDB tambem foi mel­ho­rado. Para resumir, ele cria uma lista de instru­coes para dar ao banco de dados que ele esta’ conec­tado, por exem­plo o MySQL (o que usamos no VCNews), e cria um “mock” para alguma busca ou qual­quer outra instru­cao que dev­era’ trazer aquele dado. Com isso usamos menos carga na rede com o banco de dados e ao mesmo tempo, fazer um insert ou select para cada view/acao nao me parece muito inteligente se podemos deixar em um processo mais rapido.

Per­for­mance

Sou a favor de per­for­mance sem­pre no max­imo pos­sivel. Para mim per­for­mance nao e’ ape­nas ter o resul­tado mais rapido, mas tambem usar menos recur­sos, ou seja… Economizar.

Menos uso da CPU, faz com que adi­ante a entrada do modo ocioso, sal­vando ai alguns watts. Imag­ine isso em uma grande escala. Voce esta’ sal­vando tempo e din­heiro. Ate’ mesmo em um note­book. Esses “watts” econ­o­miza­dos serao a difer­enca entre acabar a bate­ria em 4 horas ou em 4 horas e 30 min­u­tos, por exemplo.

Algu­mas coisas que gosto de comen­tar sobre isso:

  • Evi­tar polling. Serio pes­soal. Polling e’ ruim. OK, exis­tem algu­mas coisas que com polling e’ “mel­hor” de se fazer. Porem o abuso desta tec­nica e’ real­mente hor­rivel para per­for­mance. Tente fazer algo com msgs. Um exem­plo de soft­ware que abusa ou abusava deste recurso, o gksu. Ele chega a checar mil vezes por segundo se exis­tem dados em um pipe. Meio exager­ado nao e’?
  • Agru­par timers sem­pre que pos­sivel e usar um para  realizar varias tare­fas. Nunca um timer para cada sta­tus ou alguma coisa que voce esta’ usando. Assim voce econ­o­miza em chamadas no cpu deixando o ocioso por mais tempo.
  • Pen­sar em usar lin­gua­gens de alto nivel. Elas sao mais rap­i­das no desen­volvi­mento, porem a per­for­mance e’ muito abaixo de uma lin­guagem como C. Nao estou de olho no “quadro de luz” de cada lin­guagem script. Porem pre­fira Python a Ruby. Java e Visual C#… O que falar destes. Ultima vez que dei uma olhada, as duas ficavam bem pare­ci­das. E gas­tavam mais que os testes usando python e ruby juntos.

Um cpu ocioso con­some em media 1 watt em media, claro depende do fabricante/modelo,  em carga total leva uma media de 34watts e em usa meia carga tem uma media de 24watts. Se voce levar para cal­cu­lar algum processo em 1 segundo com poten­cia max­ima do cpu voce ira’ usar 34watts e se fizer em metade da carga levara’ o dobro de tempo, ou seja… 2 x 24 = 48watts.

Gos­tou do assunto? Um site que recomendo e’ http://www.lesswatts.org

Universe + YQL

Dei uma olhada no YQL da Yahoo! para colo­car como um recurso do Uni­verse. Ja’ exis­tia uma API em Python para esse recurso, porem nao gostei da solu­cao e colo­quei fiz uma do zero para nosso Uni­verse. Gostei mais da solu­cao que fiz porque temos padroes na saida, entao li a doc­u­men­ta­cao inteira do Meme (primeiro da minha lista) e fiz esque­mas e obje­tos para a saida de cada resul­tado pos­sivel. Tor­nando o tra­balho de manip­u­la­cao dos dados mais facil do que ape­nas um parser de XML. Tambem fiz uma boa saida para nao uti­lizar todo o lim­ite ofer­e­cido pela YQL foi o drive direto em UDB ou XML. Antes de finalizar o mod­ulo quero colo­car um cache uti­lizando a saida do drive. Deixar o mais rapido pos­sivel a con­sulta e diminuir o uso de HTTP no server.

Tambem tenho de colo­car o Oauth para fun­cionar neste cara. Vi que a solu­cao python-yql usa o mod­ulo python-oauth, como ja’ temos um mod­ulo no Uni­verse, vou ver o que posso fazer com o nosso e porque nao, se tiver fal­tando recurso, mel­ho­rar ele.

Resumo:

  • acesso rapido e facil da YQL usando um Obj
  • retorno sim­ples de todos os resul­ta­dos pos­siveis do Meme

Para quem tem acesso: universe.Apps.Yahoo.YQL

WM e outros

Awe­some

Voltei a usar o AWESOME, sem duvi­das, o mel­hor de todos win­dow man­agers que exis­tem por ai. Bem talvez perca para o meu em alguns pon­tos =) (sim, ja’ fiz um win­dow man­ager do zero). Depois de certa cam­panha para eu parar de usar o Win­dow­maker (Tiveron esta’ lendo isso? Feliz?), voltei ao incrivel Awesome.

O que faz dele incrivel:

  • Very sta­ble, fast and small code­base and footprint;
  • First win­dow man­ager using asyn­chro­nous XCB library instead of the old syn­chro­nous Xlib: make awe­some less sub­ject to latency than many win­dow managers;
  • Very well doc­u­mented source code and API;
  • No mouse needed: every­thing can be per­formed with keyboard;
  • Real mul­ti­head sup­port (XRandR, Xin­erama or Zaphod mode) with per screen desk­tops (tags);
  • Imple­ment many Freedesk­top stan­dards: EWMHXDG Base Direc­toryXEm­bedDesk­top Noti­fi­ca­tionSys­tem Tray;
  • Doesn’t dis­tin­guish between lay­ers: there is no float­ing or tiled layer;
  • Use tags instead of work­spaces: allow to place clients on sev­eral tags, and dis­play sev­eral tags at the same time;
  • A lot of Lua exten­sions to add fea­tures: dynamic tag­ging, wid­get feed­ing, tabs, layouts …;
  • D-Bus support;

Com ele tenho total con­t­role de tudo no meu Desk­top ape­nas usando o teclado. Bem outro ponto legal e’ que pratico o meu Lua.

Aterm

Tambem acabei voltando a usar o Aterm. Sem­pre gostei muito do Aterm, mas sem­pre acabava usando o Xterm ja’ que sem­pre encon­tro ele em qual­quer lugar.

Meu .Xde­faults para Aterm:

aterm*transparent:true
aterm*shading:40
aterm*foreground:Gray
aterm*scrollBar:false
aterm*saveLines:32767
aterm*font: -misc-fixed-medium-r-semicondensed--13-120-75-75-c-60-iso8859-1

Resul­tado do .Xde­faults esta’ no screen shot la’ em cima… =)

SI

Agora temos um recurso muito legal para quem ira’ uti­lizar a nuvem SI para deixar ima­gens padroes da sua app/site.

Si.sprite(['image1','image2','image3'])

Podemos criar um Sprite dinam­ico! Tenho de estu­dar alguns meto­dos para aproveitar ainda mais os espa­cos em branco deix­ado pela jun­cao das ima­gens e colo­car atribuicao de preferir sprite hor­i­zon­tal ou vertical.

Work­sta­tion

Novo lay­out da minha workstation:

  • colo­quei o Libretto 50ct de volta ao tra­balho rodando uma BNC para me deixar o max­imo pos­sivel online no #mit­gnu (freenode)
  • walker (eeepc900) rodando o pid­gin, skype, irssi e um cliente syn­ergy para ter um con­t­role facilitado
  • darth­vader rodando syn­ergy server e Universe
  • earl rodando var­ios ser­vices para minha rede local como Uni­verse, UDB, stg dos meus pro­je­tos, post­gresql, bit­tor­rent e get­stream (script meu para ripar radios online)
  • bajinger rodando sync server de meus documentos
  • sarabi servindo mysql