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.




ROSEdu Summer of Code 2012

Programul de lucru pe vară la proiecte Open Source, de acasă, inițiat acum 5 ani de către ROSEdu, continuă cu forțe proaspete!

Anul acesta, miza crește pentru studenți, prin bursa de 1000 € și desigur prin provocările tehnice ridicate de proiectele propuse.

Ce trebuie să faci dacă vrei să fii unul dintre participanții la acest program:

  • să manifești interes pentru unul dintre proiectele software propuse
  • să aplici: nu-i greu, te pregătești, scrii aplicația, ceri feedback și convingi
Ce vei câștiga de pe urma RSoC:
  • experiență de lucru într-un proiect software
  • experiență în lucrul cu o comunitate
  • libertatea de a sta acasă/la munte/la mare plătit
Dacă nu v-am convins, mâine la 14:00 este o prezentare în EC004 despre RSoC 2012!



Donații de Crăciun pentru copii, în Poli

Anul acesta intenționăm să continuăm Inițiativa de Crăciun și sperăm, cu

ajutorul celor care vor să se implice, să realizăm ceva cel puțin la fel

de frumos ca în anii trecuți.

Pe scurt, pentru cei care nu au avut ocazia anii trecuți, inițiativa

noastră constă în colectarea de cadouri: haine, cărți, rechizite, orice

este la îndemână și ar putea folosi unor copii care nu au posibilitatea

unei vieți decente.

Colectarea are loc până în ultima săptămână de școală (23 decembrie

2011) în ED422 și în EG106 (Laborator IXIA), Facultatea de Automatică și

Calculatoare, UPB.

Pentru mai multe informații, puteți folosi site-ul inițiativei[1]. Suntem și pe Facebook, la [2].

[1] http://donatii.cs.pub.ro/

[2] https://www.facebook.com/donatii.copii




AppStream Software Center on Fedora

Watching software-center code changes, this one came into my attention: an effort from Giovanni Campagna into bringing Software Center to Fedora, using the PackageKit backend I’ve been working on this summer.

It’s nice to see someone showing interest, and also picking up the code :) .

I must definitely get the time to fix my experimental OBS build, and see the openSUSE version running again. For the record, there is room for improvement on the performance part (especially starting up speed).




De ce computer science? Partea a treia

Și cea din urmă, Facultatea.

Generala am terminat-o ca programator BASIC, liceul ca programator PHP, facultatea … imediat.

Încă din primele zile de Calculatoare, am văzut că să am propriul CMS, nu e chiar atât de cool. Mihai, de exemplu, avea propriul MMORPG; fiecare dintre colegii cu care îmi petreceam timpul știa câte ceva cool. Vlad părea că știe mai multe decât proful de USO, când începea să dea din gură despre personalități din Computer Science. Și nu știam aproape de loc vorbi engleză. Și nu citeam slashdot și credeam că xkcd e typo.

La USO aveam ubuntu în laborator, erau chiar CD-uri pe care le puteam lua acasă. Din al doilea semestru, am făcut GNU/Linux (Ubuntu) sistemul de operare principal. Și nu m-am uitat înapoi :) . După cursul de USO, am rămas cu două lucruri: Linux e cool și Linux e free pentru că dezvoltat deschis de către voluntari. Din dorința de a da ceva înapoi comunității, și pentru că erau la îndemână, am început să contribui cu traduceri. Și am făcut asta destul de mult timp, unii chiar râdeau zicând că “Alex nu scrie cod, Alex face traduceri”.

Am fost acolo când ROSEdu prindea contur*) și am participat sub la diverse activități de-a lungul timpului: ca programator al WoUSO, organizator Ubuntu Install Fest, coordonator al Cursului de Dezvoltare Liberă, responsabil cu prezența web (pasiune veche). Am intrat în Echipa Ubuntu România și Grupul pentru Software Liber. Abia în primul an de master am aplicat și participat la Google Summer of Code, dând astfel înapoi comunității FOSS și cod, nu numai traduceri :) .

În facultate am învățat (din nou, de data asta bine, fără influențe ++) C. Apoi Java și câte ceva din alte limbaje. Prin anul 4 am ales Python ca limbaj de bază. Am rezolvat o groază de teme și am luat habar de computer science.

Au venit vremurile cool, cu domeniu prenume.nume.ro, cu linkedin, CV și facebook.

Acum termin masterul de securitatea rețelelor informatice complexe. Lucrez pentru mine: programez, administrez, documentez, coordonez, plănuiesc și fac asta cu plăcere.

-

Nu am o concluzie pentru această mini-serie; un clișeu de genul: “follow your dream”, nu-și are rostul – habar nu aveam în clasa cincea ce-i ăla inginer în calculatoare și ce face un astfel de om. În plus, acesta nu este un sfârșit, ci doar un punct intermediar, o piatră de hotar :) .

Thanks for reading.




De ce computer science? Partea a doua

Partea a doua: ani de liceu.

În clasa a noua, pentru că intrasem la liceul bine cotat din Curtea de Argeș, pentru că știam să cer și findcă mai mereu am avut noroc, am primit de la mătușa mea primul meu PC: vechiul ei laptop Toshiba, 486 DX4, cu floppy și windows 95. Dura între 3 și 5 minute să pornească. N-avea touchpad ci trackpoint, la fel ca thinkpad-ul din prezent :-) . Făcea ca un motan, dar era al meu.

La gazda unde stăteam, aveam internet, tot cu țârâita, dialup-ul genial (nu mai știu de ce zic genial, am impresia că era ieftin) de la Connex, Xnet. Cu toate astea, baza pentru ce am învățat legat de programare, nu venea de pe internet, ci din ediția tipărita a PC Magazine (cineva adusese niște teancuri cu reviste vechi de 5 ani). Erau super, multe articole conțineau bucăți de cod; smalltalk (dar nu înțelegeam boabă), cât și Assembly – despre care cum-necum știam câte ceva. Țin minte că am citit și un articol despre Java, cu multe buzzwords, ca despre o tehnologie extraterestră.

La școală, secția Matematică-Informatică intensiv (privin înapoi, mi se pare exagerat acest intensiv), ni se preda, instrucțiune cu instrucțiune, limbajul C. Îi ziceau C++, pentru că foloseam cin>> și cout<<, dar era mostly C. După ce am rescris spânzurătoarea ca să folosească în întregime setul ASCII, iar victima să arate a om, am început să cochetez cu ideea de a scrie un joc interactiv și grafic. Primul snake era din caractere @ și nu se termina niciodată. Din reviste am furat codul assembly care mă aducea din DOS într-un mod grafic VGA (320×200, 256 de culori) și în care puteam scrie direct în memoria video – fiecare număr între 0 și 255 reprezenta o culoare. Am definit un format de imagine (gen PPM) și am scris un editor banal de astfel de imagini. Apoi am făcut Pacman, scris în C++, obiectual (după o carte veche și groasă), cu double buffering și scrolling (harta mai mare decât ecranul VGA), o combinație între Pacman și Dina, cu animăluțe semiinteligente. Îmi pare așa rău că am pierdut codul. Îmi plăcea să programez, să fac lucruri care se mișcă, să primesc laude pentru asta.

Undeva pe la acest moment, am schimbat laptopul pe o placă de bază + procesor și carcasă; apoi pe rând, am luat rami, harddisk, monitor și restul de bucățele, până mi-am făcut calculatorul meu.

Pe la sfârșitul clasei a zecea, profa de informatică mi-a dat spre documentare un mic curs de HTML, PHP și MySQL. Cât de cool mi s-a părut la acel moment, când aveam net cu lingurița, să pot să scriu eu site-uri, și nu orice fel de site-uri, ci dinamice. Cam pe aici s-a terminat pasiunea pentru jocuri VGA. Mi-am făcut propriul CMS, XL_ES (xl’s easy site, xl eram eu, de la Alex, nu de alta).

xlesInterfața era o clonă a Gmail-ului (am avut cont de Gmail în 2005, fratele lui Alex avea trei invitații, două ni le-a dat nouă). Cu toate astea, știa articole, categorii, pagini, atașamente, redirectări, file browser, templates, un mic wordpress. Privind înapoi, nici nu știam că există WordPress. Am vrut blog, l-am scris. Era atât de simplu pe vremea când vorbeam PHP :P .

Scriam pe blog. Foloseam yahoo messenger shi eram convins k limba romana s scrie oriqm imi tună. Articolele erau fie poze cu fratimio, fie poezii, fie linkuri găsite, fie cereri de melodii (știe cineva cum se numește melodia cu versul …), fie tot felul de lamentări sau anunțuri. În perioada asta am făcut site-ul liceului și am fost gata-gata să intru într-un proiect în echipă (cu Alex și Andrei, precum și Tase, care ne aducea pizza și cărți, în schimbul programării).

A fost fain în liceu, la un moment dat am testat chiar Linux (tipul care făcea rost de CD-uri cu filme, avea în catalog și Red Hat, pe 6 discuri, am zis să încerc). N-a mers mouse-ul, am renunțat. Apoi am dat cu nasul de ubuntu warty, același rezultat. Windows XP mergea mai bine :) . La un moment dat, am tradus un progrămel freeware (nu mai știu ce făcea, avea legătură cu look’n'feel-ul XP-ului), am trimis traducerea și a fost acceptată. Super achievement.

Și așa, pe neștire, a venit peste mine facultatea. Ultimul post pe blog l-am scris dintr-un internet caffe de lângă universitate, în perioada admiterii. Cu titlul “S-a terminat (aproape)”, habar nu aveam că încheia o perioadă.

De ce computer science? Pentru că am redus opțiunile la Cibernetică și Automatică. Pentru că la Cibernetică păreau grele subiectele. Pentru că mi s-a spus că la Calculatoare e cel mai greu. Pentru că am intrat :-) .




De ce computer science? Partea întâi

Nu strică niciodată să pui memoria la încercare; plus exercițiul scrisului este unul benefic, și-mi face chiar plăcere.

Partea întâi a acestei serii: Școala generală.

Eram în Școala Generală (cu clasele I-VIII din Galeș), în clasa a V-a (1999) când am deschis prima dată un calculator. Erau două HC-uri în cabinetul de Biologie și Informatică: unul negru, cu toată logica în tastatură și programe pe casetă audio și un mic TV pe post de monitor, și unul alb, care avea două unități de dischetă, din acelea mari, de 5 1/4 inchi.

Cel negru avea un joc, ceva cu un avion care evita obstacole, trăgea în inamici și lăsa bombe pe sol. Nu m-a prins niciodată. Cel alb, avea pe o dischetă sistemul de operare, un soi de DOS. Țin minte doar că mesajele de POST erau datate cu un an înainte de 1987, anul nașterii mele. Mai mult decât DOS, putea fi programat, avea GWBASIC, un interpretor de BASIC. Inutil de adăugat că ecranele erau verde/negru, tastaturile nu aveau tasta Super (windows), totul mirosea a plastic vechi și totodată nou.

În prima oră, proful, Mihai Vasile, ne-a vorbit despre componentele unui calculator și principiul de funcționare. O săptămână mai târziu, aflam despre „algoritm”, înșirarea de acțiuni, sau schemele cu dreptunghiuri și cu romburi. Mi-aduc aminte că ne-a prezentat algoritmul lui Euclid pentru aflarea celui mai mare divizor comun. Și ora următoare am avut lucrare, să-l reproducem. Am fost praf și asta m-a motivat să încerc mai mult să înțeleg (proful era tipul cool, abia ieșit din facultate, cu 10, poate 12 ani mai mare decât noi, care cred că făcea informatică la o școală generală de la țară, de plăcere). După ceva timp, în laborator, colegii făceau coadă la HC-ul negru, pentru a juca avioane, iar eu profitam de acea oră pe săptămână, cât puteam să explorez gwbasic. Era interesant de programat: câteva cuvinte cheie, fiecare linie începea cu declarația numărul de linie; programam din 100 în 100 pentru că sigur uitam lucruri, iar apoi puteam modifica folosind indecșii nefolosiți. Când nu mai puteam insera cod, foloseam GOTO undeva în viitor (cred că asta se numește spaghetti programming).

Primul meu program, la care am lucrat săptămâni (câte o oră pe săptămână), a fost spânzurătoarea în ASCII. Cuvântul secret era hardcodat, nici vorbă de spânzurătoare, ci doar un progressbar cu “=”-uri care se transformau în “#”-uri. Era cool și eram mândru.

Undeva aproape de vacanța de vară, ne-a vizitat (în timpul unui cerc școlar, sau alt eveniment) un PC. Rula Windows 98, avea Paint, un soft de e-learning și jocul Hercules. Cât de diferit și „de ultimă generație” părea.

Anul următor din generală, n-am mai făcut informatică. Au venit niște 486 cu dischetă de 1,44 inchi, cu Mario, Dina, Supaplex și multe alte jocuri, precum și Paint cât cuprinde. Țin minte că o dată sau de două ori am scăpat de la ore pentru a instrui pe cineva în laboratorul de informatică; nu aveam calculator acasă, dar mă descurcam de minune cu windows 95 – citisem o carte, “introducere în Microsoft Windows 95″.

Și pentru că toate lucrurile bune se termină, spre finalul școlii a venit și un calculator cu unitatea centrală tower (pe verticală). Era Pentium 4, avea 64 MB de RAM și rula Windows XP. Avea și un modem, pe care l-am instalat și prin care am descoperit internetul. Da, cu țârâita. Da, când nu ocupa unica linie telefonică a școlii. Și da, de multe ori fără imagini, pentru că dura o veșnicie să se încarce. Nu-mi aduc aminte foarte multe din acele timpuri, doar sentimentul de descoperire a ceva cu totul nou (le fel ca atunci când am jucat Hercules color). Perioada cu acest computer m-a învățat Word și Excel (cineva trebuia să știe și din ăstea într-o școală).