Archive for the ‘programator’ Category

How to run a Flask application in a subpath, using Apache mod_proxy

Although there are much better solutions for running wsgi applications (mod_wsgi for Apache or uwsgi, gunicorn for nginx), I’ve been cracking my head trying to set it up using mod_proxy and in a subpath.

What I wanted to achieve is:

http://ex.com/appname/ <-> http://localhost:5000/
http://ex.com/appname/redir -> http://ex.com/appname/destination

(because http://localhost:5000/redir -> http://localhost:5000/destination)

Said and done, having an instance of the app running on :5000, most of the pages on the internet suggest the next apache configuration (including the mod_proxy official docs):

ProxyPass /appname/  http://localhost:5000/
ProxyPassReverse /appname/ http://localhost:5000/

Wrong! The correct setup, for a domain ex.com, is:

ProxyPass /appname/ http://localhost:5000/
ProxyPassReverse /appname/ http://ex.com/

The explanation stays in the ProxyPassReverse reference: it will will do a string replace in the HTTP Location headers. Our app redirects to ex.com, which translates to /appname/ (because of ProxyPassReverse), which translates to our localhost:5000 server (because of ProxyPass).

Please correct me if I’m wrong, but this was the only setup proved to be working.




How to fix picture’s Date Taken

Ever downloaded your vacation pictures from your digital camera, just to discover that the Date Taken tag is wrong? There is a solution for that! You just need python, shell script and probably Linux skills, and ten minutes to spare.

The following lines will do the magic for you:

import pyexiv2
from datetime import timedelta
import sys

metadata = pyexiv2.ImageMetadata(sys.argv[1])
metadata.read()
tag = metadata['Exif.Image.DateTime']
if tag.value.year == 2011:
   tag.value += timedelta(days=366)
   metadata.write()

To keep things simple, I just assumed that you will run this script with the jpeg image as a parameter, and the pictures appear to be taken last year (happened to me).

To fix all the pictures in a folder, simply run this oneline:

for i in *.JPG; do python fix.py $i; done

There you go!

Later Edit: you would probably also want to change Exif.Photo.DateTimeOriginal and Exif.Photo.DateTimeDigitized tags.




Ce avem la cină?

Acum că a trecut și penultima sesiune din ultimul an de facultate, iată sunt cele două proiecte la care am lucrat în timpul liber; care timp deși nu a fost mult, a existat (C3 nu e așa de crimă pe cât mă așteptam, myth busted).

Primul este unul personal, are legătură și cu lucrarea de licență, deocamdată nu public cod, spun doar că se prevede o aplicație măricică Python construită peste o bază de date SQLite, folosind sqlobject, GTK+, goocanvas, reportlab și mulți alți clopoței și fluierași. Am ajuns să fac – printre altele – widgets (prietenii știu de ce spun asta), și sper ca pe măsură ce o dezvolt să mă familiarizez cu aceste tehnologii. E o provocare să o construiesc și să o dezvolt și totodată o distracție.

Cel de al doilea proiect căruia i-am acordat mai mult timp în ultima perioadă, este portarea World of USO din PHP în Python – Django. Am luat alături de Vlad și Sergiu această decizie, deoarece nu eram mulțumiți de starea codului actual al WoUSO (prea multe contribuții de la persoane diferite, stiluri și abordări diferite); ca să rezum, era greu de dus mai departe, îmbunătățit. De ce Django? Pentru că Django e fun, prea multă lume l-a vorbit de bine ca să nu-l încercăm. L-am încercat și a dat roade: în două săptămâni am reușit să implementez o versiune de bază care acoperă aproape trei sferturi din funcționalitatea jocului. Tocmai am primit mail de la Vlad(um), este dispus să aloce timp, cred că vom face treabă bună în continuare :D .

WoUSO este unul dintre proiectele propuse pentru dezvoltare echipelor la Cursul de Dezvoltare Liberă. Mai multe detalii vor fi publicate pe site-ul cursului. Pot doar să lansez doar un zvon că s-ar putea să lucrăm la un modul WoUSO pe acel site care începe cu feis și se termină cu buc.

Dacă citești aici și te interesează unul dintre django, python sau wouso, nu fi timid, dă un mail. Ne-ar plăcea să te alături echipei :) .

Cam atât. Programming must be fun. Sunt limbaje precum chitonul care fac programarea frumoasă, părerea mea.

Links:

http://dev.rosedu.org/wouso/wiki/DjangoPort

http://wouso-django.rosedu.org/ (cont alex:alex)




Aplicație Proiectarea cu microprocesoare

După o idee de Vlad Ureche, cu lipituri și sudori de Mihai Dumitrache și clopoței de Alex Eftimie, acesta este proiectul nostru (echipa eftdum) final la PM.

Se fac lucruri faine la noi la facultate (am văzut proiecte mult mai complexe). Am uitat să scriu semestrul trecut de procesorul pe care l-am proiectat cu Mihai și l-am rulat pe o plăcuță FPGA la Calculatoare Numerice 2.

Ție ce proiect ți-a plăcut mai mult și mai mult până acum?




Ubuntu pentru România

Echipa Ubuntu România

Echipa Ubuntu România lansează un remix al distribuției Ubuntu 9.04, special pentru utilizatorii din România. Zic că merită încercat, pentru lucurile pe care le simplifică, dar și pentru efortul celor care au făcut acest remix posibil.

Detalii pe site-ul oficial și pe pagina dedicată distribuției.




Poli2.0, our take

Produsul echipei Alex și Mihai la final de Poli2.0, realizat prin decembrie dar ținut la naftalină, este uberDE (nu, nu vine de la ubervu +- Dumitrache/Eftimie, ci de la Desktop Edition).

Aplicația scrisă în Adobe Flex folosește AIR + amfphp + alte brizbrizuri și aduce funcționalitatea (de atunci) a ubervu pe spațiul de lucru. Permite căutarea prin conversații, cât și publicarea de reacții pe Twitter/Wordpress. Arată cool :-D

Ca o concluzie: după ce te obișnuiești cu Flex (un eclipse aranjat pentru ActionScript și mxml), este chiar simplu pentru programat interfețe utilizator în viziune 2.0.

Avem și un screencast…

uberVU Desktop Edition from mihai on Vimeo.

Acum să vedem rezultatele cursului. Am mai văzut o aplicație interesantă la Sergiu.




Curs de Dezvoltare Liberă

În semestrul care tocmai a început, pregătim la ROSEdu un curs despre cum se dezvoltă liber, cu unelte deschise și ce înseamnă o comunitate de programatori.

Mesajul care a fost trimis pe listele de discuții, este:

Știi ce au în comun Firefox, Thunderbird, OpenOffice.org, Pidgin și VLC?

Vrei să afli cum se dezvoltă un proiect open source? Cum se programează curat, ce unelte se folosesc, ce înseamnă o comunitate? Vrei să înveți cum să colaborezi și să dezvolți în echipă propriul proiect?

Vino la Cursul de Dezvoltare Liberă, organizat de ROSEdu în Facultatea de Automatică și Calculatoare. Cursul este gratuit, se va desfășura în fiecare weekend începând cu 7 martie, cu participanți selectați prin interviu.

Află mai multe și înscrie-te acum, la http://cdl.rosedu.org/ !

LE: De ce acest curs? Pentru că zilnic folosim aplicații libere, fie că sunt pe Windows, fie că sunt pe Linux. Pentru că nimeni nu ne învață @cs cum sa folosim Subversion, dapăi git. Pentru că ne plac și vrem să le împârtășim celorlalți. Am zis.




Rezumat sesiune de iarnă

Sesiunea s-a terminat…. (hai să ne dăm viteji)

- învățat în plus niște lucruri scăpate în timpul anului

- citit Micul Prinț, Cine suntem,

- văzut Fight Club, The Terminal,

- început învățat cânta chitară

- fost la AG Weinberger – Interzis FM

- făcut script, rezolvat problemă Gmail Voice pe ubuntu

- aranjat o nouă temă pentru planeta ubuntu

- scris cel mai scurt cod so far la P1, în concursul lui mm

- lucrat cu echipa, pregătit oscdc

- plecat vizitat Viena.