“Process locking” folosind PHP / *nix

< ?php
$fh = fopen(dirname(__FILE__).DIRECTORY_SEPARATOR.'.lock', 'w+');
 
if (flock($fh, LOCK_EX | LOCK_NB) === TRUE)
{
	// Functional code
	$exit = FALSE;
	while($exit === FALSE)
	{
		$exit = TRUE;
		sleep(10);
	}
	// End Functional code
	flock($fh, LOCK_UN);
}
else
{
	echo "This script is locked by another process.\n";
}
 
fclose($fh);

Instalarea unui filtru CPL pe Vico TF2+ – partea a II-a

Ventuzele de Vico TF2+ sunt o pacoste. Cea originală a fost aproape inutilizabilă. A căzut camera din parbriz din prima zi. Răzvan mi-a trimis altă ventuză, dar din păcate a început și asta să dea semne de oboseală. Măcar asta nu mai cade dacă este împinsă cu ceva mai multă forță.

Conform ideei de mai sus, ieri a căzut din nou. Problema a fost modul în care s-a lovit de consola centrală. Inițial am crezut că mi-am luat rămas bun de la filtru la cum s-a auzit lovitura. Din fericire, a fost doar decizia unilaterală a inelului de a se separa de quickmount.

Mult lăudatul adeziv din păcate nu face priză optimă pe plasticul din care este format quickmount-ul cu toate că a fost șlefuită suprafața. Adezivii specializați pe mase plastice am văzut că au un efect de topire a suprafeței plasticului. Acest tip de adeziv universal pe bază de rășini epoxi nu are acest efect.

Deci am trecut la planul secundar. De fapt, asta a fost ideea inițială dar am renunțat la ea din motive obiective. Am dat două găuri cu burgiu de 2.5 mm în inel, după care două găuri cu burghiu de 1.5 mm în quickmount. Adică am făcut loc pentru holșurub. Plasticul este rigid iar tensiunile cauzate de șurub ar putea să-l rupă. Decizia a fost corectă, dar datul găurilor cu burgiu de 1.5 mm mereu a fost sport unde n-ai voie nici să te bășești dacă vrei să scapi cu burgiul întreg.

Am ales două holșuruburi mici cu pas de 2 mm și cu cap mic pentru a lăsa loc filetului de pe filtru. Din păcate, inelul nu mai este fixat la fel de bine datorită punctelor de prindere care flexează ușor metalul. Dacă sunt strânse prea mult, se deformează filetul, deci filtrul are joc. Dacă sunt strânse prea puțin, joacă inelul cu totul. Reglajul fin nu funcționează. Suprafața quickmount-ului nu este plană și ar fi dificil să produc o astfel de transformare fără să slăbesc simțitor rezistența suportului. Am menționat de motive obiective pentru a apela la adeziv.

Poză, din păcate, am făcut doar cu telefonu.

lightbox-holsurubur-quickmount

Deși par puse strâmb, șuruburile au fost fixate pe axa centrală.

În concluzie: soluția următoare este să fac un mix dintre cele două. Anume: adeziv pentru fixare, șuruburi pentru a fixa bine inelul și reducerea marginii lăsate pe inel pentru fixare în interiorul suportului.

Instalarea unui filtru CPL pe Vico TF2+

M-am uitat cu jind preț de câteva minute la noua serie Marcus de la Vicovation. După care am cântărit modul în care filmează și am ajuns la concluzia că partea care-mi lipsește cel mai mult este absența suportului pentru montarea unui filtru CPL.

După ce am studiat vreo câteva tutoriale de pe DashCamTalk Forums, am ajuns la concluzia că ideea folosită de Marcus cu filtrul montat pe quickmount este viabilă și pentru TF2+. Ideea este aplicabilă și pentru celelalte camere din serie care au aceleași dimensiuni și accesorii.

Am pus pe lista de cumpărături:

  • Inel de reducție Cokin, 52 – 43 mm ~ 20 lei
  • Filtru CPL Hoya – slim mount, 52 mm ~ 100 lei
Inelul de reducție

Inelul cumpărat mi-a confirmat faptul că am făcut corect măsurătorile. Este metalic, deci nu există riscul să fie stricat de filetul de pe filtru. A putut fi dus la dimensiunea dorită destul de ușor.

Dimensiunea inferioară de 43 mm cade bine peste gura suportului de quickmount al lui Vico TF2+. Filetul acestuia, este totuși prea înalt pentru o prindere directă de suport. Cei de pe DashCamTalk am văzut că preferă prinderea folosind bandă dublu-adezivă. Eu am mers pe o soluție mai voinicească.

Inel de reducție prelucrat

Am șlefuit aproape tot filetul de 43 mm al inelului de reducție. A mai rămas din el în jur de 0.5 – 0.6 mm pentru a-i oferi o oarecare prindere în gura suportului. Scutește de efortul de a centra inelul pe când se aplică adezivul.

Am folosit șmirghel cu granulație de 120. De acesta aveam la îndemână. După care am folosit șmirghel cu granulație de 50 pentru a finisa procesul.

Potrivire inel prelucrat

Precum se observă în imaginea alăturată, inelul se potrivește bine în gura suportului. A urmat pregătirea pentru aplicarea adezivului. Inelul și suportul au fost spălate sub jet de apă pentru a înlătura resturile rezultate în urma prelucrării inelului de reducție. După care le-am uscat cu uscătorul de păr.

Conform recomandărilor din instrucțiunile tuburilor de adeziv, suprafețele care au urmat a fi lipte au fost șlefuite ușor. Adică marginea suportului quickmount și baza inelului de reducție. A urmat curățarea suprafețelor. Producătorul adezivului recomandă acetona sau un produs propriu.

A urmat amestecarea adezivului, pe bază de rășini epoxi, folosind tăvița și spatula furnizate în pachet. Cantitatea folosită a fost în jurul dimensiunii unui bob de fasole mic. Chiar și așa, a rămas puțin adeziv nefolosit în tăviță. Am aplicat un strat destul de subțire, pe cât mi-a permis vâscozitatea amestecului.

Timpul în care poate fi prelucrat este de aproximativ 2h. Are un timp de uscare la 20oC între 6 – 8h. Eu l-am ținut timp de 11h sub o greutate ușoară. Dimineața suportul era bun de utilizat. Timpul de uscare completă a adezivului este 24h.

Adezivul folosit este Bison Epoxy Universal. Nu este pe lista de cumpărături pentru că-l aveam achiziționat anterior. Se găsește la un preț începând de pe la 14 lei până pe la 20, în funcție de comerciant. În mod normal asemenea adeziv intră în categoria “overkill” pentru fixarea unui inel de reducție din moment ce rezistă până la 170 kg/cm2. Dar faptul că TF2+ este certificată pentru operarea la 75oC recomandă și un adeziv pe măsură care are specificat ca maxim 80oC.

Atașez și restul de imagini cu rezultatul final.

Adeziv
Rezultatul final
Rezultatul final cu filtrul montat
Montaj final 1
Montaj final 2
Montaj final 3

PS: am observat faptul că reglajul cel mai bun privind filtrarea reflexiior este acolo unde săgeata de pe inel și triunghiul de pe filtru se întâlnesc. Se observă în ultima imagine.

Romanian Programmers pentru OS X (modificat)

Precum se poate observa cu ochiul liber, prefer scrierea cu diacritice. Chiar dacă le consider un moft din partea limbii române, și la o adică, ne-am fi putut descurca și fără ele dacă istoria s-ar fi scris altfel. Dar astea sunt standardele …

Folosirea Romanian Programmers este un obicei ce s-a împământenit de pe vremea lui Windows XP. După care a devenit layout standard în Windows Vista, 7, și un număr de distribuții de Linux pe care nu-l pot determina. Având în vedere că de prin 2007, Ubuntu a fost sistemul meu de operare de bază, iar sub Ubuntu Romanian Programmers este standard pentru limba română, folosirea layout-ului a continuat până în prezent.

Ei bine dragii moșului, recent m-am mutat înapoi pe OS X. Dar după ani de obișnuință, este greu să treci la scriere fără diacritice, sau pe tastatura “nativă” română care are o ciorbă de taste. Prima opțiune a fost să folosesc key mapping-ul de aici. Încă este puțin irintant faptul că acel command din dreapta e în loc de alt, iar din obișnuință mai dau command + q pe când încerc să scriu “â” și dispare aplicația. Din păcate, alt și command nu se pot inversa.

După care a urmat o perioadă de enervare cu decizia cretină a Apple de a pune o tastă complet inutilă în loc de backtick / tilda. Iar tasta respectivă și-a găsit locul între shift și z, loc complet ignorat de mine până în prezent, pentru că nu e nimic acolo.

Deci am pus mâna pe Ukelele și mi-am rezolvat problema. Am inversat mapping-ul la cele două, deci în sfârșit am backtick / tilda acolo unde le aștept să fie, mai ales pe când scriu în terminal. Din păcate, înlocuirea unui layout nu este atât de simplă pe cât mă așteptam. Soluția am găsit-o aici.

sudo rm /System/Library/Caches/com.apple.IntlDataCache*
sudo find /var/ -name "*IntlDataCache*" -exec rm {} \;

N-a fost nevoie de reboot. Doar de un logout + login.

Versiunea modificată pentru cei prea obișnuiți cu tasta respectivă în poziția corectă este pe GitHub.

EOF

MySQL Backup peste SSH

Update (1 Martie 2011):

  • Suport pentru a specifica un MySQL host. E musai să fie definit minim cu “localhost” pentru o conexiune locală. Va folosi UNIX socket. Pentru TCP socket, se folosește 127.0.0.1 ca adresă.
  • Suport pentru compresie la nivel de protocol SSH. Mă gândeam la asta, dar am activat-o doar pentru MySQL – chestie destul de inutilă pentru o conexiune locală prin UNIX socket. Acum, cu suport pentru host extern, își are rostul.
  • Schimbat criptarea în blowfish-cbc ce este semnificativ mai rapidă pentru SSH.

Backup-ul – un rău necesar. Existența unui server cu skip-networking complică problema. Dar nu o face imposibilă. SSH știe să returneze chestii peste STDOUT. Iar un script pus în cron face ca această pacoste să intre în categoria “set it and forget it”.

Iar dacă tot am vorbit de un script, acesta este:

#!/bin/bash
 
# EDIT
MY_USER=""
MY_PASS=""
MY_HOST="localhost"
SSH_USER=""
SSH_HOST=""
SSH_PORT=""
# END EDIT
 
CDIR=$(dirname $0)
PKEY=$CDIR/private-key.pem
DUMP=$CDIR/dump
DATE=$(date +%F+%H-%M-%S)
 
if [ ! -f $PKEY ]
then
        echo "Error: The SSH private key file is missing!"
        exit 1
fi
 
if [ ! -d $DUMP ]
then
        mkdir $DUMP
fi
 
echo "Fetching the databases ..."
database=($(ssh -C -c blowfish-cbc -i $PKEY -p $SSH_PORT $SSH_USER@$SSH_HOST mysql -C -h$MY_HOST -u$MY_USER -p$MY_PASS -e '"SHOW DATABASES;"'))
count=${#database[@]}
for ((i=1; i<count ; i++))
do
        if [ "${database[$i]}" != "mysql" -a "${database[$i]}" != "information_schema"  ]
        then
                echo "Dumping ${database[$i]} ..."
                ssh -C -c blowfish-cbc -i $PKEY -p $SSH_PORT $SSH_USER@$SSH_HOST mysqldump -v -C -h$MY_HOST -u$MY_USER -p$MY_PASS -x -B ${database[$i]} | nice -n 19 pbzip2 -c > $DUMP/${database[$i]}-$DATE.sql.bz2
        fi
done
 
</count>

Are 5 opțiuni de configurare, destul de evidente. Caută private-key.pem în directorul în care se află – unde private-key.pem este cheia ce face posibilă comunicarea peste SSH fără a folosi autentificare cu parolă. Iar din moment ce se folosește rețeaua, atât mysql cât și mysqldump folosesc protocol compression (flag-ul -C). Dependințele sunt evidente la o primă citire. Nu este cel mai eficient mod de a face backup (rețea, spațiu), dar este simplu de implementat iar câteodată aceasta contează. Ignoră bazele de date mysql și information_schema. A se ignora ultimul tag a-la HTML din blocul de cod de mai sus. GeSHi face fițe.