Hacking vilnius ticket web service

Introduction

Lately I was involved in some sort of web scraping thing, and it was very exciting. One can do so many things automatically with a simple, yet powerful script. In particular what python with lxml can offer.

Challenge

So, in the city of my living I came across the service, which provides You with the current information of Your public transportation card. It’s very-very not user friendly and if I catch myself on the run, I need to go to their site and log in and then I only then I can see the critical information I need — how much money is there in my public transportation card. No app is provided on any platform. So the only possibility is to do some hacking of the system and write an app for myself.

Scrapper

First thing to do, is to analyse the platform. What was really amazing is that there was no form elements. Everything was done, using the JavaScript. This makes life even more easier

2013-03-17-013342_3840x1080_scrot

This only means, that the data from the inputs is send directly to the server with XHR in background and then everything goes straight where it belongs to be. So the next step — what does it send?

2013-03-17-013350_3840x1080_scrot

All the form elements, plus some empty variables (?) and something randomly generated, looking like key-ish thing, which looks like no-changeable thing, because after some testing, I was still able to make a POST request to the server, and he was perfectly fine with this random thing. This is basically it, now the only thing left is the code.

The python library lies @github.com. Fell free to fork it and make something from it. And here’s the screenshot of the text-content of the returned html.

2013-03-17-015132_3840x1080_scrot

Conclusion

After working with scrappers, I’ve realized how insecure the web is. The only thing, which can make some changes in the field is the captcha-ish things included in the forms.

Advertisements

Publikuojam pirmą savo knygą

Prieš rašydamas ( o tiksliau taisydamas ) esamą knygos variantą, noriu papublikuoti savo pirmą atvirai rašytą knygą. Išeities kodas visuomet buvo pasiekiamas Arch Linux Lietuva GitHub saugykloje. Realiai, knyga yra lietuviškas Beginners’ Guide variantas su keliais pridėjimais ( tiesa, šiuo metu perrašau esamą lietuvišką variantą wiki puslapyje į naujesnį ). Ateityje, kai turėsiu daugiau laiko, planuoju ją praplėsti ir pateikti ne vien tik vieno wiki puslapio lietuvišką variantą, o surinkti kiek galima daugiau informacijos apie Arch Linux naudojimą ir administravimą.

Kadangi tokios knygos neturi apčiuopiamos publikos, kuri galėtų ją pirkti, tai ją atiduodu nemokamai. Juk knygos atlieka informacijos saugojimo funkcija, o pinigai jau yra antraeilis dalykas. Be to, knyga yra parašta gan blogai, grubiai. Tai tik pirmas mano darbas, todėl noriu atsiprašyti tų, kurie tikisi rasti labai kokybiškai atliktą darbą.

Pirma gyvenimo svajonė beveik įvykdyta.

Analizuojam signalus su python

Matlab DIE !!!

Taikyti python kasdieniams skaičiavimas pradėjau visai neseniai. Ankščiau mane labai tenkino ir octave ar calc ar maxima. Tačiau dabar, kai duomenų srauto atvaizdavimo poreikis kyla vis labiau, tenka ieškoti kitų galimų įrankių.

Pirma man atėjusi mintis ( kaip visad pirmosios mintys turi būti neteisingos ) buvo tiesiog pradėti rašyti savo programinį paketą. Tai užimtų amžius, bet galiausiai, pabaigoje turėčiau naudojamą įrankį.

Laiko stoka ir į pagalba tiesiog atėjo mano mylimas python! O su juo analizuoti signalus yra tikrai lengva panaudojus tiesiog vieną cmath modulį.

Ilgai nelaukiant, paimkime paprastą pavyzdį – neperiodinį, nesimetrinį signalą su faze. Tarkim mūsų signalas sklinda nuo 0 iki tau. Tuomet spektrinės analizės formulė atrodys

V(f) = A/(-i*2*pi*f)*(e**(-i*2*pi*f) -1)

Tikiuosi kas nors atpažįstate spektrinės analizės formą.

Kadangi dabar turim galutinę formulės formą, galima pradėti skaičiavimus! Paimkime amplitudę Atau = 2 V.

def result( f ):
  from cmath import pi, e, sqrt, polar
  A = 2. # 2V
  i = sqrt(-1)
  try:
    r, phi = polar ( A/(-i*2.*pi*f)*(e**(-i*2*pi*f) - 1) )
    return r, phi
  except ZeroDivisionError:
    return A, 0

Klaidos tikrinimą reikia daryti neatsitiktinai, o tikslingai, kadangi kai dažnis pasiekia nulį, mes turim dalinimą iš nulio, o tai sąlygoją klaidą. Kaip žinoma, funkcijos python gali gražinti keletą kintamųjų iškarto ir šiuo atvėju mums tai labai pagelbėja ( nors dirbančioje programoje turėjau išskaldyti r ir phi, dėl klaidos ).

Dabar teliko parašyti pagrindinę funkciją, kuri kreipiasi į mūsų parašytą ankstesnę funkciją.

def main():
  f = open("phase_shift_amplitude.dat", "w") # duomenu failas
  p = open("phase_shift_phase.dat", "w") # duomenu failas
  for fr in [x*0.001 for x in range(-3000,3001)]:
    r, phi = result(fr)
    print >>f, fr, r
    print >>p, fr, p

Galutinis, veikiantis variantas atrodo taip

#!/usr/bin/env python
def result ( f ):
  from cmath import pi, sqrt, polar
  A = 2. # 2V
  i = sqrt(-1)
  try:
    r, phi = polar ( A/(-i*2.*pi*f)*(e**(-i*2.*pi*f) - 1))
    return r
  except ZeroDivisionError:
    return A

def phiesult ( f ):
  from cmath import pi, e, sqrt, polar
  A = 2. # 2V
  i = sqrt(-1)
  try:
    r, phi = polar ( A/(-i*2.*pi*f)*(e**(-i*2.*pi*f) - 1))
    return phi
  except ZeroDivisionError:
    return 0

def main():
  import math
  f = open("phase_shift_amplitude.dat", "w") # duomenu failas
  p = open("phase_shift_phase.dat", "w") # duomenu failas
  for fr in [x*0.001 for x in range(-3000,3001)]:
    r = result(fr)
    phi = phiesult(fr)
    print >>f, fr, r
    print >>p, fr, phi

if __name__ == '__main__':
  main()

Dabar mes turime du failus su amplitudės ir fazės ( radianais ) skaitinėm vertėm. Teliko tik juos atvaizduoti. Tam galime pasitelkti gnuplot:

plot 'phase_shift_amplitude.dat' smooth frequency

plot 'phase_shift_phase.dat' smooth frequency

Arba LaTeX su pgfplots:

\begin{tikzpicture}
  \begin{axis} [
    width=500pt,
    height=230pt,
    grid=major,
    ylabel={$|V(f)|$},
    xlabel={$f, Hz$}
    ]
    \addplot[black] file {phase_shift_amplitude.dat};
  \end{axis}
\end{tikzpicture}\\
\textsl{Figure 1. Signal, with phase shift, amplitude spectrum.}\\

\begin{tikzpicture}
  \begin{axis} [
    width=500pt,
    height=230pt,
    grid=major,
    ylabel={$argV(f)$},
    xlabel={$f, Hz$}
    ]
    \addplot[black] file {phase_shift_phase.dat};
  \end{axis}
\end{tikzpicture}\\
\textsl{Figure 2. Signal phase, with phase shift.}\\

Asmeniškai aš daugiau esu linkęs prie Latex su pgfplots. Gnuplot labai geras įrankis greitam duomenų pateikimui. O jau atsakaitai geriausias įrankis yra LaTeX ( tikrų vyrų dokumentų tvarkyklė! ).

Spartinam linux aplinka

Šiandien radau gan neblogą idėją kaip galima paspartinti sistemą ir kartu sutaupyti energijos ( paradoksalu, bet tiesa ).

Linux sistemoje vyksta intensyvus log failų rašymas. Kaskart, kai koks nors įrenginys yra pajungiamas prie kompiuterio, arba kažkas kreipiasi į apache arba tiesiog jūs žiūrite flash video – rašomas log’as.

Sistemos paspartinimo idėja labai paprasta – perkelti logų rašymą iš kietojo diską į daug spartesnę atmintį – RAM’us. Ir linux sistemoje tai padaryti labai paprasta. Pirmiausiai, reikia pakeisti FSTAB failą.

tmpfs     /tmp             tmpfs  defaults,noatime,mode=1777 0 0
tmpfs     /var/log      tmpfs  defaults,noatime,mode=1777 0 0
tmpfs     /var/tmp    tmpfs  defaults,noatime,mode=1777 0 0

Taip mes peradresuojame visus laikinus failus ( tame tarpe ir logus ) į RAM atmintį. Toliau, reikia sustabdyti syslogerį. Priklausomai nuo distribucijos jis gali skirtis. Kadangi dirbu su Archlinux, tai jo syslogeris yra syslog-ng.

/etc/rc.d/syslog-ng stop
rm -rf tmp/*
rm -rf /var/log/*
rm -rf /var/tmp/*
mount -a
/etc/rc.d/syslog-ng start

Ir su paskutinia komanda, mūsų logai yra rašomi jau į ram atmintį. Teliaka paskutinis žingsnis, norint paspartinti firefox darbą linux aplinkoje. Atsidarom firefox, įvedam:

about:config

Bet kurioje puslapio vietoje dešiniu pelės mygtuku pasirenkam New->String, vardo srityje įrašome browser.cache.disk.parent_directory, kas nurodo kur firefox turi saugoti laikinus failus ir value langelyje įrašome /tmp.

Ir štai, dabar Jūsų sistema veiks sparčiau. Kiek man teko asmeniškai pastebėti, tai dabar tiek youtube, tiek wordpress veikia žymiai sparčiau ir greičiau. Vienintelis šio būdo minusas yra tas, kad po sistemos perkrovimo visi logai dingsta, todėl, jeigu Jums aktualu kaupti log failus, shutdown skripte rekomenduojama papildyti eilutė, kuri saugos Jūsų log failus kokioje nors direktorijoje. Sekmės. :)

Šaltinis: fewt@blog:~$ _

Statom arm cross compile

Įvadas

Dirbant su embedded sistemomis, tenka kompiliuoti programas atitinkamoms architektūroms. Net tiesiog norint pabandyti pažaisti su plokštę qemu aplinkoje, tenka kompiliuoti programas. Norint tai daryti, reikia pas save pasistatyti cross compilerį, arba toolchan’ą. Panagrinėkim kaip tai viskas atrodo ARM tipo sistemoms.

Rankinis kompiliavimas

Visą tą džiaugsmą galima pasigaminti namų sąlygomis. Kadangi sistema nėra standartinė, o bildinama iš standartinių source’ų, ją reikia truputi palopyti. Kodėl pavadinau rankinis? Nes visus source’us reikia parsisiųsti, sukonfigūruoti ir tik tada sukompilinti. Realiai visą tą reikalą atlieka vienas skriptas. Kadangi lopymai padaryti būtent tokios versijos programiniai įrangai ( o kitų neradau ), tai kompiliavimo eigoje turėtų išmesti tam tikras klaidas, kurias galima lengvai ištaisyti, kaip ld ir as versijų tikrinimo.

Šaltinis: Charles M. “Chip” Coldwell.

Buildroot kompiliavimas

Su buildroot yra truputi kitaip. Buildroot iš esmės yra make failų rinkinys. Ir jis savyje turi visus reikiamus lopus. Ką tereikia padaryti, tai jį atsisiųsti, išarchyvuoti, sukonfigūruoti ir paleisti:

wget http://buildroot.net/downloads/buildroot-2010.02.tar.gz
tar -xvf buildroot-2010.02.tar.gz
cd buildroot-2010.02
make integrator926_defconfig
make menuconfig

Konfigūraciniam meniu rekomenduojama pasirinkti:

  • Toolchain
    • Build/install c++ compiler and libstdc++
  • Target filesystem options
    • tar the root filesystem
      • Compression method
        • gzip
    • Das U-Boot Boot Monitor
      • board name
        • versatilepb
  • Kernel
    • kernel binary format
      • zImage

O visa kita jau fantazijos ir eksperimentų šaltinis. Aš asmeniškai dar iš filesystem options pasirinkau cpio rootfs formatą, romfs outputą, kad man iškart sugeneruotų tvarkingą arm-linux’ą. Bet čia jau ne į tą pusę.

Telieka tik sukompiliuoti

make source && make

Toliau viską darys make failai. Bet kai kada ir jie nežinos ką daryti, tai stebėkit procesą. :) Toliau reiks pasileisti sistemą kokiam nors emuliatoriuje ( qemu ) ir turim normalų gcc savo stichijoje. Apie qemu + arm linux kernel papasakosiu kitam savo įraše. Dabar galiu pateikti tik boot’o video:

Šaltinis: Jim Thomas.

Sourcery G++ Lite

Turbūt pats lengviausias ir jokio konfigūravimo nereikalaujantis sprendimas. Rekomenduoju visiems pradedantiesiems. Tereikia tik nueiti į Sourcery G++ Lite parsiuntimo puslapį, jį atsisiųsti, suteikti +x teises, paleisti ir “Next, next” stiliumi viską įdiegti.

Šaltinis: Balau.

Išvados

Yra ir daugiau būdu susikurti sau cross compilerį, bet turbūt kiekvienam tai savas patogumo pasirinkimas. Aš asmeniškai naudoju visus tris, kaip ir nebūtų keista. Sourcery G++ pliusas tame, kad jis turi EABI support’ą, tai mes galim linux branduolį sukompilinti su EABI supportu. Rankinių būtų sukompilintas cross compileris to negali, nes linux kernelis tiesiog per senas.

Išbandykit viską ir elkitės pagal situaciją. :)

Automatinių Kompiuterių architektūros laboratorinių ataskaitų kodo paviešinimas

(via matmoon)

Pasibaigusiu studijų proga, paviešinu visus savo automatizacijos skriptus.

Kodėl tik dabar? Man patinka kai žmonės dirba, o ne vienas dirba, o kiti tik vaisius paima. Tikiuosi mintį supratote.

Ypatybės:

  1. Visuose laboratoriniuose generuojamas latex failas, kuris konvertuojamas į pdf. Įsitikinkite, kad turite pilną texlive ir littex paketą.
  2. Antram laboratoriniam naudojama awk. Siūlyčiau susipažinti su šito įrankio galia;
  3. Šeštam laboratoriniam tekstas yra verčiamas į paveikslėlį, kuris paskui įkeliamas į latex failą. Vertimui naudojamos pbmtext, pnmcrop, pnmpad komandos. Įsitikinkite, kad Jūsų sistemoje yra tokios komandos.

Laboratoriniai:

  1. Antras laboratorinis;
  2. Trečias laboratorinis;
  3. Ketvirtas laboratorinis;
  4. Penktas laboratorinis;
  5. Šeštas laboratorinis;

Archlinux wiki lietuviškai

Sakyčiau, ubuntu lietuviška benduomenė turi tikrai gerą organizacinę struktūrą ir užduotis.  Tai verčia truputi pavydėti ir kibti kitoms bendruomenėms į darbus.

Kadangi lietuviška archlinux bendruomenė truputi merdėja ( paskutinis wiki lietuviškas vertimas buvo atliktas 2007 metais ), prisispyriau kai tik baigsis sesija, rimtai sėsti prie archlinux dokumentacijos vertimo į lietuvių kalbą. Akmuo į archlinux.lt bendruomenę. Kolkas išverčiau tik vieną straipsniuką.

Daug kas pasakytų – kam to reikia, juk angliškas variantas visuomet bus dogma ir lietuvišku variantu vargiai ar kas naudosis. Bet tai prestižas ir rodiklis, kad bendruomenė toje šalyje veikia.

Jeigu kas norinte prisidėti, kviečiu. Kontaktai:

Latex #1

Dokumentų tvarkyklės. Niekad gyvenime nepagalvojau, kad kažkada su malonumu darysiu laboratorinius, kursinius ir kitas rašliavas su kažkuom panašaus į latex.

Pirma pažintis prasidėjo dar pirmam kurse, kuomet vienas kursiokas pasakė, kad jų dėstytojas duoda pliusą už tai, jeigu ataskaita būna parengta latex kalba. Susidomėjau, pažiūrėjau, per daug painu, daugiau nebežiūrėjau. Bet kas mane paskatino grįžti prie latex knowledge didinimo? O gi tas pats laboratorinių darbų automatizavimas. Išties, turbūt šis dalykas padarė daugiausiai permainų mano gyvenime šiam semestre.

Instaliuoti jį ubuntu labai paprasta

sudo apt-get install texlive-full

Kas dėl jo mokymosi, tai kiekvieno dokumento pradžia būna beveik tokia pat. Viskas priklauso nuo to, keik paketų Jūs naudosite. Pvz, mano elektronikos kursiniam headeris labai ilgas, nes ten naudoju labai daug plotinimo paketų, mikroschemų braižymo paketas. O iš esmės, paprastas latex failiukas atrodytų taip:

\documentclass[11pt,a4paper]{article}
\usepackage[left=20mm,right=15mm,top=15mm,bottom=15mm]{geometry}
\usepackage[utf8x]{inputenc}
\usepackage[L7x]{fontenc}
\usepackage[lithuanian]{babel}
\begin{document}
\title{Antraštė}
\author{Šotkis Diodas}
\date{\today}
\maketitle
\section{Įvadas}
Mano batai buvo du …
\section{Puslaidininkinio diodo savybės}
O buvo taip. Atėjo senis pas senę..
\end{document}

Išsaugojam tokį failiuką bet kokiu vardu su tex plėtiniu, paleidžiam

pdflatex bet_koks_vardas.tex

Ir jis mums ramiai sugeneruoja pdf failiuką su mūsų tekstu.

Pagaliau universitete matosi atviro kodo provaišos

Esu atviro kodo vaikščiojanti propoganda. Iš tolo kreivai žiūriu į visus, kurie kaip savo pagrindinę OS naudoja WindowsOS. Visiems nuolat plaunu smegenis, kad pereitų prie Linux, bet mano propogandiniai sugebėjimai dėja nėra tokie stiprūs, todėl niekas ir nepereidinėjo, net iš manęs tyčiodavosi, kad aš vis dar sėdžių jų žodžiais DOS’e. :-)

Bet situacija pasikeitė su kompiuterio architektūros dalyko atėjimu į mūsų studijo programa, tiksliau su jo laboratoriniais. Mūsų fakultete mes naudojame simplescalar simuliatorių, kuris yra visiškai CLI. Dar galima pridėti tą faktą, kad laboratorinis yra kelių puslapių ilgio ir per 1.5 valandos jį padaryti labai sunku, todėl tenka treniruotis namie. Viskas tuom ir baigtūsi, jeigu ne atviras kodas iš esmės, o tiksliau bash ir latex.

Kadangi SimpleScalar yra CLI, tai juo galima operuoti per bash-script. Kiekvienas laboratorinis turi baigtis tam tikra ataskaita {report}, ją ir generuojame su latex. Truputi pasėdėję prie skripto, atėję į laboratoriją, laboratorinį galima padaryti santykinai per sekundes.

Štai kaip atviras kodas padeda man palengvinti gyvenimą.