Tutorial Freeswitch

December 30th, 2008 Alex

Freeswitch este o platformă pentru VoIP foarte flexibilă şi puternică.

Am scris un tutorial de publicat pe viitorul blog.sinapticode.ro, dar până una alta, o versiune iniţială (ce mai are nevoie de finisaje) găseşti aici: http://alexn.org/docs/dialer.html.

Posted in learning, tips&tricks | No Comments »

Unixcyclopedia - cheat și lsof

May 4th, 2008 Alex

Pentru că am cam aberat în ultimul timp numai prostii nefolositoare :) și pentru că săptămâna asta am fost liber, mă simt dator să reiau o mica serie de articole ce se concentra pe învățarea de comenzi din terminal … unixcyclopedia. Nu știu dacă folosește cuiva, dar personal mi-e atât de lene să învăț unelte de productivitate că-mi trebuie o motivație să o fac.

command line ruby cheat sheets

cheat este un utilitar în linia de comandă cu ajutorul căruia se pot afișa trucuri și sfaturi despre diverse unelte (ce au în general legătură cu Ruby1 , dar nu numai).

Pentru instalare, aveți nevoie în prealabil de Ruby și de RubyGems2. Dacă cerințele sunt respectate, instalarea se realizează cu un simplu:

  gem install cheat

Odată ce instalarea a fost efectuată, putem afla exemple de utilizare despre o grămadă de unelte.

Și sincer să fiu, articolul inițial aș fi vrut să fie despre lsof (list open files), un utilitar extrem de util ce afișează informații despre fișiere deschise de procese. Și aici vine șmecheria … un fișier în Unix poate fi un fișier fizic de pe harddisk, sau un director, sau un device hardware, sau un fișier de rețea (e.g. Internet socket, NFS sau Unix Domain socket). Practic aproape orice resursă Unix poate fi (și este în general) accesată ca un fișier.

Și aici intervine lsof:

  • vrei să afli ce procese comunică pe portul 80?
  • vrei să afli ce procese blochează un anumit fișier? sau un anumit port?
  • vrei să afli ce fișiere/porturi sunt folosite de o anumită aplicație sau de un anumit utilizator?
  • sau poate vrei să afli ce procese s-au blocat așteptând la o resursă blocată de un alt proces?

Și acestea sunt doar câteva din întrebuințările posibile … comanda este atât de cool. Și din fericire nu a trebuit să sap prin documentația man. Tot ce a trebuit să fac a fost ceva de genul …

  cheat lsof | less

Iar output-ul este ceva de genul …

  lsof -i
   -- Show all connections

  lsof -iTCP
   -- Show only TCP connections (works the same for UDP)

  lsof -i :22
   -- -i :port shows all networking related to a given port

  lsof -i@192.168.1.5
   -- To show connections to a specific host, use @host

  lsof -i@192.168.1.5:22
   -- Show connections based on the host and the port using @host:port

  lsof -i| grep LISTEN
   -- Grepping for "LISTEN" shows what ports your system is waiting for
   connections on

  lsof -i| grep ESTABLISHED
   -- Grepping for "ESTABLISHED" shows current active connections

  lsof -u ecable
   -- Show what a given user has open using -u

  lsof -c syslog-ng
   -- See what files and network connections a command is using with -c

  lsof /var/log/messages
   -- Pointing to a file shows what's interacting with that file

  lsof -p 10075
   -- The -p switch lets you see what a given process ID has open, which is good
   for learning more about unknown processes

  lsof -t -c Mail
   -- The -t option returns just a PID

  lsof -a -u ecable -i @1.1.1.1
   -- Using-a allows you to combine search terms, so the query below says, "show
   me everything running as daniel connected to 1.1.1.1" 

  kill -HUP `lsof -t -c sshd`
   -- Using the -t and -c options together you can HUP processes

  kill -9 `lsof -t -u daniel`
   -- You can also use the -t with -u to kill everything a user has open

  lsof +L1
   -- lsof +L1 shows you all open files that have a link count less than 1,
   often indicative of a cracker trying to hide something

Wow, that’s cool.

Note:

  1. Ruby este un limbaj de scripting modern, robust, orientat pe obiecte, și cu o comunitate sănătoasă
  2. RubyGems este manager de pachete din comunitatea Ruby

Posted in tips&tricks, unixcyclopedia | No Comments »

Javascript - onclick vs. onchange

December 12th, 2007 Alex

Am avut de creat un meniu format din checkbox-uri. La selecția/deselecția unui checkbox, atunci când ai nevoie asociezi anumite acțiuni cu schimbarea stării acelui checkbox, apare următoarea dilemă: onclick, din punct de vedere semantic și chiar și al standardului W3C, nu este device-independent.

O interfață bine construită trebuie să fie accesibilă. Iar asta include compatibilitate cu screen-readere și posibilitatea de operare numai de la tastatură. Desigur, datorită problemelor din IExplorer screen-readerele actuale nu iau în calcul prea mult semantica tipurilor de evenimente, și onclick este perfect acceptabil, iar când selectezi un checkbox din taste se generează oricum onclick, dar nu sunt sigur că situația va rămâne aceași.

IExplorer are însă probleme cu onchange. La selecția unui checkbox onchange este generat abia după ce elementul pierde focusul.

Așa că mi-am propus să creez un script ce execută evenimentul fie la onclick, fie la onchange, în funcție de browser.

Problema este că nici măcar de ordinea evenimentelor nu putem fi siguri. În timp ce pe IExplorer și pe Firefox onchange se execută după onclick, pe Safari onchange se execută înainte de onclick.

Așa că scriptul meu face următoarele:

  1. Dacă codul se execută la onclick, în onchange detectez execuția efectuată și nu mai execut nimic
  2. Dacă se execută codul la onchange, atunci nu mai execut nimic la onclick

O a 2-a problemă apare la execuția manuală a funcțiilor onchange/onclick (fără click-ul fizic al mouse-ului), și asta deoarece nu se mai execută ambele evenimente și ne dă peste cap automatul. Ca soluție … detectez dacă evenimentul a fost generat sau nu din checkbox-ul pe care se face schimbarea, și dacă a fost generat de altcineva atunci sărim peste toată procedura de care spuneam și executăm codul fără alte condiții.

Destul de brut procesul, dar merge, și acum folosesc onchange fără frică pe Firefox, IExplorer și Safari (sorry, nu testez pe Opera, dar nu văd de ce n-ar merge).

Atașez codul: onchange1.html

Enjoy ~

Posted in soft-hack, tips&tricks | 3 Comments »

Linux tips and tricks (1)

September 16th, 2007 Alex

Istoria liniei de comandă Bash

Bash reţine o istorie a comenzilor date. Şi după câteva luni de utilizare se adună destule artifacte valoroase :) De multe ori aţi vrea să vă reamintiţi vreo comandă pe care aţi dat-o acum câteva săptămâni, aşa cum am fost eu pus în situaţia asta, azi. Aveam nevoie să folosesc funcţia “split” în awk, dar am uitat cum, şi mi-a fost lene să caut pe net. Comanda era ceva de genul:

echo $PATH | awk '{split($0,sep,":"); for (x in sep) print sep[x]}’

Bash reţine toate comenzile date în fisierul .bash_history din directorul personal al utilizatorului. O variantă pentru căutare ar fi deschiderea fişierului cu un editor de texte.

O altă variantă este comanda “history” a cărei rulare este aproximativ echivalentă cu:

cat -n ~/.bash_history

Dacă vrei să deschizi istoria într-un editor de texte, dar nu vrei decât o functionalitate minimală (căutare şi scroll up/down), comanda e ceva de genul:

history | less

Pentru a căuta comanda mea în istoria liniei de comandă, o bună variantă ar fi:

history | grep split

Desigur, în linia de comandă merge să afişezi comenzi din istorie, una câte una, folosind tastele săgeţi UP/DOWN, sau combinaţiile de taste Ctrl-P/Ctrl-N. Se poate deasemenea căuta direct de la promptul liniei de comandă folosind combinaţia de taste Ctrl-R (reverse-interactive-search). Începeţi să tastaţi primele caractere ale comenzi, şi ultima comandă ce corespunde şirului introdus este interactiv afişată.

Raising Elephants Is Utterly Boring

Când calculatorul s-a blocat, deşi se întâmplă mai rar ca-n alte sisteme de operare, se poate totuşi întâmpla, iar combinaţia Ctrl-Alt-Del atât de familiară utilizatorilor de Window nu prea merge.

Restartarea sistemului de operare folosind butonul de RESET al calculatorului nu este sigură deoarece sistemul de fişiere poate fi corupt şi poţi pierde date importante.

Metoda cea mai sigură de restartare este apăsând pe rând tastele R-E-I-U-B în timp ce apăsaţi tastele Alt+SysReq.

Deci încă odată:

Alt + SysReq + R-E-I-U-B

Desigur, fiecare tastă din secvenţa REIUB face ceva diferit, şi poate fi folosită de una singură, dar personal uit mereu ce fac tastele respective (poate dacă mi se bloca calculatorul mai frecvent, le memoram :) ).  Însă un rezumat bun găseşti aici: http://en.wikipedia.org/wiki/Magic_SysRq_key

Omorârea proceselor blocate

Pentru omorârea proceselor blocate din consolă avem nevoie de PID-ul comenzii, găsirea sa făcându-se cu comanda ps. N-o să insist prea mult pe comanda ps, folosirea sa uzuală fiind ceva de genul:

ps ax | grep -i [a]pache

Rezultatul fiind:

 6569 ?        SNs    0:00 /usr/sbin/apache2 -k start
6573 ?        SN     0:00 /usr/sbin/apache2 -k start
6574 ?        SN     0:00 /usr/sbin/apache2 -k start
6575 ?        SN     0:00 /usr/sbin/apache2 -k start
6576 ?        SN     0:00 /usr/sbin/apache2 -k start
6577 ?        SN     0:00 /usr/sbin/apache2 -k start

În exemplul de mai sus procesul cu PID-ul 6569 este procesul principal (master), restul proceselor fiind copii creaţi de procesul principal.
Pentru omorârea unui proces se foloseşte comanda “kill”, ce transmite un semnal de oprire procesului:

kill 6569

Dacă procesul este capabil să răspundă la semnalul “kill”, atunci oprirea va fi facută de proces, nu de sistem. Şi procesele copil vor fi automat oprite, şi fără pierderi de date. Însă există situaţia în care procesul s-a blocat şi vrei să forţezi oprirea sa, comanda fiind astfel:

kill -9 6569

Die mother f*cker

Dacă ai vreun program ce rulează sub Wine (ex. Microsoft Office) şi vrei satisfacţie maximă când îl omori, poţi folosi psDoom, un progrămel bazat pe motorul jocului Doom creat de id Software :)

ss2.gif

Posted in linux, tips&tricks, unix | 2 Comments »