Tag Archives: Twitter

Changes in VCNews

Mor­gen­stern saw some crazy and huge python process in this week. The PID has about 2GB of ram! Yeap. Something’s wrong. Well… no more.

  • threads with new setup. If some thread don’t find one node for  process, will just self divide in lit­tle threads and runs in the place.
  • wid­get “tiny url”
  • wid­get (bigGeneric)
  • new home (new menu, old footer)
  • api for cre­ate tiny url
  • api for open tiny url
  • bet­ter node’s control
  • bet­ter task list

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

oauth, Twitter e VCNews

Hoje foi um dia muito pro­du­tivo, fiz algu­mas mudan­cas no VCNews. Agora nao temos mais acesso via aut­en­ti­ca­cao basica, ja’ que dia 30 agora o pes­soal do Twit­ter ira’ tirar esse recurso, ja’ mudei todo o sis­tema para OAuth. Usei uma lib chamada oauth2 para fazer a aut­en­ti­ca­cao. Gostei muito do pro­jeto. Esta’ com var­ios casos de testes. O que real­mente fal­tou foi uma doc­u­men­ta­cao melhor.

Bem, tirando o Objects.Twitter.Drive, temos o Objects.Twitter.Client. Ja’ fiz todas as mudan­cas para nao uti­lizar mais o Drive e atu­al­izei os testes. Con­sidero sta­ble ja’.

Outra mod­i­fi­ca­cao que vale a pena comen­tar foi a trans­fer­en­cia de todos os Objects para o seguinte padrao:

universeObject >> Object_core >> interface 1/2/3/4

Assim temos maior liber­dade para mod­i­ficar os obje­tos  garan­ti­ndo que nao ira’ causar nen­hum erro no sistema.

==

Colo­quei a maquina Viper para fun­cionar como ter­mi­nal remoto usando o Win­dows 7 para essa tarefa. Com o dll que con­segui, veja, con­sigo deixar var­ios users conectados/usando a maquina ao mesmo tempo. Gostei muito desta solu­cao para manip­u­lar o Inter­net Explorer 7 e 8 (IE6 pes­soal­mente nao dou suporte, nen­hum, quem usa nao dev­e­ria estar na frente de um com­puta­dor ou ate’ mesmo res­pi­rando, existe varias oti­mas opcoes como Opera, Fire­fox, Google Chrome, Safari, Dillo e ai vai…), mel­hor que deixar uma maquina vir­tual para fazer esse tra­balho. Imag­ino que uma boa maquina como a Viper e’ (AMD Athlon 7750 Dual-Core Proces­sor 2.70GHZ com 4GB de ram) fica otimo para 3 usuar­ios (fiz o teste conectando 3 users ao mesmo tempo via rede e um usando a maquina nor­mal­mente), colo­car um work­sta­tion para essa tarefa em uma equipe e’ muito mais “barato” e sim­ples que obri­gar a equipe que ira’ fazer o front-end uti­lizar 2 ou mais maquinas virtuais.

Changes…

Depois de algum tempo pen­sando vi que o mel­hor a fazer e’ mudar. Pois vamos la’:

O que entra:

dog­tags

A nova engine para gerar HTML usando obje­tos. Mais rap­ida, sim­ples e de menor tamanho. Sim­ples­mente faz tudo o que a OCGI fazia so’ que melhor.

UDB

O nosso drive se tornou algo real­mente usavel. Com os testes que real­izei esses dias eu vejo que esta’ mel­hor que o padrao antigo. UDB agora fica como padrao para “IO” em Post­greSQL e MySQL.

VCNews

O VCNews e’ um pro­jeto para ter um certo con­t­role nas midias dig­i­tais. A Engine esta’ com­pleta para o Twit­ter e Meme (Yahoo!). Falta alguns out­ros mod­u­los que ja’ estao em linha de pro­d­u­cao como Yahoo! News, Google Search e Flickr. Face­book e Orkut entram na lista porem nao sei se e’ de grande val­i­dade a entrada do Orkut. Face­book eu gosto e tem muito recurso. Ja’ o Orkut acho um pedaco de soft­ware que nao deu certo nunca, me des­culpem Orkuteiros. Mas desde sem­pre aquilo foi lento e sem uso pratico.

Com sua Engine pronta, digo que a sua API tambem esta’ pronta para o Uni­verse! Podemos usar o Twit­ter e o Meme dire­ta­mente do VCNews.

PyQt4

Agora podemos ter a saida em PyQt4. As UI sao ger­adas pelo pyuic. As saidas, threads e oper­a­coes ficam no Universe.

O que sai:

OCGI

Sim­ples­mente nao faz mais sentindo ter ele quando o sta­ble e o usavel com os novos padroes (HTML5 e cia). Depois de alguns anos vejo que a manu­ten­cao da engine OCGI nao faz sentindo. O uso de obje­tos para pro­duzir o front-end e’ otimo, porem a manu­ten­cao dos padroes usa­dos e’ muito maior nessa solucao.

DB

O drive que usava­mos para MySQL esta’ sim­ples­mente usando muito recurso para oper­a­coes grandes.

API Twit­ter

Ja’ que o VCNews entrou e esta’ sta­ble, nao vejo o porque deixar essa API na plataforma. Nao vamos dar manu­ten­cao direta nela. E quando tiver vai sair como sta­ble primeiro para a VCNews’ Engine. Logo nao e’ mais necessaria.

==

E tambem… Aban­donei o Jabber/XMPP/Gtalk. Nao vejo mais o porque usar. Nao me ajuda em nada, ape­nas atra­balha e per­tuba o desen­volvi­mento. Pre­firo o IRC. Quem ainda usa pode me achar na rede FreeN­ode, canal #mit­gnu ou pro­cure por umge­her. Para quem nao usa, mande email mesmo que respon­derei assim que conseguir.

Twitter API

Depois de um bom tempo sem mudar a API do Twit­ter, tive­mos de fazer algu­mas mod­i­fi­ca­coes nela. Vamos la’…

  • saiu de dominio ape­nas da Engine VCnews e veio para base do Universe
  • gan­hou manip­u­la­coes via reg­u­lar expres­sions do conteudo
  • pos­sui ja’ um drive para escr­ever em sqlite, mysql e xml (como vem do twit­ter) para nao abusar do twitter
  • temos obje­tos: Sta­tus, Men­tions, User em sta­ble e List em unstable
  • authen­ti­ca­tion ok

O que achei bacana e’ reaproveitar a saida em difer­entes adapters. Ja’ que podemos manip­u­lar dire­ta­mente na saida dos meto­dos, podemos aplicar diver­sos esta­dos e lay­outs para a mesma “con­sulta”. Pelo o que testei con­seguimos cair em ate’ 5% o con­sumo de recurso.

2010/01/29

Sem inter­net

Estou a alguns dias sem me conec­tar a inter­net, e fazia tempo que nao era tao pro­du­tivo como esses dias o tempo per­dido com pes­soas em jabber/xmpp/gtalk e irc e’ muito grande. Sem falar que elas atra­pal­ham a con­cen­tra­cao, suas per­gun­tas sobre questoes de pro­gra­macao e uni­verso unix me tiram total­mente do que estou fazendo, adoro resolver prob­le­mas, todo prob­lema tem de ser visto, sem­pre. E’ com eles que voce con­segue real­mente aplicar o seu con­hec­i­mento e gan­har mais. E os seus links ao youtube e noti­cias sao um chama­riz a parar de desen­volver. Com isso estou pen­sando seri­amente em deixar para la’ IMs/irc. Vou fazer um teste sobre isso, talvez ficar sem IMs/irc por uma sem­ana ou 15 dias. E e’ com isso que vejo que o sim­ples email e’ muito bom, quando tenho real­mente tempo entro e uti­lizo alguns min­u­tos para respon­der per­gun­tas de ami­gos ou entao para escr­ever para a lista mitgnu =)

Mit­GNU

Com algu­mas mudan­cas que acon­te­ce­ram nesse final de ano, venho me con­cen­trando 100% a Mit­GNU agora, empresa que sou co-founder e vejo que tem grande futuro. O que temos de qual­i­dade de pes­soal e’ muito forte. Mas nem tudo e’ ale­gria. Tive­mos um “atraso”(?) com o ShakeIt. Nao con­sidero atraso. Bem…

ShakeIt

O pro­jeto ShakeIt nasceu de uma grande ideia do nosso CEO Rafael “HULK” Almeida. Nao irei falar o que e’ o pro­jeto ShakeIt, mas que erramos em dar um dead­line para ele. No caso o co-founder Thi­ago Tiveron escol­heu a data por ser uma data legal, 10/01/10 (100110). Fui de acordo. Pode­ri­amos lan­car com certeza uma ver­sao beta do pro­jeto para um uso e pesquisa do que pode­ri­amos estar com duvi­das sobre o plano de negocio.

Achei super legal a ideia do Tiveron de colo­car um dead­line e cor­rer atras de uma ver­sao usavel ate’ aquele ponto. Ver­dade o meu empenho na tec­nolo­gia que o ShakeIt vai usar foi aumen­tado diver­sas vezes. Ainda mais quando fiz um count­down para (as) minha(s) work­sta­tion. Toda vez que meu olho batia no canto da tela via o tempo pas­sar real­mente. Era por varias vezes motivo de jus­ti­ficar a minha ambi­cao por nao cair no sono e cod­i­ficar nesse tempo que para meu ponto de vista e’ um certo des­perdi­cio. Resul­tado come­cei a “aproveitar” mel­hor meu tempo. Come­cei a dormir exatas 4 horas por dia no max­imo. Quando me acos­tumei con­segui fazer mel­hor, dormir ape­nas na manha, sim dormia das 07:00am ate’ 10/10:30am, e em alguns dias. Escolhi eles sabado, segunda e quarta. Demorei cerca que quase 10 dias para me acos­tu­mar. Mas deu certo. Nao posso falar que era 100% pro­du­tivo como cos­tumo ser, mas se for colo­car na ponta do lapis (? colo­car na planilha) eu tive entre 75% a 95% do aproveita­mento, isso de acordo com minha/o/o planilha/trac/redmine. Com isso tive mais horas de desen­volvi­mento e ded­i­ca­cao a novas tec­nolo­gias que cri­amos na MitGNU.

E voltando a ideia do Tiveron, per­feita. So’ tem um prob­lema, eu. Tenho um grande prob­lema em falar que algo esta’ pronto, quando esta’ pronto? Quando esta’ per­feito? Nao quero algo bom, quero algo per­feito que me orgulhe de ter cri­ado e orgulho em usar e fazer com que os out­ros usem. Pas­sava dias inteiros mel­ho­rando algo que muitos falavam que estava per­feito. Mas sem­pre tem um X para mel­ho­rar. Errei nisso. Nao sou uma pes­soa de dead­lines. Sou uma pes­soa que adota a ver­sao de “estara’ pronto quando ficar pronto”. Por isso nao con­sidero um atraso nosso ao ShakeIt nao ter uma ver­sao beta para todos no dia do dead­line. Com esse pequeno “atraso” aproveitei e melhorei/refiz var­ios obje­tivos no ShakeIt nesses dias sem internet.

  • tem­plates usando dog­tag e nao mais OCGI
  • tudo esta’ em modulos
  • apliquei recurso de con­coren­cia no ShakeIt (ver universe)
  • algo­riti­mos usando novo “metodo” de threads e distribuicao
  • pages usando templates-dogtag

Uni­verse

Ajustei varias questoes no Uni­verse, primeiro de tudo refiz o mod­ulo de dis­tribuicao de proces­sa­mento. Agora podemos dis­tribuir os proces­sos em diver­sas maquinas de um modo facil. Tudo usando a mesma lib que criei em 2007. Todo processo de mel­ho­ra­mento de codigo e aplicar novos recur­sos foram no Python. Mas quero em um futuro prox­imo colo­car a mao na lib denovo.

Outro ponto bacana foi mel­ho­rar o core do Uni­verse. Agora temos um novo recurso de quando aquele modulo/objeto nao foi local­izado ou gerou um erro, nosso core procura a ultima ver­sao que aquele processo estava “certo” e refaz o proces­sa­mento usando aquele codigo. Nao estou muito certo se ira’ ser util real­mente, mas no caso imag­ino um sis­tema sendo atu­al­izado em varias maquinas, quero que cada maquina (ponto de proces­sa­mento) tenha uma copia do aplica­tivo, assim quando um processo gerar um erro, essa demanda ira’ pas­sar para a maquina a frente dela, ate’ chegar em uma maquina que o resul­tado seja pos­i­tivo, dai sim retor­nando a quem quis o processo e cam­in­har dai para frente nor­mal­mente. Nao tenho nome para esse recurso. Mas se for bem imple­men­tado, daqui a algum tempo nao teri­amos mais nos pre­ocu­par em atu­alizar tudo de uma vez ou ter as quedas de sis­tema sem usar slave. Deixarei esse recurso como unsta­ble e nao ira’ para o core da pre-stable. Quero lan­car uma nova sta­ble quanto antes para me focar mais em out­ros produtos.

  • nova ver­sao pre-stable
  • dog­tags total­mente em uso, irei tirar o OCGI quando todos os pro­du­tos estiverem usando dogtag
  • leitor de feed de word­press (WPReader)

SF

Estou bas­tante con­tente com a evolu­cao do SF. Temos var­ios novos recur­sos como download-key con­fig­u­rando a veloci­dade. Essa key per­mite que ape­nas o numero de pes­soas pos­sam usar aquela chave e quan­tos mb/s poderam abaixar. Quero mel­ho­rar o sis­tema de log do SF.

Alem de mel­ho­rar o sis­tema de log do SF, que­ria criar um recurso de quando subir um arquivo para o stor­age um sis­tema de “alerta”/msg qual­quer no twit­ter, quero aplicar isso jus­ta­mente para o UPA. Assim o pes­soal que tiver cadas­tro no UPA podera’ “espal­har” seus arquivos com maior facilidade.

VCNews

Estive revendo o back­end do VCNews, quero colo­car ele para frente. Temos var­ios recur­sos do pro­jeto final ja’. Teri­amos de ter­mi­nar o processo de app e front-end. Que estao prati­ca­mente a 0% do desenvolvimento.

Universe.Apps.Twitter

Escrevi alguns recur­sos novos para Uni­verse, todos uti­lizando a Twitter’s API.

Busca de infor­ma­coes sobre o user pelo ID ou Screen Name (vamos chamar de nick­name? Mel­hor ne’…). Retor­nando para o nosso Objeto:

  • Avatar
  • Descrip­tion
  • Friends - numero de amigos
  • Home­page
  • ID
  • Loca­tion
  • Name
  • Screen name / nickname
  • Stats — numero de “posts”
  • Time­zone
  • UTC off­set

Estou escrevendo agora no meu free­time um novo metodo para bus­car infor­ma­coes dos ami­gos desse pro­file. Com isso estou lendo com cuidado as regras e licenses do Twit­ter para apli­ca­coes. Acho que cada Engine dele difer­ente vai ter que ter o pro­prio token de acesso e tudo mais. Veremos.

Alem disso a busca com­pleta por “query/string” e tags esta’ pronta.
Quero mel­ho­rar ainda algu­mas coisas desses recur­sos de busca, colo­cando refi­na­mento por data e o que tiver a mais e ja’ trazendo alguns recur­sos que podem mel­ho­rar o desen­volvi­mento de Engines.

Uprofile e ShakeIT — primeiro uso…

Depois de con­struir grande parte do que eu imag­ino de um SaaS de con­t­role de pro­file e seu uso pratico, sim estou falando do Upro­file, come­cei a colo­car ele a prova. Uti­lizando o pro­jeto ShakeIt para isso.

O ShakeIt vai usar todos os recur­sos do Upro­file e alguns destaques que acho impor­tantes para o projeto:

  • Bate-papo.
  • Menssagens entre usuarios.
  • Share de informacoes.
  • Stor­age de infor­ma­coes do pro­file (seus gostos/preferencias)

Mas o que eu real­mente gostei foi tro­car toda log­ica de cadas­tro, login, ses­sion, stor­age e log dos users do site por ape­nas uma chamada na API do Upro­file. Claro, como fui eu que fiz o Upro­file tive de fazer todas essas log­i­cas, mas no prox­imo pro­jeto nao terei mais de desen­volver nen­huma log­ica. Alem de fazer uma rede de usuar­ios entre os pro­je­tos. Isso me deixou super moti­vado a trazer mais recur­sos ao Upro­file. O que me fez pen­sar… Porque nao trazer out­ros ser­vi­cos a Upro­file? Come­cei a desen­har alguns recur­sos novos como manip­u­la­cao do Twit­ter e Sta­tus. Uma ponto muito bom porque nao terei de manip­u­lar mais um objeto no banco de dados, toda infor­ma­cao ja’ e’ guardada no Twit­ter mesmo.

E quem gan­hou com isso foi o Uni­verse, que agora conta com API do Twit­ter, ainda em beta na minha opiniao tem de mel­ho­rar e exis­tem ideas para criar fer­ra­men­tas nela.

Bem agora tenho mais uma Todo List para esse .plan:

  • Fechar uma ver­sao da API do Twitter.
  • Finalizar todos os testes do Upro­file, tanto API quanto Engine, para lan­car uma ver­sao publica.
  • Ligar o ShakeIt total­mente ao Uprofile.

Twitter Updates for 2009-07-01

  • Tes­tando o #google­wave !!! Bem bacana!!! #
  • #google­wave aprovado! Mas meu #emacs faz isso tambem. =) hehe #
  • Browser fera com webkit para *nix… Arora. Meu padrao agora. =) #
  • #swfdec sux! #

Pow­ered by Twit­ter Tools.

Twitter Updates for 2009-06-30

Pow­ered by Twit­ter Tools.