Femeia programator

Am o discutie filozofica cu un prieten. Dupa a patra bere orice discutie aluneca involuntar inspre filozofie. Dupa a sasea bere avem descutii filozofice despre femei.  Nu exista campionat mondial…exista doar femei si dupa 6 beri nu poti vorbi despre femei decat intr-un mod filozofic.

Femeia si competentele ei…

Bucatarii…tot ce stiu eu bucatari sunt barbati, deci meseria de bucatar este dedicata barbatului. N-am inteles de ce, dar statistica asta spune.

Dentistii…eu la toti dentistii care am fost erau femei. Stiu 20 de femei care sunt medici stomatologici, nu stiu nici un barbat insa. Deci stomatologul este o profesie dedicata femeii.

Programatorii…aici avem o dilema si nu gasim nici un compromis. Stiu doar cateva femei programator. In facultate dintr-o serie de 100, doar 7 erau femei. Prietenul meu nu stie nici o femeie programator. Tind sa-i dau dreptate, barbatul are o gandire analitica, femeia o gandire abstracta, deci programatorul este o meserie dedicata barbatului.

Dar, stai asa, mi-am amintit…

Primul programator este o femeie, fiica marelui poet Byron, Ada Byron Lovelace, care a dezvoltat primul program, algoritm, pseudocod, si anume generare numerelor Bernoulli folosind motorul analitic al lui Babbage in anul, atentie, 1843.

Q.E.D. Femeia este un programator inascut.

Deci sa trecem la  7-a bere.

Coding for food

Programatorii sunt scutiti de impozitul unic pe venit de 16%. De ce? Un raspuns ni-l poate oferi cel mai inflacarat sustinator al acestei masuri, Varujan Pambuccian.

Rezumand insa, domnia sa ne spune ca scutirea de la plata impozitului ajuta companiile de software autohtone sa fie mai competitive in fata unor tari precum India, China si Rusia. Incurajeaza companiile straine de profil sa-si deschida centre de dezvoltare in Romania. Si ajuta si programatorii. Si poate poate programatorii romani se vor intoarce inapoi in tara.

Motivele astea nu sunt insa motive reale, la urma urmei daca ar fi sa ne luam doar dupa aceste motive ar trebuii sa scutim de la plata impozitelor pe absolut toata lumea, persoane si firme laolalta din toate domeniile economice. Am fi mai competitivi, nu? Am fi mai bogati nu?

Ei bine nu…In primul rand cele 16% nu se duc in buzunarul programatorilor ci in buzunarul firmelor, care firme nu sunt firme de dezvoltare ci firme de outsourcing unde valoarea adaugata este mica, iar banii rezultati in cea mai mare parte nici macar nu raman in tara.

Subventia de 16% (ca asta este de fapt), care este destul de mare, imbogateste doar anumite companii si incurajeaza “programarea pe mancare” si nu aduce nici un beneficiu real economiei, cel putin nu pe masura subventiei.

Daca maine s-ar renunta la scutirea impozitului pe venit, fiti convinsi ca, companiile serioase nu or sa scada salariile, nu o sa plece din Romania. Nu vad un Softwin unde costul fortei de munca este foarte mic in comparatie cu valoare produsa, care este de ordinul milioanelor, sa scada salariile sau sa concedieze…cele 16% sunt bani de seminte.
Inclusiv outsourcing-ul o sa mearga la fel in continuare. Un exemplu: Oracle nu dezvolta in Romania, dar face “outsourcing” la suportul tehnic. Oracle plateste cele 16%. Si vor inclusiv sa dezvolte in Romania, indiferent de subventia statului.

In schimb cele 16% ar aduce cateva zeci de milioane de lei la buget.


IT Quickies

Linux a trecut pragul de 1% la capitolul sisteme de operare folosite ca dektop. Asta dupa 15 ani de lupta asidua. Multi sunt de parere ca Linux va castiga teren semnificativ cand Linux nu se va mai numi Linux, asa cum MacOS nu se mai numeste BSD.

Cu titlu de zvon, dupa ce Twitter a refuzat oferta Google de 200 milioane, Apple ar cocheta cu ideea de a cumpara Twitter contra sumei de 700 de miliane de dolari. Interesant, mai ales ca FTC a inceput o ancheta asupra unei posibile aliante intre Apple si Google care ar viola legile antitrustului.

UE face presiuni pentru un ICANN independent, apolitic. Dorinta UE de democratizare a internetului par insa a se bate cap in cap cu reglementarile gen Big Brother pe care UE tot insista pentru a fi adoptate.

In vremuri de criza solutii de cacat, Youtube le cere producatorilor de continut sa-si scoata propiile reclame si sa accepte doar reclamele youtube.

Un nou motor de cautare este pe cale a se naste, Wolfram Alpha, un motor de cautare bazat pe modele matematice si algoritmi AI, care in forma sa matura va fi ideal intr-un web semantic. Pana la un web semantic insa tot pagerank folosim, wolfram poate s-a nascut un pic prematur.

Geocities a fost ingropat oficial, i s-a cantat prohodul, Rest In Peace.

Si cireasa de pe tort, Hello World in toate limbajele de programare.


URL shortening – How do they do it

URL shortening services had experienced a big push in the age of social networks rising, such as Twitter, where big urls collide with the 140 characters user input restriction.

So there was this need of magically transform URLs like this one http://raduboncea.ro/2009/04/01/twitter-autofollow-and-dm-using-python-twitter-imaplib-and-gmail/ into something like this http://tinyurl.com/cralfk.

Many would be tempted to think there is some kind of compression algorithm that would shorten a big URL and make it fit into a unique combination of 4,5 or 6 characters and then decompressed upon user request. Well it doesn”t work like this, mathematics prohibit it.

So how does it actually work?
A URL shortening service takes the big URL and saves it into a database along with an auto incremented numerical value, an id or sequence, so we would have the first big URL saved with ID=1, the second with ID=2 and so on. When someone would ask for http://tinyurl.com/1/ we would get from the database the big URL identified by ID=1 and redirect the user to that URL.

But there is a problem: having numerical ids does not shorten urls too much. For the URL number 1 million we would have 7 numerical characters. So the next step is to change base numerotation from 10 to a bigger one, lets say 36, so we include all a-z small latin letters or, why note, 62 which includes also the capital chars A-Z.
In 36 base we can save as much as 1.679.615 URLs into 4 characters. On base 62 we have 14.776.335 URLs fit into 4 chars, almost 10 times as much as base32 and 14.776 times base10.

Some security issues.
Many shortening services stopped to the algorithm above without digging into a very important security issue which is related to how redirects work. It is critical, before redirecting users to the URL they requested to check what’s behind that URL, to check if the URL is not yet another redirect which may result into a recursive loop and may disrupt the service.

A malicious user may save a URL to a page which will later modify to redirect back to the service URL and thus attempting to generate an infinite loop which could make the interpreter to hang.

To avoid this kind of DoS vulnerability, we must not allow redirects to our own links and to limit redirects to outside to a smaller finite number of depths analysis.

Beneath a small model-view example in django, using also urllib to check for redirects and the base10-base62 conversion algorithm similar to the base36 which is included in django.





Twitter autofollow and DM using python-twitter, imaplib and gmail

The script will:

  1. connect via imap to gmail
  2. select the imap directory TwitterFollow (you should filter twitter follow notifications and label them with TwitterFollow)
  3. fetch the headers of all unread mails
  4. retrieve the twitter user screen_name that is following you from the headers
  5. attempt to create a friendship aka autofollow. If an error occurs is probably due to the fact you previously followed the user
  6. Send a direct message to thank for the following
  7. Flag the message as read so it won’t be fetched next time script runs

You could also check Twitter autofollow and direct message using python mechanize libgmail which is basically achieving the same goal but operate differently using reverse engineering on gmail web site.


Twitter autofollow and direct message using python mechanize libgmail

Requirements:

  • a valid gmail account
  • label your twitter follow notifications (E.g. I use TwitterFollow)
  • mechanize : a stateful programmatic web browsing
  • libgmail : a GA reverse engineered library
  • python-twitter : a wrapper around the Twitter API

IMPORTANT: because Gmail does not provide an API and does not intend to do that because of the ads, hacking libgmail to fetch the threads is a VIOLATION of Gmail TOS. This script should be use for documentation only. For production please consider using POP3 or IMAP to fetch the threads. To avoid your account being suspended or locked run the script no more than twice a day.

Twitter Search Api example in use by Ecto Script – Python

Requirements: simplejson

The script gets the input from Ecto and prints the search results.

Programming Quickies

Ecto script – python feedparser my delicous

I recently started using Ecto as a blog editor instead of Blogo and I find it extremely useful, specially the Script feature which allows you to get the output of your scripts and paste it to the post. This feature gives you all the freedom in automates certain posts.

The Script Tool supports php, python, ruby, perl and bash after declaring compilers paths.

One simple example which I found useful was to parse my delicous bookmarks binded to a specific tag (myblogshare).

În cât timp va fi exploatată această nișă?

Există o grămadă de aplicații web pentru twitter, de la aplicații statistice, administrarea contactelor până la oracole și horoscoape.

Și totuși nu am găsit nicăieri pe cineva să se fi gândit la catalogarea twiteriștilor pe grupuri de subiecte.
Adică cei interesați să zicem de SEO să poată vedea acei useri care postează chestii relevante pe acest subiect ordonați după relevanță.

Nici nu ar fi greu de imaginat engine-ul: practic botul caută hash taguri (exemplu #seo) și indexează toți acei useri, iar relevanța ar fi calculată în funcție de numărul de tag-uri care apar pentru fiecare user în parte.

Așa că sunt curios în cât timp va fi exploatată și această nișă.