<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>printf(&#34; SaltwaterC &#34;); &#187; Linux</title>
	<atom:link href="http://www.saltwaterc.net/category/linux/feed" rel="self" type="application/rss+xml" />
	<link>http://www.saltwaterc.net</link>
	<description>Developer blog</description>
	<lastBuildDate>Mon, 09 Aug 2010 15:47:33 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
			<item>
		<title>Parole aleatoare în Linux, &#8220;extended ASCII&#8221;</title>
		<link>http://www.saltwaterc.net/linux/parole-aleatoare-in-linux-extended-ascii.html</link>
		<comments>http://www.saltwaterc.net/linux/parole-aleatoare-in-linux-extended-ascii.html#comments</comments>
		<pubDate>Mon, 09 Aug 2010 14:57:41 +0000</pubDate>
		<dc:creator>SaltwaterC</dc:creator>
				<category><![CDATA[Administrare]]></category>
		<category><![CDATA[Linux]]></category>
		<category><![CDATA[Programare]]></category>

		<guid isPermaLink="false">http://www.saltwaterc.net/?p=819</guid>
		<description><![CDATA[Deși în teorie problema din titlu este una rezolvată, în practică de multe ori mi-am dorit o parolă de o complexitate mai mare față de ce-mi oferă majoritatea uneltelor ce nu ies din standard ASCII. Prin metoda subsemnatului, se ia următoarea funcție și se trântește în .bashrc: function urandompass&#40;&#41; &#123; cat /dev/urandom &#124; tr -dc [...]]]></description>
			<content:encoded><![CDATA[<p>Deși în teorie problema din titlu este una rezolvată, în practică de multe ori mi-am dorit o parolă de o complexitate mai mare față de ce-mi oferă majoritatea uneltelor ce nu ies din standard ASCII. Prin metoda subsemnatului, se ia următoarea funcție și se trântește în .bashrc:</p>

<div class="wp_syntax"><div class="code"><pre class="bash" style="font-family:monospace;"><span style="color: #000000; font-weight: bold;">function</span> urandompass<span style="color: #7a0874; font-weight: bold;">&#40;</span><span style="color: #7a0874; font-weight: bold;">&#41;</span>
<span style="color: #7a0874; font-weight: bold;">&#123;</span>
	<span style="color: #c20cb9; font-weight: bold;">cat</span> <span style="color: #000000; font-weight: bold;">/</span>dev<span style="color: #000000; font-weight: bold;">/</span>urandom <span style="color: #000000; font-weight: bold;">|</span> <span style="color: #c20cb9; font-weight: bold;">tr</span> <span style="color: #660033;">-dc</span> <span style="color: #ff0000;">'[\41-\176\241-\254\256-\376]'</span> <span style="color: #000000; font-weight: bold;">|</span> fold <span style="color: #660033;">-w</span> $<span style="color: #000000;">1</span> <span style="color: #000000; font-weight: bold;">|</span> <span style="color: #c20cb9; font-weight: bold;">head</span> <span style="color: #660033;">-n</span> <span style="color: #000000;">1</span>
<span style="color: #7a0874; font-weight: bold;">&#125;</span></pre></div></div>

<p>Apelul este cretin de simplu: urandompass 12 va genera o parolă de 12 caractere. Sau cheie, am zis-o și pe asta. Funcția poate fi folosită pentru a genera chei pentru un &#8220;block cipher&#8221;.</p>
<p>Cu toate acestea, pentru cei cu terminalul setat pe UTF-8, caracterele dincolo de range-ul celui de-al 7-lea bit (aka cele ce intră în extended ASCII) nu vor fi printate corect. Teoria spune faptul că UTF-8 este compatibil doar cu setul ASCII, ăla standard. În prealabil este nevoie să se seteze terminalul pe un char encoding single-byte ce implementează vreo formă de extended ASCII gen ISO-8859-x, unde x = 1 este Western, x = 2 = Central European, etc. Personal prefer Western. Pentru cei cu Gnome Terminal, &#8220;Terminal » Set Character Encoding » Add or Remove &#8230;&#8221; dacă e pentru prima dată, dacă nu, atunci ar trebui să poată fi ales din meniu un encoding diferit de cel implicit. Buba este faptul că Gnome Terminal are memorie destul de proastă deci va da reset la UTF-8 dacă terminalul este închis sau se execută reset, deci operația trebuie repetată înainte de a genera orice parolă / cheie.</p>
<p>Acum urmează partea pentru obsedații de detalii aka cei după chipul și asemănarea subsemnatului. &#8220;Limitarea&#8221; la extended ASCII, ce oricum oferă o complexitate mai bună decât majoritatea generatoarelor, provine de fapt din tr. Un info coreutils &#8216;tr invocation&#8217; în shell specifică destul de clar: &#8220;Currently `tr&#8217; fully supports only single-byte characters.&#8221;, deci suportă multi-byte din jumătatea lui cinci. Pentru amatorii de detalii, acele range-uri din funcția mea au fost documentate, oarecum, în prealabil.</p>
<p>În DEC:</p>
<p>33-126<br />
161-172<br />
174-254</p>
<p>În OCT:</p>
<p>41-176<br />
241-254<br />
256-376</p>
<p>Evident, cu ochiul liber se poate vedea că tr primește octal, precum zice manualul. Pentru a le determina am încercat cu encoding ISO-8859-1 și ISO-8859-2 o aplicație ce printează tot range-ul single-byte (mă rog, fără ultimul caracter).</p>
<p>Pentru PHP-iști:</p>

<div class="wp_syntax"><div class="code"><pre class="php" style="font-family:monospace;"><span style="color: #b1b100;">for</span> <span style="color: #009900;">&#40;</span><span style="color: #000088;">$i</span> <span style="color: #339933;">=</span> <span style="color: #cc66cc;">0</span><span style="color: #339933;">;</span> <span style="color: #000088;">$i</span> <span style="color: #339933;">&lt;</span> <span style="color: #cc66cc;">256</span><span style="color: #339933;">;</span> <span style="color: #000088;">$i</span><span style="color: #339933;">++</span><span style="color: #009900;">&#41;</span>
<span style="color: #009900;">&#123;</span>
	<span style="color: #b1b100;">echo</span> <span style="color: #000088;">$i</span><span style="color: #339933;">.</span><span style="color: #0000ff;">': '</span><span style="color: #339933;">.</span><span style="color: #990000;">chr</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$i</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">.</span><span style="color: #0000ff;">&quot;<span style="color: #000099; font-weight: bold;">\n</span>&quot;</span><span style="color: #339933;">;</span>
<span style="color: #009900;">&#125;</span></pre></div></div>

<p>Iar pentru snobii cu C, avem alternativă <img src='http://www.saltwaterc.net/wp-includes/images/smilies/icon_biggrin.gif' alt=':D' class='wp-smiley' />  :</p>
</pre>

<div class="wp_syntax"><div class="code"><pre class="c" style="font-family:monospace;"><span style="color: #339933;">#include </span>
&nbsp;
<span style="color: #993333;">int</span> main<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span>
<span style="color: #009900;">&#123;</span>
        <span style="color: #b1b100;">for</span> <span style="color: #009900;">&#40;</span><span style="color: #993333;">int</span> i <span style="color: #339933;">=</span> <span style="color: #0000dd;">0</span><span style="color: #339933;">;</span> i <span style="color: #339933;">&lt;</span> <span style="color: #0000dd;">256</span><span style="color: #339933;">;</span> i<span style="color: #339933;">++</span><span style="color: #009900;">&#41;</span>
        <span style="color: #009900;">&#123;</span>
                <span style="color: #000066;">printf</span><span style="color: #009900;">&#40;</span><span style="color: #ff0000;">&quot;%d: %c<span style="color: #000099; font-weight: bold;">\n</span>&quot;</span><span style="color: #339933;">,</span> i<span style="color: #339933;">,</span> i<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
        <span style="color: #009900;">&#125;</span>
        <span style="color: #b1b100;">return</span> <span style="color: #0000dd;">0</span><span style="color: #339933;">;</span>
<span style="color: #009900;">&#125;</span></pre></div></div>

<p>gcc -std=c99 -o chars chars.c</p>
<p>Inițial m-am inspirtat dintr-o versiune *sh de pe linuxquestions.org, dar arată cretin, nu dau paste la așa ceva. Mă cam strânge octalul de dinți. O versiune rescrisă pentru DEC junkies:
</pre>

<div class="wp_syntax"><div class="code"><pre class="bash" style="font-family:monospace;"><span style="color: #666666; font-style: italic;">#!/bin/bash</span>
&nbsp;
chr<span style="color: #7a0874; font-weight: bold;">&#40;</span><span style="color: #7a0874; font-weight: bold;">&#41;</span>
<span style="color: #7a0874; font-weight: bold;">&#123;</span>
	<span style="color: #7a0874; font-weight: bold;">printf</span> \\$<span style="color: #7a0874; font-weight: bold;">&#40;</span><span style="color: #7a0874; font-weight: bold;">printf</span> <span style="color: #ff0000;">'%03o'</span> $<span style="color: #000000;">1</span><span style="color: #7a0874; font-weight: bold;">&#41;</span>
<span style="color: #7a0874; font-weight: bold;">&#125;</span>
&nbsp;
<span style="color: #007800;">i</span>=<span style="color: #000000;">0</span>
<span style="color: #000000; font-weight: bold;">while</span> <span style="color: #7a0874; font-weight: bold;">&#91;</span> <span style="color: #007800;">$i</span> <span style="color: #660033;">-lt</span> <span style="color: #000000;">256</span> <span style="color: #7a0874; font-weight: bold;">&#93;</span>; <span style="color: #000000; font-weight: bold;">do</span>
	<span style="color: #7a0874; font-weight: bold;">echo</span> <span style="color: #ff0000;">&quot;<span style="color: #007800;">$i</span>: <span style="color: #780078;">`chr $i`</span>&quot;</span>
	<span style="color: #7a0874; font-weight: bold;">let</span> <span style="color: #ff0000;">&quot;i++&quot;</span>
<span style="color: #000000; font-weight: bold;">done</span></pre></div></div>

<p>Pentru cei ce preferă alte encoding-uri single-byte, dacă range-urile de mai sus nu sunt potrivite, atunci se poate rula oricând vreo aplicație de mai sus pentru a face un test de char printing.</p>
<p>Pentru cei ce nu s-au născut cu "DEC to OCT converter" în cap, așa ca subsemnatul, Calculator din Gnome (gcalctool) are și un mod Programming (Ctrl+P).</p>
<p><a class="a2a_dd addtoany_share_save" href="http://www.addtoany.com/share_save"><img src="http://www.saltwaterc.net/wp-content/plugins/add-to-any/share_save_171_16.png" width="171" height="16" alt="Share/Bookmark"/></a> </p>]]></content:encoded>
			<wfw:commentRss>http://www.saltwaterc.net/linux/parole-aleatoare-in-linux-extended-ascii.html/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>SopCast sub Linux</title>
		<link>http://www.saltwaterc.net/linux/sopcast-sub-linux.html</link>
		<comments>http://www.saltwaterc.net/linux/sopcast-sub-linux.html#comments</comments>
		<pubDate>Wed, 02 Jun 2010 21:30:05 +0000</pubDate>
		<dc:creator>SaltwaterC</dc:creator>
				<category><![CDATA[Linux]]></category>

		<guid isPermaLink="false">http://www.saltwaterc.net/?p=794</guid>
		<description><![CDATA[Probabil că te întrebi ce e ăla SopCast. Pe scurt, este un protocol de TV streaming, bazat pe un protocol de tip P2P, sop. Problema cea mai mare sub Linux sunt acei incompetenți proprietari de site-uri ce oferă suport pentru acest protocol doar folosind versiunea de Windows pentru SopCast, sau alte chestii plus WMP. Și [...]]]></description>
			<content:encoded><![CDATA[<p>Probabil că te întrebi ce e ăla <a title="SopCast" href="http://www.sopcast.com/" target="_blank">SopCast</a>. Pe scurt, este un protocol de TV streaming, bazat pe un protocol de tip P2P, sop. Problema cea mai mare sub Linux sunt acei incompetenți proprietari de site-uri ce oferă suport pentru acest protocol doar folosind versiunea de Windows pentru SopCast, sau alte chestii plus WMP. Și doar IE, majoritatea cer exclusiv IE, deși s-a făcut și o extensie de Firefox pentru a putea viziona un stream sop și fără a folosi IE direct de pe web.</p>
<p>Acum poate cei ce mă cunosc suficient de bine ar remarca faptul că eu nu mă mai uit la televizor de ani de zile, iar acest interes pentru sop nu este unul menit să rupă acest șir magic. Singura excepție sunt cursele de Formula 1. Aș prefera transmisiunea BBC, dar în lipsa lor, merge și TVR 1, cu toate că Miki și gașca mă chinuie de opt ani și ceva cu comentariul imbecil. Din moment ce obligat &#8211; forțat trebuie să le plătesc abonament ăstora de la Televizunea Națională, măcar de atâta să mă bucur.</p>
<p>Ceea ce incompetenții de mai sus cu site-urile lor au transformat în &#8220;Rocket Science&#8221; prin soluții tehnice legate de o platformă, transform eu acum într-o chestie cretin de simplă, dar pentru care a trebuit să dau din taste vreo 30 minute până să găsesc această rezolvare. Adresa stream-ului TVR 1 este:</p>
<blockquote><p><a href="sop://broker.sopcast.com:3912/60707">sop://broker.sopcast.com:3912/60707</a></p></blockquote>
<p>Aceasta se ia frumos și se pune în SopCast player. Chestie ce prezintă și versiune de Linux. Sub Ubuntu este chiar simplu de instalat din moment ce prezintă repository PPA, ceea ce reduce problema la:</p>
<blockquote><p>sudo apt-add-repository ppa:jason-scheunemann/ppa</p></blockquote>
<p>Se instalează pachetul sopcast-player și voila, gata de F1.</p>
<p>Din câte am observat, cară după el și ceva dependințe VLC (plus VLC cu totul). TVR 1 nu este de găsit în &#8220;Channel Guide&#8221;, dar cu adresa de mai sus este posibilă vizionarea stream-ului TVR 1. Dacă se înregistrează protocolul sop în browser, link-ul de mai sus poate fi deschis direct cu sopcast-player din moment ce aplicația primește link de stream ca argument. Are funcție de bookmark pentru cei ce preferă să nu facă muncă repetitivă, recte subsemnatul.</p>
<p>PS: în general, durează câteva secunde până stream-ul devine &#8220;văzubil&#8221;, până se curăță artefactele.</p>
<p><a class="a2a_dd addtoany_share_save" href="http://www.addtoany.com/share_save"><img src="http://www.saltwaterc.net/wp-content/plugins/add-to-any/share_save_171_16.png" width="171" height="16" alt="Share/Bookmark"/></a> </p>]]></content:encoded>
			<wfw:commentRss>http://www.saltwaterc.net/linux/sopcast-sub-linux.html/feed</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>G-WAN &#8211; acceleratorul de web</title>
		<link>http://www.saltwaterc.net/linux/g-wan-acceleratorul-de-web.html</link>
		<comments>http://www.saltwaterc.net/linux/g-wan-acceleratorul-de-web.html#comments</comments>
		<pubDate>Mon, 31 May 2010 14:18:11 +0000</pubDate>
		<dc:creator>SaltwaterC</dc:creator>
				<category><![CDATA[Administrare]]></category>
		<category><![CDATA[Linux]]></category>
		<category><![CDATA[Programare]]></category>

		<guid isPermaLink="false">http://www.saltwaterc.net/?p=791</guid>
		<description><![CDATA[Deși titlul pare forțat, proiectul pomenit acolo are un potențial mare atâta timp cât este utilizat cum trebuie. Singurele probleme sunt toate aceste primadone, așa zișii programatori auto-proclamați, ce maxim au idee despre despre ceva scripting într-un limbaj cu tipuri dinamice de date, dar în momentul în care vine vorba de muncă adevărată sau a [...]]]></description>
			<content:encoded><![CDATA[<p>Deși titlul pare forțat, proiectul pomenit acolo are un potențial mare atâta timp cât este utilizat cum trebuie. Singurele probleme sunt toate aceste primadone, așa zișii programatori auto-proclamați, ce maxim au idee despre despre ceva scripting într-un limbaj cu tipuri dinamice de date, dar în momentul în care vine vorba de muncă adevărată sau a proiecta un algoritm, dispar. Nu susțin faptul că sunt marele guru ce s-a născut cu tastatura în mână, nu sunt fluent în ANSI C, căci despre acesta este vorba, dar (pe testate) am putut observa potențialul unei astfel de soluții. Deci se adresează programatorilor. Programatorilor ce nu se ascund de pointeri (pe care, recunosc, încă nu-i stăpânesc), programatorilor ce au idee despre cum funcționează platforma pe care rulează aplicația și nu se ascund sub încă un nivel de abstractizare [insert smart-ass name here], etc. Din această categorie recomand &#8220;<a title="What every programmer should know about memory" href="https://lwn.net/Articles/250967/" target="_blank">What every programmer should know about memory</a>&#8220;, chestie pe care vreau să o parcurg pe îndelete pe când voi avea timp.</p>
<p>Deci ce este acest <a title="G-WAN is a FREE Web App. server using full ANSI C scripts" href="http://trustleap.com/" target="_blank">G-WAN</a>? Pe scurt, în cele aproximativ 120 kile de binar se găsește un web server brutal de rapid și un început de application server, practic suport pentru servlet-uri scrise în ANSI C, compilate dinamic, după metoda edit &amp; play folosită de PHP-iști. Și evident, caching, acea sperietoare de &#8220;web developers&#8221;, altfel nu ar fi fost chiar atât de rapide.</p>
<p>Am urmărit îndeaproape proiectul de pe la v1.0.3 deoarece mi s-a părut interesantă prezentarea, dar fără aplicabilitate momentană &#8220;in real life&#8221;. Între timp aplicatia a mai crescut în valoare, iar platforma s-a modificat din Windows (la acea dată) în Linux. Autorul se săturase de limitările din kernelul Windows, limitări ce se găsesc și în kernelul Linux, dar sunt mai sus.</p>
<p>Nu vorbesc din citatele autorului G-WAN despre aceste limitări. Le-am testat pe propria piele. Fie că am executat fractalul lui Mandelbrot (servletul fractal.c disponibil în arhiva de distribuție), fie că am executat problema <a title="I can has Makavelis numbers" href="http://www.saltwaterc.net/programare/i-can-has-makavelis-numbers.html" target="_blank">despre care vorbeam aici</a>, atât implementarea brută cât și cea eficientă, pe un quad-core (C2Q Q9400) și Apache Bench pe localhost am stat în jurul valorii de 69000 req/s. Da, vorbesc de o aplicație, unde fractalul este cu ordin de complexitate mare comparat cu problema numerelor. Dar cu toate acestea, throughput-ul servlet-urilor a fost apropiat ca valoare. Deci există o limitare, dincolo de eficiența algoritmului și a puterii de procesare necesare.</p>
<p>Printre altele, nu a fost nici o limitare de lățime de bandă. Rulând teste de conținut static, am obținut aproximativ 1.2 GiB/s la o concurență suficient de mare, înainte ca ab să înceapă să dea timeout-uri și erori de conectare. Da, 1.2 GiB/s prin interfața de loopback. Aici se adaugă doar efortul de encapsulare, decapsulare și fragmentare a pachetelor din moment ce MTU este mare comparat cu o &#8220;rețea normală&#8221;, dar totuși cu o valoare implicită de 16436 pe care nu am încercat să o mânăresc și nici nu știu să fi mânărit vreodată prin setările de la lo. Testele dinamice nu se apropiau de această lățime de bandă, de altfel, conținutul static la 1.2 GiB/s abia urca pe la 20000 req/s, deci o limitare de bandă era mult mai evidentă în cazul acestui tip de conținut, față de un servlet.</p>
<p>Singura problemă ce am observat-o a fost una de scalabilitate pe mai mult de două nuclee de procesor. G-WAN lansează un număr de thread-uri egal cu numărul de nuclee, dar din cele 4 pe care le-a lansat, doar primul și ultimul încărcau procesorul în timp ce 2 și 3 frecau menta în idle. Cel puțin așa raportează htop pus în modul threaded la listarea proceselor din sistem.</p>
<p>De altfel, la capitolul conținut static nu am observat o viteză mărită cu ordine de magnitudine față de <a title="nginx" href="http://nginx.org/" target="_blank">nginx</a>, ci doar o viteză de ordinul procentelor mai mare, dar totuși vizibilă. La capitolul aplicații dinamice este zona unde strălucește, deși încă mai are puțin până în zona &#8220;production ready&#8221;, în sensul că momentan lipsesc două chestii mari și late. Prima chestie este renunțarea la privilegiile elevate dacă rulează ca network daemon, unde pentru a folosi portul 80 este nevoie de privilegii de superuser &#8211; sau să se apeleze la hack-uri precum NAT prerouting în iptables ori *inetd &#8211; nerecomandate. A doua chestie este suportul pentru reverse proxy. Din moment ce codul existent nu se transformă peste noapte în ANSI C, eventual ANSI C optimizat la sânge, G-WAN va putea fi folosit, cândva, pe post de frontent web server într-o arhitectură multi-tier.</p>
<p>Configurația este &#8230; ce configurație? De fapt până și pentru virtual hosting se folosește un sistem de &#8220;convention over configuration&#8221; ce simplifică la maxim treaba, ceea ce face web serverul foarte sysadmin friendly. Singurele chestii mai sofisticate sunt maitenance script-ul și acele handlers, chestii ce necesită cunoștinte de ANSI C înainte de a te apuca să le folosești. Cam toate chestiile minime în accepțiunea unui web server modern sunt acolo inclusiv gzip, activat automat în funcție de tipul de conținut. Restul &#8230; sunt specificații, mai mult sau mai puțin interesante.</p>
<p><strong>Update:</strong> săpând puțin prin web, am dat de <a title="CTPP" href="http://ctpp.havoc.ru/en/" target="_blank">CTPP</a> ce se laudă că are interfață pentru C, chestie ce ar putea satisface nevoile de template engine. Încă nu am renunțat la gândul de a încerca o chestie implementată sub formă de bibliotecă/biblioteci compilate din moment ce acea compilare dinamică nu are suport de optimizare de aia șmecheră cum are gcc, MongoDB sau ceva asemănător pentru persistență și un servlet pe post de front controller.</p>
<p><a class="a2a_dd addtoany_share_save" href="http://www.addtoany.com/share_save"><img src="http://www.saltwaterc.net/wp-content/plugins/add-to-any/share_save_171_16.png" width="171" height="16" alt="Share/Bookmark"/></a> </p>]]></content:encoded>
			<wfw:commentRss>http://www.saltwaterc.net/linux/g-wan-acceleratorul-de-web.html/feed</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Apache 2+mod_fcgid &#8211; setup rapid pentru test/dezvoltare</title>
		<link>http://www.saltwaterc.net/linux/apache-2-mod-fcgid-setup-rapid-pentru-test-dezvoltare.html</link>
		<comments>http://www.saltwaterc.net/linux/apache-2-mod-fcgid-setup-rapid-pentru-test-dezvoltare.html#comments</comments>
		<pubDate>Tue, 25 May 2010 10:14:03 +0000</pubDate>
		<dc:creator>SaltwaterC</dc:creator>
				<category><![CDATA[Administrare]]></category>
		<category><![CDATA[Linux]]></category>

		<guid isPermaLink="false">http://www.saltwaterc.net/linux/apache-2-mod-fcgid-setup-rapid-pentru-test-dezvoltare.html</guid>
		<description><![CDATA[Apache 2 + mod_php, ceea ce în majoritatea cazurilor implică prefork MPM, este un setup cretin. Am spus-o, o mai spun și o susțin, cu toate că acest setup este implicit sub *nix. Dacă memoria este oarecum un lux, sau nu ai trecut deja pe un web server cu o arhitectură asincronă, atunci agonia cu [...]]]></description>
			<content:encoded><![CDATA[<p>Apache 2 + mod_php, ceea ce în majoritatea cazurilor implică prefork MPM, este un setup cretin. Am spus-o, o mai spun și o susțin, cu toate că acest setup este implicit sub *nix. Dacă memoria este oarecum un lux, sau nu ai trecut deja pe un web server cu o arhitectură asincronă, atunci agonia cu Apache se mai poate prelungi puțin, apelând la worker MPM + mod_fcgid + PHP rulat ca FastCGI. O să fac doar o scurtă mențiune despre faptul că arhitectura multiproces / multithread din punctul de vedere al scalabilității este moartă, oricât ai face &#8220;yet another Apache smart-ass tweak&#8221;. Problema nu este în viteza efectivă a soft-ului ci în arhitectura în sine. <a target="_blank" href="http://ha.ckers.org/slowloris/">Să mai zic ceva de Slowloris</a>?</p>
<p>Bun. Mi-am mai vărsat încă o dată anii de frustrare acumulați cu Apache, deci trebuie să pun și partea productivă în schemă. Sub Debian &amp; friends se rezolvă simplu cu un:</p>
<blockquote><p>apt-get -y install libapache2-mod-fcgid<br />a2dismod php5<br />a2enmod fcgid<br />/etc/init.d/apache2 force-reload<br />apt-get -y install php5-cgi</p></blockquote>
<p>Cam atât pe partea de instalare. Cei ce suferă cu RHEL/CentOS, pot apela cu încredere la EPEL. Sau să compileze din surse. Nu o să îmi vărs în acest articol frustrările acumulate cu tandemul de mai sus.</p>
<p>Pe partea de configurare, integrarea dintre Apache + mod_fcgid + php-cgi lipsește cu desăvârșire ceea ce poate să dezamăgească mulțimea &#8220;kewl, I just installd Lenux and PHP&#8221;. Dar nu e nici &#8220;rocket science&#8221;. Ca idee: nano /etc/apache2/mods-enabled/fcgid.conf iar pe post de conținut:</p>
<blockquote><p>&lt;IfModule mod_fcgid.c&gt;<br />&nbsp;&nbsp;&nbsp; AddHandler fcgid-script .fcgi .php<br />&nbsp;&nbsp;&nbsp; DefaultInitEnv PHPRC /etc/php5/cgi<br />&nbsp;&nbsp;&nbsp; DefaultInitEnv PHP_FCGI_MAX_REQUESTS 10000<br />&nbsp;&nbsp;&nbsp; MaxRequestsPerProcess 10000<br />&nbsp;&nbsp;&nbsp; MaxProcessCount 10<br />&nbsp;&nbsp;&nbsp; IPCCommTimeout 240<br />&nbsp;&nbsp;&nbsp; IdleTimeout 240<br />&nbsp;&nbsp;&nbsp; FCGIWrapper /usr/bin/php-cgi .php<br />&nbsp;&nbsp;&nbsp; AddType application/x-httpd-php .php<br />&lt;/IfModule&gt;</p></blockquote>
<p>Aceasta este sintaxa &#8220;sigură&#8221;, deși ultimele versiuni ale mod_fcgid includ o sintaxă nouă iar cea veche este marcată ca &#8220;deprecated&#8221;. Pentru cei cu Ubuntu 10.04 LTS sau o altă distribuție relativ nouă, sintaxa actualizată este următoarea:</p>
<blockquote><p>&lt;IfModule mod_fcgid.c&gt;<br />&nbsp;&nbsp;&nbsp; AddHandler fcgid-script .fcgi .php<br />&nbsp;&nbsp;&nbsp; FcgidInitialEnv PHPRC /etc/php5/cgi<br />&nbsp;&nbsp;&nbsp; FcgidInitialEnv PHP_FCGI_MAX_REQUESTS 10000<br />&nbsp;&nbsp;&nbsp; FcgidMaxRequestsPerProcess 10000<br />&nbsp;&nbsp;&nbsp; FcgidMaxProcesses 10<br />&nbsp;&nbsp;&nbsp; FcgidIOTimeout 240<br />&nbsp;&nbsp;&nbsp; FcgidIdleTimeout 240<br />&nbsp;&nbsp;&nbsp; FcgidWrapper /usr/bin/php-cgi .php<br />&nbsp;&nbsp;&nbsp; AddType application/x-httpd-php .php<br />&lt;/IfModule&gt;</p></blockquote>
<p>Atenție: nu va funcționa pe versiunile vechi de mod_fcgid!</p>
<p>Încă puțin și setup-ul este gata de bătaie. Mai trebuie adăugat un flag în Options pentru a permite execuția PHP-ului sub FastCGI, sau serverul va returna 403. Fie se adaugă pentru fiecare definiție &lt;Directory&gt; din virtual host (nu e nevoie pentru &lt;Directory /&gt; în anumite cazuri) sau din .htaccess. Teoretic Options, conform documentației, poate fi setat în context &lt;VirtualHost&gt;, dar practic existența unui &lt;Directory&gt; cu Options o invalidează. Se poate seta doar pentru &lt;Directory /&gt; dacă toate celelalte definiții &lt;Directory&gt; nu au directiva Options. Pe scurt: Options funcționează pe ideea de arbore, dacă un fiu folosește Options, nu se mai moștenește părintele. Alternativa simplă și fără bătaie de cap, repet, pentru test/dezvoltare, este .htaccess cu Options +ExecCGI. Sub Ubuntu Hardy Options ExecCGI a refuzat să funcționeze din .htaccess, deci e mai sigur să fie prefixat cu +. Am repetat ce am zis în titlu pentru simplul fapt că .htaccess în producție se pretează doar unui mediu partajat ce este vândut de către companiile de hosting. În rest e risc potențial de securitate, în special pentru cele auto-generate (+ implicații la nivel de permisiuni), și supra-încărcare inutilă a serverului din moment ce Apache este mai țăran din fire și nu este notificat de schimbarea fișierului ci îl citește la fiecare cerere. În plus, un setup de producție făcut după &#8220;manualul de securitate&#8221; presupune configurare per virtual host și suEXEC versus rularea sub userul web serverului și un singur Dumnezeu pentru toate fișierele.</p>
<p>Din punctul de vedere al eficienței, în idle (după restartul serviciului) cu setup-ul implicit sub Ubuntu Hardy:</p>
<blockquote><p>&lt;IfModule mpm_worker_module&gt;<br />&nbsp;&nbsp;&nbsp; StartServers&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 2<br />&nbsp;&nbsp;&nbsp; MaxClients&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 150<br />&nbsp;&nbsp;&nbsp; MinSpareThreads&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 25<br />&nbsp;&nbsp;&nbsp; MaxSpareThreads&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 75<br />&nbsp;&nbsp;&nbsp; ThreadsPerChild&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 25<br />&nbsp;&nbsp;&nbsp; MaxRequestsPerChild&nbsp;&nbsp; 0<br />&lt;/IfModule&gt;</p></blockquote>
<p>și un singur PHP upstream, am obținut un record de memory footprint pentru Apache 2: 18MiB.</p>
<p><a class="a2a_dd addtoany_share_save" href="http://www.addtoany.com/share_save"><img src="http://www.saltwaterc.net/wp-content/plugins/add-to-any/share_save_171_16.png" width="171" height="16" alt="Share/Bookmark"/></a> </p>]]></content:encoded>
			<wfw:commentRss>http://www.saltwaterc.net/linux/apache-2-mod-fcgid-setup-rapid-pentru-test-dezvoltare.html/feed</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Ubuntu și network management-ul</title>
		<link>http://www.saltwaterc.net/linux/ubuntu-si-network-management-ul.html</link>
		<comments>http://www.saltwaterc.net/linux/ubuntu-si-network-management-ul.html#comments</comments>
		<pubDate>Fri, 21 May 2010 11:33:08 +0000</pubDate>
		<dc:creator>SaltwaterC</dc:creator>
				<category><![CDATA[Linux]]></category>

		<guid isPermaLink="false">http://www.saltwaterc.net/linux/ubuntu-si-network-management-ul.html</guid>
		<description><![CDATA[De când mă știu Ubuntu (și distribuțiile ce vin cu Gnome în general) au un management de rețea de-a dreptul cretin în interfața grafică, iar Ubuntu 10.04 nu face excepție. Problema mea cea mai mare este conectivitatea wireless dacă folosesc un access point ce nu are suport pentru DHCP. Configurarea este de-a dreptul imposibilă, sau [...]]]></description>
			<content:encoded><![CDATA[<p>De când mă știu Ubuntu (și distribuțiile ce vin cu Gnome în general) au un management de rețea de-a dreptul cretin în interfața grafică, iar Ubuntu 10.04 nu face excepție. Problema mea cea mai mare este conectivitatea wireless dacă folosesc un access point ce nu are suport pentru DHCP. Configurarea este de-a dreptul imposibilă, sau are o metodă necunoscută mie, deși sub interfața aparent simplă, posibilitatea de a mă conecta cu o conexiune predefinită lipsește cu desăvârșire.</p>
<p>Din fericire nu sunt singurul nemulțumit de problemele inerente ale părții de network management din Gnome deci a apărut alternativa: <a target="_blank" href="http://wicd.sourceforge.net/">wicd</a>. wicd este acel network manager ce mi-a lipsit multă vreme și m-a forțat să dau cu shell-ul prin /etc/network/interfaces. Pentru rețeaua fixă pe lângă interfața intuitivă, oferă și posibilitatea de a salva profile de conectare, chestie ce m-ar ajuta foarte mult spre exemplu dacă m-aș plimba cu notebook-ul prin varii rețele fixe, fiecare cu particularități în configurare. Lucru acesta era realitate acum vreo 2 ani, momente în care era pacoste să-mi reconfigurez rețeaua fără un mic ajutor de la zeul shell script. Sub Windows foloseam (și încă mai este instalat) <a target="_blank" href="http://www.netsetman.com/index.php?s=nsm">NetSetMan</a>.</p>
<p>Pe partea de wireless oferă posibilitatea de a seta interfața de rețea în funcție de access point-urile găsite, inclusiv pentru cele ce folosesc SSID ascuns, recte cel al subsemnatului pe care wicd îl detectează. Iar această &#8220;posibilitate&#8221; se traduce printr-un buton lângă fiecare AP detectat, nu săpat prin meniuri cretine ce oricum nu oferă nici un rezultat. Singura lipsă ce i-am găsit-o a fost imposibilitatea de a putea opri interfața wireless (turn off radio). Din câte am înțeles această funcție nu face parte din obiectivul unui network manager sau acestui network manager în particular. Sunt unul dintre ghinioniștii căruia Ubuntu îi recunoaște toate combinațiile de taste, mai puțin Fn+F2 pentru a putea opri wireless-ul. Nu sunt nici unul dintre fericiții cu hardware switch pentru radio, gen noteook-ul lui frate-meo.</p>
<p>Încă o chestie ce mi-a plăcut extrem de mult a fost posibilitatea de a defini un profil de global DNS ce poate fi folosit de către orice conexiune. Acesta poate fi suprascris prin setările particulare ale unei conexiuni. Oricum, sunt utilizator de <a target="_blank" href="http://www.opendns.com/">OpenDNS</a> și <a target="_blank" href="http://code.google.com/speed/public-dns/">Google Public DNS</a> ca fallback, deci profilul global este un real ajutor. Singura limitare este posibilitatea de a defini (din GUI?) doar 3 servere DNS, iar explicația vine de la un comentariu lăsat de defunctul Gnome Network Manager ce menționa în /etc/resolv.conf faptul că anumite biblioteci de resolving nu suportă mai mult de 3 servere, deci ultima intrare s-ar putea să fie ignorată.</p>
<p>Pe total, s-a dovedit a fi o adiție foarte utilă notebook-ului meu, ceea ce înseamnă faptul că Windows XP va coexsita acolo doar din motive istorice.</p>
<p><a class="a2a_dd addtoany_share_save" href="http://www.addtoany.com/share_save"><img src="http://www.saltwaterc.net/wp-content/plugins/add-to-any/share_save_171_16.png" width="171" height="16" alt="Share/Bookmark"/></a> </p>]]></content:encoded>
			<wfw:commentRss>http://www.saltwaterc.net/linux/ubuntu-si-network-management-ul.html/feed</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Ubuntu 10.04 Lucid Lynx și OpenVZ</title>
		<link>http://www.saltwaterc.net/linux/ubuntu-10-04-lucid-lynx-si-openvz.html</link>
		<comments>http://www.saltwaterc.net/linux/ubuntu-10-04-lucid-lynx-si-openvz.html#comments</comments>
		<pubDate>Thu, 13 May 2010 06:30:13 +0000</pubDate>
		<dc:creator>SaltwaterC</dc:creator>
				<category><![CDATA[Linux]]></category>
		<category><![CDATA[Virtualizare]]></category>

		<guid isPermaLink="false">http://www.saltwaterc.net/?p=768</guid>
		<description><![CDATA[Vestea bună este faptul că a apărut Ubuntu 10.04. Vestea proastă este faptul că suportul pentru OpenVZ în kernel 2.6.32 a apărut prea târziu pentru a fi inclus în distribuție. Sunt conștient de faptul că LXC (Linux Containers) va fi următoarea tehnologie de virtualizare la nivel de sistem de operare. De fapt a fost adoptată [...]]]></description>
			<content:encoded><![CDATA[<p>Vestea bună este faptul că a apărut Ubuntu 10.04. Vestea proastă este faptul că suportul pentru <a href="http://community.livejournal.com/openvz/30998.html" target="_blank">OpenVZ în kernel 2.6.32</a> a apărut prea târziu pentru a fi inclus în distribuție. Sunt conștient de faptul că <a href="http://lxc.sourceforge.net/" target="_blank">LXC (Linux Containers)</a> va fi următoarea tehnologie de virtualizare la nivel de sistem de operare. De fapt a fost adoptată în mainline la nivel de kernel. Dar între timp OpenVZ a strâns o comunitate destul de mare și suficiente unelte de administrare pentru a nu îl face bun de aruncat la gunoi în secunda numărul doi. În plus, migrarea de la o tehnologie de virtualizare la alta nu se poate face imediat.</p>
<p>Probabil buba cea mai mare pe care o are (momentan?) Ubuntu 10.04 în ceea ce privește suportul pentru OpenVZ nu este faptul că (momentan?) nu poate fi folosit pe post de HN (Hardware Node), ci faptul că are probleme destul de mari în rularea ca guest. Abia acum am înțeles de ce <a href="http://pve.proxmox.com/wiki/Debian_Appliance_Builder" target="_blank">DAB (Debian Appliance Builder)</a> nu a venit cu suport pentru Ubuntu 9.10, iar acum pentru 10.04. Noul sistem de init, <a href="http://upstart.ubuntu.com/" target="_blank">upstart</a>, ce practic înlocuiește vechiul SysV init, nu se prea pupă cu OpenVZ, cel puțin nu implicit în unele pachete de servicii incluse în distribuție. Nu o să mai aduc aminte de clasica deja incompatibilitate între <a href="http://www.kernel.org/pub/linux/utils/kernel/hotplug/udev.html" target="_blank">udev</a> și OpenVZ.</p>
<p>Există mai sus vreo două întrebări din categoria &#8220;momentan&#8221;. Prima cel mai probabil va rămâne la stadiul de permanent. Din moment ce echipa din spatele Ubuntu adoptă LXC, eventualele bug-uri legate de OpenVZ vor intra în caregoria &#8220;won&#8217;t fix / invalid&#8221;, deci feedback-ul din partea comunității să se piardă. Sau să se ajungă la &#8220;by popular demand&#8221; &#8211; sper, deși slabe șanse. Cea de-a doua chestie în schimb se poate să fie rezolvabilă printr-un kernel comunitar ce să includă suport pentru OpenVZ (sper și pentru <a href="http://www.linux-kvm.org/page/Main_Page" target="_blank">KVM</a>). Între timp, Proxmox rulează și va adopta 2.6.32 și pentru OpenVZ. Momentan știe doar de KVM.</p>
<p>Ca regulă, cel mai probabil anumite servicii nu vor porni automat, la boot, fără a modifica scripturile de init, ce se găsesc în /etc/init nu în /etc/init.d (un upstart job din init.d este practic un symlink). Suport pentru SysV Init script încă mai este posibil dacă init-ul nu a fost convertit în upstart job din moment ce upstart a fost conceput cu gândul la &#8220;backward compatibility&#8221;. În ceea ce mă privește, cele mai problematice până acum au fost networking, ssh și mysql. Morala este: pentru a folosi Ubuntu 10.04 ca OpenVZ guest, este nevoie de pregătiri pentru doi termeni de bază: &#8220;hack&#8221; și &#8220;patch&#8221;. Cu toate acestea, consider că merită efortul. Lucid Lynx include suficiente soluții actualizate pentru a renunța la vechiul LTS, Ubuntu Hardy. Sau, de ce nu, la Debian Lenny.</p>
<p>Pentru că nu dețin toate informațiile, dau următoarele link-uri de unde mă inspir și eu:<br />
<a href="http://blog.bodhizazen.net/linux/ubuntu-10-04-openvz-templates/" target="_blank">Ubuntu 10.04 OpenVZ Templates</a><br />
<a href="http://blog.bodhizazen.net/linux/download-ubuntu-10-04-openvz-templates/" target="_blank">Download Ubuntu 10.04 OpenVZ Templates</a></p>
<p>Pentru că nu îmi place lucrul manual atâta timp cât există lucruri precreate:<br />
<a href="http://bodhizazen.fivebean.net/openvz/" target="_blank">http://bodhizazen.fivebean.net/openvz/</a></p>
<p>Printre altele, a trebuit să downloadez template-ul lamp pentru a mă inspira din scripturile de init pentru minimal. Sunt adeptul stilului minimal peste care să fac lego instalând direct din repo atunci când plasez o soluție. <em>Less is more!</em></p>
<p><a class="a2a_dd addtoany_share_save" href="http://www.addtoany.com/share_save"><img src="http://www.saltwaterc.net/wp-content/plugins/add-to-any/share_save_171_16.png" width="171" height="16" alt="Share/Bookmark"/></a> </p>]]></content:encoded>
			<wfw:commentRss>http://www.saltwaterc.net/linux/ubuntu-10-04-lucid-lynx-si-openvz.html/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Scanarea disk-urilor sub Linux</title>
		<link>http://www.saltwaterc.net/linux/scanarea-disk-urilor-sub-linux.html</link>
		<comments>http://www.saltwaterc.net/linux/scanarea-disk-urilor-sub-linux.html#comments</comments>
		<pubDate>Fri, 16 Apr 2010 08:49:14 +0000</pubDate>
		<dc:creator>SaltwaterC</dc:creator>
				<category><![CDATA[Linux]]></category>

		<guid isPermaLink="false">http://www.saltwaterc.net/?p=730</guid>
		<description><![CDATA[O să intru puţin şi în acest subiect. Nu, nu mă refer la chestii de filesystem gen fsck plus familia de prieteni, LVM şi alte avioane, ci la chestii dincolo de date, mai apropiate de fier. Nu oricine deţine un motan idiot ce să folosească un minitower pe post de suprafaţă de frânare, şi să-l [...]]]></description>
			<content:encoded><![CDATA[<p>O să intru puţin şi în acest subiect. Nu, nu mă refer la chestii de filesystem gen fsck plus familia de prieteni, LVM şi alte avioane, ci la chestii dincolo de date, mai apropiate de fier. Nu oricine deţine un motan idiot ce să folosească un minitower pe post de suprafaţă de frânare, şi să-l dărâme, dar problemele pot apărea şi în stare naturală, &#8220;fat free, batteries not included&#8221;. Chiar dacă maşina respectivă în timpul impactului era oprita (fapt ce a oferit oportunitatea de a fi dărâmată), cele două disk-uri aveau capetele parcate, conform specificaţiilor suportă acceleraţii de până la 300G dacă sunt staţionate, wonk, wonk, wonk. Ideea simplă este faptul ca pentru a fi sigur de stabilitatea soluţiei, sunt necesare nişte măsuri ulterioare producerii unui eveniment nedorit.</p>
<p>a) S.M.A.R.T.</p>
<p>S.M.A.R.T.-ul (Self-Monitoring, Analysis, and Reporting Technology) acesta deştept, pe lângă faptul de a furniza o târlă &#8220;geeky parameters&#8221; ştie să ruleze şi nişte teste automate la nivel de disk, a căror rezultate se salvează în log-ul propriu, fapt ce duce această tehnologie dincolo de graniţele sistemului de operare.</p>
<p>O să presupun că disk-ul în cauză este /dev/sda, eventual faptul că scanarea se face dintr-un live edition pentru a elimina anumite probleme potenţiale. Instalarea sub Debian &amp; Friends se face prin pachetul smartmontools. Utilitarul interesant este smartctl.</p>
<blockquote><p>smartctl -i /dev/sda</p></blockquote>
<p>Comanda va returna informaţiile de bază despre disk, dintre care cele mai importante pentru a continua sunt ultimele două:</p>
<blockquote><p>SMART support is: <strong>Available</strong> &#8211; device has SMART capability.<br />
SMART support is: <strong>Enabled</strong></p></blockquote>
<p>Dacă e &#8220;Available&#8221; şi e &#8220;Disabled&#8221;, atunci se poate activa şi fără reboot pentru a meşteri prin BIOS. Dacă e &#8220;Unavailable&#8221;, atunci poţi să arunci rabla de HDD de pe bloc sau intru într-o zonă a disk-urilor ce mă depăşeşte.</p>
<blockquote><p>smartctl -s on /dev/sda</p></blockquote>
<p>Această comandă va activa S.M.A.R.T. dacă există. Dacă nu, citeşte paragraful anterior. Dacă da, lectură plăcută în continuare.</p>
<blockquote><p>smartctl -a /dev/sda</p></blockquote>
<p>Va da lista aceea de &#8220;geeky parameters&#8221; despre starea HDD-ului.</p>
<blockquote><p>SMART overall-health self-assessment test result: <strong>PASSED</strong></p></blockquote>
<p>Ar fi bine să indice acel PASSED. Dacă nu, ar fi cazul să îţi salvezi datele şi să înlocuieşti echipamentul. De regulă ar trebui să fie acompaniate erorile şi de ceva descrieri. In principiu informaţiile cu flag-ul &#8220;Pre-fail&#8221; ar trebui să fie OK.</p>
<p>Dacă totul este OK, atunci se poate trece fără grijă la auto-teste. Ca idee există vreo 3, două rapide şi unul lent. Le recomand pe cele rapide să fie primele:</p>
<blockquote><p>smartctl -t short /dev/sda</p></blockquote>
<p>După ce trece timpul alocat testului se va rula:</p>
<blockquote><p>smartctl -t conveyance /dev/sda</p></blockquote>
<p>Atenţie, testele nu pot fi rulate în paralel sau puse în coadă. Execuţia unui nou test o va anula pe cea anterioară.</p>
<p>Se poate trage cu ochiul la progres prin:</p>
<blockquote><p>smartctl -c /dev/sda</p></blockquote>
<p>Cu toate acestea, nu are vreo formă de &#8220;progress bar&#8221;, doar un procent rămas pâna la terminare, actualizat din 10% în 10%.</p>
<p>Lista rezultatelor stocate în log-ul HDD-ului se poate afla prin:</p>
<blockquote><p>smartctl -l selftest /dev/sda</p></blockquote>
<p>Ca regulă generală, log-ul stochează ultimele 20 teste. Nu îţi pierde vremea (precum subsemnatul) căutând o metodă de resetare a log-ului. O fi existând vreo soluţie, nu am dat de ea în smartctl.</p>
<blockquote><p>=== START OF READ SMART DATA SECTION ===<br />
SMART Self-test log structure revision number 1<br />
Num  Test_Description    Status                  Remaining  LifeTime(hours)  LBA_of_first_error<br />
# 1  Extended offline    Completed without error       00%     19368         -<br />
# 2  Conveyance offline  Completed without error       00%     19366         -<br />
# 3  Short offline       Completed without error       00%     19366         -</p></blockquote>
<p>Cam aşa arată la mine după cele 3 teste, iar acestea sunt rezultatele &#8220;ochei&#8221;. Nu am zis de ultimul, acesta durează cât căderea turnului din Pisa şi a doua venire a lui Hristos la un loc. Este direct proporţional cu dimensiunea disk-ului şi bănuiesc faptul că ţine şi de viteza acestuia. Ultimul test se rulează prin:</p>
<blockquote><p>smartctl -t long /dev/sda</p></blockquote>
<p>Este un moment bun să îţi faci cafeaua, dacă bei cafea, să scoţi câinele la plimbare, dacă ai vreunul, etc. O să dureze suficient de mult, în special la dimensiunile disk-urilor din zilele de astăzi.</p>
<p>Parametrul -c al smartctl pe lângă starea execuţiei unui test anume furnizează şi durata lor:</p>
<blockquote><p>Short self-test routine<br />
recommended polling time: 	 (   2) minutes.<br />
Extended self-test routine<br />
recommended polling time: 	 ( 147) minutes.<br />
Conveyance self-test routine<br />
recommended polling time: 	 (   5) minutes.</p></blockquote>
<p>În concluzie îţi poţi programa din timp ceva ce să umple acel gol. Din păcate numerele nu sunt precum progress bar-ul din Windows 98 unde arăta sute de ani şi termina în 5 minute sau un progress bar ce avansează dar timpul rămas creşte. Cam atâta durează testele pe bune şi pe rele. Datele de mai sus sunt de la un WD5000AAJS, adică un HDD de 500GB, 8MiB cache şi peste 19300 de ore de funcţionare. Da, are peste 2 ani de uptime, e normal din moment ce rulează în propriul server. Fratele geamăn, camarad de mirror, a murit răpus de Buleptrica, fie-i platanele uşoare. Cu această ocazie am făcut şi comemorarea soldatului căzut la datorie.</p>
<p>b) badblocks</p>
<p>badblocks este un utilitar, potenţial agresiv, menit să scormonească platanele şi să indice existenţa sau inexistenţa sectoarelor defecte. Spre exemplu eu am o mândreţe de HDD Fujitsu-Siemenes cules din notebook (ce a primit la scurt timp după achiziţionare un binemeritat upgrade la 7200 RPM). Junghiul acesta de disk corupe datele, n-are S.M.A.R.T. şi nici bad-uri. L-am scanat de câteva ori, cu mai multe utilitare, de unde concluzia că suferă de alte genuri de defecţiuni, recte electronice. Concluzia scurtă a poveştii de mai sus este faptul că badblocks nu este panaceu, identifică problemele pentru care a fost creat. Disk-urile nu trebuie să fie montate pentru a evita orice problemă, dacă au partiții. Deasemenea se recomandă prezența unei distribuții live, eventual în cazul în care aceasta nu este disponibilă, single user mode cu root montat ca read only.</p>
<blockquote><p>badblocks -sv /dev/sda</p></blockquote>
<p>Va rula un read only test şi arată progresul operaţiei. Durează ceva vreme, cam o oră şi ceva în cazul meu.</p>
<blockquote><p>root@ubuntu:~# badblocks -sv /dev/sda<br />
Checking blocks 0 to 488386583<br />
Checking for bad blocks (read-only test): done<br />
Pass completed, 0 bad blocks found.</p></blockquote>
<p>Dacă vrei un test mai agresiv pentru disk, există și moduri read-write. Există doi parametri mari și lați: -n pentru read-write non-distructiv, recomandat pentru disk-uri ce au date pe ele, sau -w pentru read-write distructiv și îți poți lua gândul de la date cu -w, deci atenție. Parametrii -n și -w sunt disjuncți deci nu se vor utiliza împreună în aceeași comandă.</p>
<p>EOF</p>
<p><a class="a2a_dd addtoany_share_save" href="http://www.addtoany.com/share_save"><img src="http://www.saltwaterc.net/wp-content/plugins/add-to-any/share_save_171_16.png" width="171" height="16" alt="Share/Bookmark"/></a> </p>]]></content:encoded>
			<wfw:commentRss>http://www.saltwaterc.net/linux/scanarea-disk-urilor-sub-linux.html/feed</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
		<item>
		<title>OpenVZ Debian Appliance Builder</title>
		<link>http://www.saltwaterc.net/linux/openvz-debian-appliance-builder.html</link>
		<comments>http://www.saltwaterc.net/linux/openvz-debian-appliance-builder.html#comments</comments>
		<pubDate>Fri, 26 Mar 2010 20:22:00 +0000</pubDate>
		<dc:creator>SaltwaterC</dc:creator>
				<category><![CDATA[Linux]]></category>
		<category><![CDATA[Virtualizare]]></category>

		<guid isPermaLink="false">http://www.saltwaterc.net/?p=705</guid>
		<description><![CDATA[Băieții ăștia faini de la Proxmox ce se ocupă de Proxmox VE printre altele, soluția de virtualizare ce o recomandam în articolul anterior pentru testarea de configurații, au mai scos un hit: Debian Appliance Builder, pe scurt dab. Acum să nu se înțeleagă din fraza anterioară faptul că Proxmox VE nu ar fi bun în [...]]]></description>
			<content:encoded><![CDATA[<p>Băieții ăștia faini de la <a title="Proxmox" href="http://proxmox.com/" target="_blank">Proxmox</a> ce se ocupă de <a title="Proxmox Virtual Environment" href="http://pve.proxmox.com/wiki/Main_Page" target="_blank">Proxmox VE</a> printre altele, soluția de virtualizare ce o recomandam <a title="Cum să reproduci setup-din din producție – pe local" href="http://www.saltwaterc.net/linux/cum-sa-reproduci-setup-din-din-productie-pe-local.html" target="_blank">în articolul anterior</a> pentru testarea de configurații, au mai scos un hit: <a title="Debian Appliance Builder" href="http://pve.proxmox.com/wiki/Debian_Appliance_Builder" target="_blank">Debian Appliance Builder</a>, pe scurt dab. Acum să nu se înțeleagă din fraza anterioară faptul că Proxmox VE nu ar fi bun în producție. <a title="OVH: Proxmox" href="http://help.ovh.co.uk/Proxmox" target="_blank">Cel puțin OVH</a> folosește în producție produsul menționat anterior.</p>
<p>Dar să revenim la builder. Practic dab este un utilitar menit să subțieze destul de mult procesul de <a title="Debian template creation" href="http://wiki.openvz.org/Debian_template_creation" target="_blank">creare al unui template Debian</a>. De fapt procesul în sine nu e mare filosofie, dar este stufos și necesită cel puțin un shell script pentru a reduce repetitivitatea. Cei de la Proxmox au reușit prin automatizarea etapelor de creare să reducă timpul și complexitatea necesară creării unui template OpenVZ pentru Debian. Având în vedere că Ubuntu este compatibil din punct de vedere binar cu upstream-ul (cel puțin la nivel declarativ), dab suportă printre altele și crearea de template-uri pentru câteva versiuni ale acestei distribuții.</p>
<p>Distribuții suportate de către Debian Appliance Builder:</p>
<ul>
<li>Debian Etch (4.0) (Legacy Stable)</li>
<li>Debian Lenny (5.0) (Stable)</li>
<li>Ubuntu Hardy (8.04) (LTS)</li>
<li>Ubuntu Intrepid (8.10)</li>
<li>Ubuntu Jaunty (9.04)</li>
</ul>
<p>Remarcabilă este absență lui Karmic, deși nu este esențială având în vedere că următorul LTS, Ubuntu Lucid Lynx (10.04), stă să apară. Momentan a poposit la Beta 1.</p>
<p>Practic pașii necesari creării unui template au fost reduși la:</p>
<ol>
<li>crearea unui fișier de configurare (dab.conf) cu o sintaxă &#8220;key: value&#8221; relativ simplă, explicată în documentație. Joacă rol de &#8220;metadata&#8221;.</li>
<li>init &#8211; moment în care se citește lista de pachete din repo-urile distribuției alese</li>
<li>bootstrap cu opțiuni, unde subsemnatul preferă &#8220;&#8211;minimal&#8221;. Prefer să am un setup minimal și să instalez din repo pachetele în funcție de context în momentul în care ajung la deploy. Less is more. La bootstrap se face downloadul efectiv al pachetelor în directorul cache al structurii pe care se construiește template-ul.</li>
<li>[opțional] instalare de pachete suplimentare. Minimalul lor nu corespunde minimalului meu, ce presupune și: htop, sysv-rc-conf, sysvconfig, bzip2.</li>
<li>configurare. Minimal în terminologia mea nu înseamnă o chestie redusă la dimensiune până la absurd, gen template-urile minimale de pe openvz.org ce funcționează cu o târlă de erori ce trebuie reparate de mână înainte de deploy. Plus faptul că sunt actualizate din an în Paște din moment ce sunt în secțiunea contrib iar maintainerii sunt de Duminică (one time only?). Printre altele, le optimizez pentru consum de memorie redus, și anume oprirea serviciilor ce nu sunt necesare cel puțin pe moment: cron, postfix, syslog (cu variații în funcție de distro), ceea ce se traduce prin: într-un container chel o să fie un memory footprint inițial de 1-2MiB necesar serviciului <a title="OpenSSH" href="http://www.openssh.com/" target="_blank">OpenSSH</a>, <a title="Two dozen operating system templates" href="http://www.intovps.com/blog/2009/08/23/two-dozen-operating-system-templates/" target="_blank">după cum se lăudau și cei de la IntoVPS</a>. Recordul personal e de 1MiB pe un template Debian Lenny i386 și aș merge pe varianta cu <a title="Dropbear SSH server and client" href="http://matt.ucc.asn.au/dropbear/dropbear.html" target="_blank">Dropbear</a> în loc de OpenSSH doar de dragul virtualizării și a testării scenariului de &#8220;VPS small&#8221;. Timp pentru teste să găsesc. Ca dimensiune, ies în jur de 95MiB în urma arhivării gzip, în jur de 275MiB dezarhivat.</li>
<li>finalizare &#8211; ceea ce presupune curățarea automată a template-ului din containerul temporar urmată de arhivare. Având în vedere faptul că Proxmox VE necesită o sintaxă rigidă în ceea ce privește numele unui template ce trebuie să se regăsească în /var/lib/vz/template/cache (de pe la v1.2 dacă nu mă înșeală memoria), partea de finalize este un real ajutor pentru că se ocupă automat de numele buclucaș.</li>
</ol>
<p>Singura bubă ce i-am găsit-o până acum este lipsa unui suport bun pentru edit &amp; deploy. Cel puțin mie de îndată ce am rulat dab finalize &#8211; nu am mai putut reveni la reconfigurare, rearhivare, retestare. Din fericire dab clean nu șterge lista de pachete. Doar dab dist-clean face curățenie pe acolo, lăsând doar fișierul dab.conf și directorul cache ce e gol (WTF?).</p>
<p>Printre altele suportă crearea de template-uri folosind make și un Makefile. Nu îmi manifest interes deosebit pentru sintaxa Makefile cu care nu sunt familiarizat, iar shell scripting-ul e mai distractiv dacă tot e să automatizăm automatizarea. Suportă anumite scenarii gen bază de date sau PHP, dar cel puțin subsemnatul preferă să facă de mână instalarea de servicii esențiale în funcție de tipul de mașină, fie din repo, fie din surse dacă versiunea din repo e de pe vremea lui Nae.</p>
<p>Per total e un utilitar ce te poate scăpa de stufoșenia creării template-urilor de Debian/Ubuntu folosind debootstrap și un shell, utilitar ce îl Recomand<strong>™</strong>.</p>
<p><a class="a2a_dd addtoany_share_save" href="http://www.addtoany.com/share_save"><img src="http://www.saltwaterc.net/wp-content/plugins/add-to-any/share_save_171_16.png" width="171" height="16" alt="Share/Bookmark"/></a> </p>]]></content:encoded>
			<wfw:commentRss>http://www.saltwaterc.net/linux/openvz-debian-appliance-builder.html/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Cum să reproduci setup-din din producție &#8211; pe local</title>
		<link>http://www.saltwaterc.net/linux/cum-sa-reproduci-setup-din-din-productie-pe-local.html</link>
		<comments>http://www.saltwaterc.net/linux/cum-sa-reproduci-setup-din-din-productie-pe-local.html#comments</comments>
		<pubDate>Tue, 16 Mar 2010 10:50:58 +0000</pubDate>
		<dc:creator>SaltwaterC</dc:creator>
				<category><![CDATA[Linux]]></category>
		<category><![CDATA[Virtualizare]]></category>

		<guid isPermaLink="false">http://www.saltwaterc.net/?p=684</guid>
		<description><![CDATA[Problema reproducerii unui setup compatibil din punct de vedere binar este mai simplă decât pare cu condiția să se apeleze la anumite ajutoare, ajutoare de natură virtuală. Este destul de contra-productiv să instalezi un OS de fiecare dată pe când este nevoie de o instanță curată, fie că dispui de o mașină dedicată, fie că [...]]]></description>
			<content:encoded><![CDATA[<p>Problema reproducerii unui setup compatibil din punct de vedere binar este mai simplă decât pare cu condiția să se apeleze la anumite ajutoare, ajutoare de natură virtuală. Este destul de contra-productiv să instalezi un OS de fiecare dată pe când este nevoie de o instanță curată, fie că dispui de o mașină dedicată, fie că folosești un hypervisor local. Știu că în aparență propoziția anterioară contrazice folosirea virtualizării, dar nu am menționat ce tip de hypervisor se recomandă pentru acest obiectiv specific.</p>
<p>Atâta timp cât trebuie testată doar compatibilitatea userland-ului, o soluție de virtualizare bazată pe OS level virtualization este suficientă, adică se folosesc containere, nu instanțe virtualizare complet. Spre exemplu un setup testat local în container va putea rula pe un VPS, pe un VDS sau pe o mașină dedicată fără probleme. Nu o să fac referire la <a title="The FreeBSD jail mechanism is an implementation of operating system-level virtualization" href="http://en.wikipedia.org/wiki/FreeBSD_jail" target="_blank">FreeBSD Jails</a> și <a title="Solaris Containers (including Solaris Zones) is an implementation of operating system-level virtualization" href="http://en.wikipedia.org/wiki/Solaris_Containers" target="_blank">Solaris Containers</a> pentru că am puțină experiență cu Jails și zero experiență cu Containers. În plus, destul de mulți se orientează în prezent spre Linux.</p>
<p>Dacă ești vreun guru în a rula vzctl în shell sau masochist, poți să te oprești din citit. Dacă nu, atunci voi vorbi în continuare despre <a title="OpenVZ is container-based virtualization for Linux" href="http://wiki.openvz.org/Main_Page" target="_blank">OpenVZ</a> plus metode civilizate și productive de a reproduce un setup. Bariera de intrare printre membrii ce folosesc tehnologia este destul de sus, motiv pentru care au apărut soluții integrate. Dintre acestea, recomand <a title="Proxmox Virtual Environment" href="http://pve.proxmox.com/wiki/Main_Page" target="_blank">Proxmox VE (Virtual Environment)</a>. Băieții aceștia faini de la Proxmox au luat mai multe tehnologii de virtualizare și le-au pus sub același pachet: <a title="Kernel-based Virtual Machine" href="http://en.wikipedia.org/wiki/Kernel-based_Virtual_Machine" target="_blank">KVM (Kernel-based Virtual Machine)</a> și OpenVZ, plus o interfață web pentru administrare. Practic Proxmox VE este un <a title="http://www.debian.org/releases/lenny/" href="http://www.debian.org/releases/lenny/" target="_blank">Debian Lenny</a> împachetat cu tehnologiile despre care spuneam mai sus.</p>
<p>Setup-up este cretin de simplu, durează vreo 5 minute, se face pe o mașină ce nu are un alt OS. Își alocă tot disk-ul și își face partiții <a title="Logical Volume Manager (Linux)" href="http://en.wikipedia.org/wiki/Logical_Volume_Manager_%28Linux%29" target="_blank">LVM</a>. Este recomandat minim 2GB de RAM disponibil dacă se folosesc mai multe containere, minim 1GB RAM pentru un container folosind pentru &#8216;package maintenance&#8217; ce are suport <a title="Symmetric multiprocessing" href="http://en.wikipedia.org/wiki/Symmetric_multiprocessing" target="_blank">SMP</a> și se folosește parallel build. Spre exemplu la un build de PHP cu make -j 3 am rămas fără memorie în container de 512MB RAM. Da, nu recomand instalarea unui compilator în producție sau build pe live servers. Alternativa ar fi <a title="Do it yourself" href="http://en.wikipedia.org/wiki/Do_it_yourself" target="_blank">DIY</a>, adică o distribuție de Linux ce folosește kernel cu patch pentru OpenVZ, preferabil din repo, plus o interfață web precum <a title="OpenVZ Management Tool" href="http://webvz.sourceforge.net/" target="_blank">WebVZ</a> sau <a title="HyperVM" href="http://www.lxcenter.org/hypervm/installation.htm" target="_blank">HyperVM</a>.</p>
<p>Proxmox VE se poate instala fie direct pe fier (bare-metal hypervisor), fie într-o mașină virtuală creată cu <a title="VirtualBox" href="http://www.virtualbox.org/" target="_blank">VirtualBox</a> ce este soluția pentru &#8220;desktop&#8221; ce o recomand. Am pus desktop între ghilimele pentru faptul că VirtualBox are o arhitectură complexă expusă prin CLI. În GUI se găsește doar un set limitat de funcții. În cazul în care se instalează într-o mașină virtuală creată cu VirtualBox (sau echivalent), nu se vor putea crea mașini virtuale folosind KVM pentru că este nevoie de extensiile de virtualizare din procesor (<a title="x86 virtualization" href="http://en.wikipedia.org/wiki/X86_virtualization" target="_blank">VT-x sau AMD-V</a>) pentru aceasta. Oricum, scopul principal al acestui articol este OpenVZ datorită flexibilității ce o oferă. Acesta este motivul pentru care merită chiar și soluția de hypervisor sub hypervisor dacă nu îți permiți luxul unei mașini dedicate. În principiu pe o stație de lucru suficient de puternică nu ar trebui să fie probleme în ceea ce privește rularea unui Proxmox VE sub VirtualBox. Îmi permit aroganță de a menționa faptul că nu am mai lucrat de mult pe o mașină sub quad și 8GB RAM.</p>
<p>Având în vedere faptul că pentru OpenVZ <a title="openvz template creation" href="http://www.google.com/search?hl=en&amp;source=hp&amp;q=openvz+template+creation&amp;aq=0&amp;aqi=g1&amp;aql=&amp;oq=openvz+template+crea" target="_blank">se pot crea relativ ușor template-uri</a>, iar virtualizarea constă în crearea unui container nou, operațiunea prin care se obține un nou setup durează destul de puțin. Iar în cazul în care un container nu mai este necesar, distrugerea acestuia este o operațiune rapidă. Practic se obține propriul mini-cloud, ușor de administrat, ce va scădea timpul în care se creează diferite scenarii ce vor ajunge în producție.</p>
<p>În cazul în care nu am fost suficient de clar la început, repet: setup pentru testarea userland-ului. OpenVZ oferă acces limitat la kernel din moment ce nu folosește virtualizare completă a sistemului de operare, doar rețeaua este virtualizată. Spre exemplu folosind kernel-ul livrat cu Proxmox VE se pot folosi FS-uri virtuale bazate pe <a title="Filesystem in Userspace" href="http://en.wikipedia.org/wiki/Filesystem_in_Userspace" target="_blank">FUSE</a> dacă se sapă puțin prin vzctl, ceea ce deschide anumite posibilități în producție gen <a title=" FUSE-based file system backed by Amazon S3  " href="http://code.google.com/p/s3fs/" target="_blank">s3fs</a> (netestat sub OpenVZ de subsemnatul, am testat alte module FUSE) prin intermediul căruia se poate monta un bucket de <a title="Amazon Simple Storage Service (Amazon S3)" href="http://aws.amazon.com/s3/" target="_blank">Amazon S3</a> ca FS local. De altfel, am reprodus și un sistem desktop într-un container OpenVZ, <a title="Ubuntu Hardy Heron" href="https://wiki.ubuntu.com/HardyHeron" target="_blank">Ubuntu Hardy</a>, accesat prin <a title="Ubuntu FreeNX" href="https://help.ubuntu.com/community/FreeNX" target="_blank">FreeNX</a>, deci limitările sunt destul de puține gen lipsa unui suport civilizat pentru loop device.</p>
<p><a class="a2a_dd addtoany_share_save" href="http://www.addtoany.com/share_save"><img src="http://www.saltwaterc.net/wp-content/plugins/add-to-any/share_save_171_16.png" width="171" height="16" alt="Share/Bookmark"/></a> </p>]]></content:encoded>
			<wfw:commentRss>http://www.saltwaterc.net/linux/cum-sa-reproduci-setup-din-din-productie-pe-local.html/feed</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Firebug 1.5 + Firefox 3.5.7 + Ubuntu Hardy amd64</title>
		<link>http://www.saltwaterc.net/rant/firebug-15-firefox-357-ubuntu-hardy-amd64.html</link>
		<comments>http://www.saltwaterc.net/rant/firebug-15-firefox-357-ubuntu-hardy-amd64.html#comments</comments>
		<pubDate>Fri, 29 Jan 2010 08:34:57 +0000</pubDate>
		<dc:creator>SaltwaterC</dc:creator>
				<category><![CDATA[Linux]]></category>
		<category><![CDATA[Programare]]></category>
		<category><![CDATA[Rant]]></category>

		<guid isPermaLink="false">http://saltwaterc.net/rant/firebug-15-firefox-357-ubuntu-hardy-amd64.html</guid>
		<description><![CDATA[Firebug este o unealtă indispensabilă activităților de dezvoltare web pe care le execut. Din păcate, actualizările se lasă cu urmări câteodată. Precum zice în titlu, am încercat combinația nefericită de mai sus. Buba stă în Firebug: 64 bit Firefox on Linux crashes with Firebug 1.5.0. Am mers pe firul epic al poveștii de pe issue [...]]]></description>
			<content:encoded><![CDATA[<p>Firebug este o unealtă indispensabilă activităților de dezvoltare web pe care le execut. Din păcate, actualizările se lasă cu urmări câteodată. Precum zice în titlu, am încercat combinația nefericită de mai sus. Buba stă în Firebug: <a href="http://blog.getfirebug.com/2010/01/19/64-bit-firefox-on-linux-crashes-with-firebug-1-5-0/" title="64 bit Firefox on Linux crashes with Firebug 1.5.0" target="_blank">64 bit Firefox on Linux crashes with Firebug 1.5.0</a>. Am mers pe firul epic al poveștii de pe issue tracker și mi-am resetat preferințele. Crash-ul reapare atunci când se reactivează tab-ul Net sau Console. Din nefericire, echipa Firebug aruncă vina către Ubuntu, desi eu mi-am făcut propriul build personalizat de Firefox, deci problema cred că zace undeva prin ceva bibliotecă livrată cu Ubuntu din moment ce versiunea de Firefox îmi aparține.</p>
<p>Soluția de moment: downgrade la Firebug 1.4: <a href="http://getfirebug.com/releases/firebug/1.4/" title="Firebug 1.4" target="_blank">http://getfirebug.com/releases/firebug/1.4/ </a></p>
<p>PS: Firefox 3.6 sub Hardy amd64 este probabil cea mai instabilă versiune lansată vreodată. Am avut versiuni de Firefox Alpha sau Beta ce erau mai stabile de atât.</p>
<p><a class="a2a_dd addtoany_share_save" href="http://www.addtoany.com/share_save"><img src="http://www.saltwaterc.net/wp-content/plugins/add-to-any/share_save_171_16.png" width="171" height="16" alt="Share/Bookmark"/></a> </p>]]></content:encoded>
			<wfw:commentRss>http://www.saltwaterc.net/rant/firebug-15-firefox-357-ubuntu-hardy-amd64.html/feed</wfw:commentRss>
		<slash:comments>4</slash:comments>
		</item>
		<item>
		<title>Actualizare de Virtualbox. Acum ce? Management de procese? Reboot!</title>
		<link>http://www.saltwaterc.net/windows/actualizare-de-virtualbox-acum-ce-management-de-procese-reboot.html</link>
		<comments>http://www.saltwaterc.net/windows/actualizare-de-virtualbox-acum-ce-management-de-procese-reboot.html#comments</comments>
		<pubDate>Sat, 28 Nov 2009 10:53:44 +0000</pubDate>
		<dc:creator>SaltwaterC</dc:creator>
				<category><![CDATA[Linux]]></category>
		<category><![CDATA[Virtualizare]]></category>
		<category><![CDATA[Windows]]></category>

		<guid isPermaLink="false">http://saltwaterc.net/windows/actualizare-de-virtualbox-acum-ce-management-de-procese-reboot.html</guid>
		<description><![CDATA[Băieții aceștia faini de la Sun Microsystems au &#8216;ghiara&#8217; pe VirtualBox de la băieții de la Innotek. Vremuri istorice tulburi cu un produs mediocru. Între timp Sun-ul a băgat camionul de dolari în proiect și a început să se distingă din mulțime printr-un backend foarte puternic. Pe subsemnatul l-a convins să renunțe la VMware Server [...]]]></description>
			<content:encoded><![CDATA[<p>Băieții aceștia faini de la Sun Microsystems au &#8216;ghiara&#8217; pe VirtualBox de la băieții de la Innotek. Vremuri istorice tulburi cu un produs mediocru. Între timp Sun-ul a băgat camionul de dolari în proiect și a început să se distingă din mulțime printr-un backend foarte puternic. Pe subsemnatul l-a convins să renunțe la VMware Server pentru acele &#8216;server consolidation deployment&#8217; ce mai apărea prin rețelele locale pe unde operez. Tot istoric vorbind, pentru Windows se distribuiau două pachete, unul pentru x86 și unul pentru x86-64. În prezent se distribuie unul singur ce se instalează în funcție de contextul platformei.</p>
<p>Bun. La partea cu instalarea îmi doream să ajung. Mai bine zis la partea cu actualizarea. De regulă pe un Ubuntu Server ce mai rulează servicii mici/medii VirtualBox are bunul simț să ruleze în background ca daemon printr-un simplu init script. În concluzie actualizările le fac atunci când îmi mai aduc aminte să deschid interfața grafică. Sub Windows în schimb este o jucărie unde mai testez ultimele apariții în domeniul OS. Dar aici mă lovesc suficient de des de acea fereastră ce mă anunță faptul că a apărut o nouă versiune. Click &#8211; download  &#8211; next, next, next &#8230; gata. În teorie era gata. În practică 3.0.12, adică ultima versiune, refuză să adauge orice fel de HDD virtual nou și am o mică bănuială despre imposibilitatea de a adăuga noi mașini virtuale.</p>
<p>Mă apuc să lucrez în calculator să văd ce se întâmplă (doctore). Cretinătatea aceea de installer nu a închis VBoxSVC înainte de instalare. Adică acel serviciu ad-hoc din arhitectura VirtualBox ce se ocupă de mașinile virtuale atâta timp cât rulează cel puțin una. În mod normal stă închis acel proces. Ridicolul merge mai departe. Acel proces, VBoxSVC dă un &#8216;lock&#8217; exclusiv pe fișierele de configurare astfel încât să nu apară chestia aceea numită &#8216;race condition&#8217; în geek language. Iar acel proces nu mai vrea să moară. Task Manager-ul e inutil ca de obicei la omorât procese încăpățânate. Am scos artileria grea: <a href="http://diamondcs.com.au/advancedseries/apt.php" title="Advanced Process Termination" target="_blank">Advanced Process Termination</a> (APT). Pe lângă o duzină de metode de kill, știe două metode de kernel kill și încă două de crash kill. Kernel kill pe Windows 7 x64 nu are suport. Nu mi-am spart capul cu hack-ul de OS. Din păcate metodele din user mode au dat greș. Windows încă e copil mic și udă patul atunci când vine vorba de procese încăpățânate. Sistemele UNIX-like (ex: Linux, FreeBSD) rămân în situația penibilă de mai sus atunci când un proces rămâne blocat în &#8216;<a href="http://en.wikipedia.org/wiki/Uninterruptible_sleep" title="IO wait" target="_blank">IO wait state</a> &amp; friends&#8217;. Soluția este evidentă: reboot. Dar m-am cam săturat să rămân cu procese blocate pentru ca Windows e rebut la management-ul lor din &#8216;user mode&#8217;. Iar VirtualBox e rebut la actualizare și nu își știe închide serviciul înainte de un nou &#8216;deploy&#8217;. În mod curios, procesul blocat nu apare în APT. Dar APT are o jucărie numită &#8216;Custom PID&#8217; pentru a da kill după kill.</p>
<p><a class="a2a_dd addtoany_share_save" href="http://www.addtoany.com/share_save"><img src="http://www.saltwaterc.net/wp-content/plugins/add-to-any/share_save_171_16.png" width="171" height="16" alt="Share/Bookmark"/></a> </p>]]></content:encoded>
			<wfw:commentRss>http://www.saltwaterc.net/windows/actualizare-de-virtualbox-acum-ce-management-de-procese-reboot.html/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Problema mail() din Zend Server Community Edition &#8211; Debian Repository</title>
		<link>http://www.saltwaterc.net/rant/problema-mail-din-zend-server-community-edition-debian-repository.html</link>
		<comments>http://www.saltwaterc.net/rant/problema-mail-din-zend-server-community-edition-debian-repository.html#comments</comments>
		<pubDate>Sun, 04 Oct 2009 19:53:07 +0000</pubDate>
		<dc:creator>SaltwaterC</dc:creator>
				<category><![CDATA[Linux]]></category>
		<category><![CDATA[Rant]]></category>

		<guid isPermaLink="false">http://saltwaterc.net/rant/problema-mail-din-zend-server-community-edition-debian-repository.html</guid>
		<description><![CDATA[Din plictiseală sau datorită faptului că în mod repetitiv m-am tot lovit de Zend Server CE printre plimbările mele pe Web, m-am decis să renunț la versiunea implicită ce vine în reopository-ul sistemului de operare de pe mașina de dezvoltare (Ubuntu Hardy) și să pun în schimb Zend Server. Zis și făcut. Țac, țac, țac [...]]]></description>
			<content:encoded><![CDATA[<p>Din plictiseală sau datorită faptului că în mod repetitiv m-am tot lovit de Zend Server CE printre plimbările mele pe Web, m-am decis să renunț la versiunea implicită ce vine în reopository-ul sistemului de operare de pe mașina de dezvoltare (Ubuntu Hardy) și să pun în schimb Zend Server. Zis și făcut. Țac, țac, țac &#8211; zgomot de taste &#8211; instalarea a mers ca unsă.</p>
<p>Din păcate, ocazional, dezvolt și aplicații ce au nevoie de acces la funcția mail(), funcție ce altceva înafară de FALSE aka FAIL nu știa să returneze. Verific Postfix-ul &#8211; rula de zor. Deci nu era bubă de MTA. NU, nu suport Sendmail. Iau o porție de copypasta de pe php.net, pun totul întrun fișier php, rulez în shell &#8211; surpriză:</p>
<p>sh: -t: not found</p>
<p>Mă scarpin cu o mână în cap și cu cealaltă în dos. Ceva îmi pute &#8211; și nu era de la a doua mână. Încep să sap pentru a afla ce pește prăjt au făcut cei de la Zend cu php.ini de încearcă să ruleze aplicația &#8216;-t&#8217;. Crăp un output de phpinfo() in Firefox și mă luminez:</p>
<p>sendmail_path Local Value: -t -i Master Value:  -t -i</p>
<p>Erm, WTF Zend? Casc vinovatul (/usr/local/zend/etc/php.ini) și caut linia cu pricina ce bine mersi era comentată. Cică în mod implicit ar trebui să fie &#8216;sendmail -t -i&#8217;, dar se pare că opțiunea nu este hardcodată ca atare. Soluția e la mintea cocoșului:</p>
<p>sendmail_path = sendmail -t -i</p>
<p>Restart la Apache2. Merge? Merge. Shell-ul este fericit deasemenea.</p>
<p><a class="a2a_dd addtoany_share_save" href="http://www.addtoany.com/share_save"><img src="http://www.saltwaterc.net/wp-content/plugins/add-to-any/share_save_171_16.png" width="171" height="16" alt="Share/Bookmark"/></a> </p>]]></content:encoded>
			<wfw:commentRss>http://www.saltwaterc.net/rant/problema-mail-din-zend-server-community-edition-debian-repository.html/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Gnome History</title>
		<link>http://www.saltwaterc.net/linux/gnome-history.html</link>
		<comments>http://www.saltwaterc.net/linux/gnome-history.html#comments</comments>
		<pubDate>Tue, 21 Apr 2009 10:08:05 +0000</pubDate>
		<dc:creator>SaltwaterC</dc:creator>
				<category><![CDATA[Linux]]></category>

		<guid isPermaLink="false">http://saltwaterc.net/tech/gnome-history.html</guid>
		<description><![CDATA[Acesta este inca unul dintre acele posturi despre intalnitele &#8220;OS annoyances&#8220;. Desi primele 3 rezultate din Google Search-ul de mai sus fac referire la Windows OS, de data aceasta Gnome in implementarea Debian/Ubuntu iese la rampa. Posibil si sub alte distributii pentru ca imi miroase a problema din upstream in loc sa fie o problema [...]]]></description>
			<content:encoded><![CDATA[<p>Acesta este inca unul dintre acele posturi despre intalnitele &#8220;OS <a href="http://www.google.com/search?hl=en&amp;q=annoyances&amp;btnG=Google+Search&amp;aq=f&amp;oq=" title="annoyances" target="_blank">annoyances</a>&#8220;. Desi primele 3 rezultate din Google Search-ul de mai sus fac referire la Windows OS, de data aceasta Gnome in implementarea Debian/Ubuntu iese la rampa. Posibil si sub alte distributii pentru ca imi miroase a problema din upstream in loc sa fie o problema a Debian+derivatii.</p>
<p>M-am trezit inca de dimineata cu gand rau impotriva Gnome History. Din pacate gandul meu a fost mai slab decat implementarea incapatanata a celor ce au <em>gandit</em> Gnome-ul din acest punct de vedere si n-au pus pe undeva o optiune pentru dezactivarea acestei functii, optiune ce sa fie demna de &#8216;Captain Obvious&#8217;, altfel spus, la mintea cocosului. Daca in trecut istoricul se tinea in fisierul ~/.recently-used iar un simplu:</p>
<pre>chmod -c 400 ~/.recently-used</pre>
<p>era suficient pentru a opri atrocitatea, in prezent (de la Gutsy si pana in prezent daca nu ma insel) lucrurile sunt sensibil mai diferite. Numele fisierului s-a schimbat intre timp in .recently-used.xbel. Nu aceasta ar fi problema esentiala daca metodele clasice ar functiona. Am incercat schimbarea ACL-urilor precum am pus mai sus: ceva le restaureaza. Am pus symlink catre /dev/null &#8230; ceva sterge link-ul si restaureaza fisierul. L-am creat de sub root si l-am lasat asa &#8230; ceva ii restaureaza ACL-urile si le pune iarasi pe contul meu. Parca era un film de acela prost cu Greuceanu ce omoara balauri alimentati cu baterii Duracell ce tot primesc resurect. Din fericire acesta a fost balaur pe 2 biti (4 capete). Cine stie bancul cu balaurul pe 8 biti, pricepe.</p>
<p>Metode exista, si sunt doua la numar. Prima desi functioneaza, este trista pentru ca are prostul obicei de a genera erori GTK in shell:</p>
<pre>rm ~/.recently-used.xbel ; mkdir ~/.recently-used.xbel</pre>
<p>Se pare ca e o piatra prea tare de rumegat pentru implementarea incapatanata prezentata mai sus.</p>
<p>Dar are dezavantajul erorilor din shell. Fericitii (ca mine) ce folosesc ext3 pe post de filesystem (nu cunosc utilitare echivalente pentru reiser, xfs, jfs &#8211; nu dati cu pietre) pot apela la o smecherie ce marcheaza fisierul ca immutable iar la incercarea de a face ceva, o sa se loveasca de un raspuns mai incapatanat de la Sfantul Kernel:</p>
<pre>sudo chattr +i ~/.recently-used.xbel</pre>
<p>Chestia asta il va opri pe mucos sa mai salveze istoricul, ba mai mult, scuteste shell-ul de erori neinteresante.</p>
<p><a class="a2a_dd addtoany_share_save" href="http://www.addtoany.com/share_save"><img src="http://www.saltwaterc.net/wp-content/plugins/add-to-any/share_save_171_16.png" width="171" height="16" alt="Share/Bookmark"/></a> </p>]]></content:encoded>
			<wfw:commentRss>http://www.saltwaterc.net/linux/gnome-history.html/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Determinarea corecta a MIME Type in PHP 5</title>
		<link>http://www.saltwaterc.net/linux/determinarea-corecta-a-mime-type-in-php-5.html</link>
		<comments>http://www.saltwaterc.net/linux/determinarea-corecta-a-mime-type-in-php-5.html#comments</comments>
		<pubDate>Tue, 19 Aug 2008 11:46:07 +0000</pubDate>
		<dc:creator>SaltwaterC</dc:creator>
				<category><![CDATA[Linux]]></category>
		<category><![CDATA[Programare]]></category>

		<guid isPermaLink="false">http://saltwaterc.net/tech/linux/determinarea-corecta-a-mime-type-in-php-5.html</guid>
		<description><![CDATA[Din start mentionez ca acest mic tutorial este dedicat fisierelor ce au ca directie un host *nix, iar functionalitatea implicita este satisfacuta pentru Ubuntu/Debian. Se poate aplica cu modificarile de rigoare si sub alte distributii. O sa il structurez pe pasi pentru o aplicare mai usoara. Nu am incercat pentru PHP 4, desi majoritatea pasilor [...]]]></description>
			<content:encoded><![CDATA[<p>Din start mentionez ca acest mic tutorial este dedicat fisierelor ce au ca directie un host *nix, iar functionalitatea implicita este satisfacuta pentru Ubuntu/Debian. Se poate aplica cu modificarile de rigoare si sub alte distributii. O sa il structurez pe pasi pentru o aplicare mai usoara. Nu am incercat pentru PHP 4, desi majoritatea pasilor s-ar putea sa fie valabili.</p>
<p><strong>Introducere</strong></p>
<p>Determinarea MIME Type-ului corect pentru un fisier este o problema esentiala. Nu o sa explic si de ce &#8230; daca nu stii de ce, atunci tutorialul acesta iti depaseste nivelul cunostintelor. Atunci cand se face upload la un fisier printr-un form, sau se doreste import-ul unui fisier, se poate intampla ca extensia fisierului sa nu reflecte realitatea sau ca aceasta sa lipseasca cu desavarsire, fapt ce va duce la varii probleme. Array-ul $_FILES ce ia valori in functie de continutul unui form ce are specificat in mod explicit enctype=&#8221;multipart/form-data&#8221; se prea poate sa nu contina valoarea corecta a mime type-ului pentru $_FILES['file_input_name']['type'] deoarece detectia mime-ului cade pe spinarea browserului iar in majoritatea cazurilor acesta se foloseste de extensia fisierului deci va esua in cazurile descrise mai sus. Este nevoie ca informatia sa fie interpretata citind headerele fisierului si folosindu-ne de mime magic.</p>
<p><strong>PECL si fileinfo</strong></p>
<p>Nu o sa imi pierd timpul sa explic ce e PECL. Google este de mare ajutor. Din pacate in repository-urile Ubuntu/Debian, extensia fileinfo nu este disponibila in mod implicit. Din fericire este disponibila prin intermediul PECL. Acum incepe treaba sa fie paroasa.</p>
<p>In primul rand, este nevoie de una bucata compilator. Exista un pachet ce le face pe toate, deci:</p>
<blockquote><p>sudo apt-get install build-essential</p></blockquote>
<p>Bun. Avem compilator, avem PECL (presupun, daca n-ai HTTP server si PHP &#8211; citesti degeaba). Pentru build-ul fileinfo mai este nevoie de pachete de development, deci:</p>
<blockquote><p>sudo apt-get install libmagic-dev php5-dev</p></blockquote>
<p>ce va instala headerele de development pentru libmagic, phpize si alte chestii. Faceti acum, sau regretati mai tarziu. Acum este timpul sa compilam extensia fileinfo folosind pecl:</p>
<blockquote><p>sudo pecl install fileinfo</p></blockquote>
<p>Daca maraie vreo eroare la configure, instalati pachetul de development aferent (pentru cei somnorosi, are sufixul -dev). Daca maraie vreo eroare la compile, imi pare rau, nu va pot ajuta. Pe masina de devel a functionat fara probleme. Daca nu maraie nici o eroare, ar trebui sa indice faptul ca extensia a fost instalata cu succes. Ar trebui sa fie ceva de genul:</p>
<blockquote><p>Build process completed successfully<br />
Installing &#8216;/usr/lib/php5/20060613+lfs/fileinfo.so&#8217;<br />
install ok: channel://<a href="http://pear.php.net/Fileinfo-1.0.4" class="linkification-ext" title="Linkification: http://pear.php.net/Fileinfo-1.0.4">pear.php.net/Fileinfo-1.0.4</a></p></blockquote>
<p>Daca ati ajuns pana aici, mai este putin si usor. Extensiile instalate prin intermediul PECL nu sunt incarcate in mod automat, spre deosebire de cele instalate din repository-urile Ubuntu/Debian folosind apt-get sau alternativa (cu mici exceptii, spre exemplu mcrypt.so trebuie incarcat in mod explicit &#8211; nenea maintainer a fost cascat). Pentru a mentine ideea si spiritul Debian, incarcarea modulului se va face folosind directorul de fisiere alternative de configurare pentru PHP. Tastati urmatoarele chestii intr-un terminal (da stiu, copy-paste e mai comod):</p>
<blockquote><p>cd /etc/php5/conf.d/; sudo touch fileinfo.ini; sudo nano fileinfo.ini</p></blockquote>
<p>Bagati urmatoarea linie in acel fisier:</p>
<blockquote><p>extension=fileinfo.so</p></blockquote>
<p>dupa care salvati cu Ctrl+O. Inchideti editorul text folosind Ctrl+X. Nu, nu sunt vim maniac, sa nu aud de el. Acum este timpul sa se dea restart la HTTP server pentru a incarca noua configuratie. Ar trebui sa fie valabil si pentru cei cu GCI/FastCGI (eventual alt HTTP server gen lighttpd), desi subsemnatul e de ala cu Apache 2+PHP5 handler, deci in cazul meu (si al majoritatii):</p>
<blockquote><p>sudo /etc/init.d/apache2  reload</p></blockquote>
<p>ce va duce la un graceful restart (aka restart fara downtime) urmat de incarcarea noilor fisiere de configurare. Daca totul e ok, noul modul de PHP ar trebui sa fie incarcat. phpinfo(); ar trebui sa indice acest fapt, atat in lista de fisiere de configurare alternative (cele din /etc/php5/conf.d) cat si prin faptul ca ar trebui sa indice pe undeva in mod explicit faptul ca fileinfo este incarcata.</p>
<p><strong>Utilizarea fileinfo pentru a afla MIME Type</strong></p>
<p>Acum sa trecem la lucruri grele. fileinfo contine niste functii smechere asemanatoare cu fopen. Pentru ubergeeks exista modul orientat obiect de lucru cu ele (<a href="http://www.php.net/finfo_open" title="finfo_open manual" target="_blank">php.net/finfo_open</a> explica), dar subsemnatul se multumeste cu trei apeluri procedurale din moment ce nu exista nici un avantaj real in cazul de fata pentru a defini un obiect si a-l distruge dupa ce se afla mime-ul. Pentru cei dornici sa isi implementeze o clasa proprie &#8230; este alta poveste. Eu mi-am facut o functie custom ce am inclus-o in API-ul central ce primeste ca parametru calea fisierului si imi returneaza mime-ul in caz de succes sau un cod de eroare pentru debug in caz de esuare. Miezul problemei sta in:</p>

<div class="wp_syntax"><div class="code"><pre class="php" style="font-family:monospace;"><span style="color: #000088;">$finfo</span><span style="color: #339933;">=</span><span style="color: #990000;">finfo_open</span><span style="color: #009900;">&#40;</span>FILEINFO_MIME<span style="color: #339933;">,</span> <span style="color: #0000ff;">&quot;/usr/share/misc/magic&quot;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
<span style="color: #b1b100;">if</span><span style="color: #009900;">&#40;</span><span style="color: #339933;">!</span><span style="color: #000088;">$finfo</span><span style="color: #009900;">&#41;</span>
	<span style="color: #990000;">die</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">&quot;Can't open the fileinfo database.&quot;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
<span style="color: #000088;">$mime</span><span style="color: #339933;">=</span><span style="color: #990000;">finfo_file</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$finfo</span><span style="color: #339933;">,</span> <span style="color: #000088;">$fileName</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
<span style="color: #990000;">finfo_close</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$finfo</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span></pre></div></div>

<p>Si cam atat. Succes si spor la treaba.</p>
<p><a class="a2a_dd addtoany_share_save" href="http://www.addtoany.com/share_save"><img src="http://www.saltwaterc.net/wp-content/plugins/add-to-any/share_save_171_16.png" width="171" height="16" alt="Share/Bookmark"/></a> </p>]]></content:encoded>
			<wfw:commentRss>http://www.saltwaterc.net/linux/determinarea-corecta-a-mime-type-in-php-5.html/feed</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
		<item>
		<title>Blacklist pentru module sub Ubuntu</title>
		<link>http://www.saltwaterc.net/linux/blacklist-pentru-module-sub-ubuntu.html</link>
		<comments>http://www.saltwaterc.net/linux/blacklist-pentru-module-sub-ubuntu.html#comments</comments>
		<pubDate>Mon, 30 Jun 2008 18:23:23 +0000</pubDate>
		<dc:creator>SaltwaterC</dc:creator>
				<category><![CDATA[Linux]]></category>

		<guid isPermaLink="false">http://saltwaterc.net/tech/blacklist-pentru-module-sub-ubuntu.html</guid>
		<description><![CDATA[Pentru ca sunt cascat si uit procedura, am hotarat sa scap vreo cateva linii aici. Povestea sta cam asa: solutia cea mai simpla pentru problemele mele maricele sub Ubuntu atunci cand folosesc notebook-ul este blacklist-ul. De ce? Pentru ca oricat as configura la ALSA, driverul tot cretin este si nu imi ia ca default dupa [...]]]></description>
			<content:encoded><![CDATA[<p>Pentru ca sunt cascat si uit procedura, am hotarat sa scap vreo cateva linii aici. Povestea sta cam asa: solutia cea mai simpla pentru problemele mele maricele sub Ubuntu atunci cand folosesc notebook-ul este blacklist-ul. De ce? Pentru ca oricat as configura la ALSA, driverul tot cretin este si nu imi ia ca default dupa fiecare reboot ce placa de sunet vreau EU. Se prea poate sa ma trezesc cu ID-urile inversate. Asa ca pun blacklist pe modulul placii onboard. Cealalta problema tine de faptul ca devii Ubuntu au comis o faza de cartea rebuturilor in ceea ce priveste interfata mea de retea ce este o Realtek. In loc sa incarce modulul corect, adica r8168 (ce nici macar nu exista in pachet, desi nenii de la Realtek au sursele pe FTP), sa zicem ca prostul imi incarca r8169 &#8211; ce functioneaza doar cand vrea pll nu cand vrea plm, iar chestia aceasta ma irita. Teribil. Deci iar intervine ideea de blacklist.</p>
<p>echo &#8220;blacklist mod_name&#8221; &gt;&gt; /etc/modprobe.d/blacklist<br />
sudo update-initramfs -u</p>
<p>Voila &#8230; sintaxa pentru blacklisting &#8230;</p>
<p><a class="a2a_dd addtoany_share_save" href="http://www.addtoany.com/share_save"><img src="http://www.saltwaterc.net/wp-content/plugins/add-to-any/share_save_171_16.png" width="171" height="16" alt="Share/Bookmark"/></a> </p>]]></content:encoded>
			<wfw:commentRss>http://www.saltwaterc.net/linux/blacklist-pentru-module-sub-ubuntu.html/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>The Website is down</title>
		<link>http://www.saltwaterc.net/windows/the-website-is-down.html</link>
		<comments>http://www.saltwaterc.net/windows/the-website-is-down.html#comments</comments>
		<pubDate>Thu, 26 Jun 2008 16:02:58 +0000</pubDate>
		<dc:creator>SaltwaterC</dc:creator>
				<category><![CDATA[Linux]]></category>
		<category><![CDATA[Mac OS X]]></category>
		<category><![CDATA[Windows]]></category>

		<guid isPermaLink="false">http://saltwaterc.net/videos/the-website-is-down.html</guid>
		<description><![CDATA[O chestie criminala cu adresa la suportul tehnic si cei ce il cer. Enjoy. http://www.thewebsiteisdown.com/]]></description>
			<content:encoded><![CDATA[<p>O chestie criminala cu adresa la suportul tehnic si cei ce il cer. Enjoy.</p>
<p><a href="http://www.thewebsiteisdown.com/" title="The Website is down" target="_blank">http://www.thewebsiteisdown.com/</a></p>
<p><a class="a2a_dd addtoany_share_save" href="http://www.addtoany.com/share_save"><img src="http://www.saltwaterc.net/wp-content/plugins/add-to-any/share_save_171_16.png" width="171" height="16" alt="Share/Bookmark"/></a> </p>]]></content:encoded>
			<wfw:commentRss>http://www.saltwaterc.net/windows/the-website-is-down.html/feed</wfw:commentRss>
		<slash:comments>1</slash:comments>
<enclosure url="http://s6.video2.blip.tv/0600000044297/Joshw-SalesGuyVsWebDude782.flv" length="128762180" type="video/x-flv" />
		</item>
		<item>
		<title>Linux vs Windows vs Mac OS X</title>
		<link>http://www.saltwaterc.net/windows/linux-vs-windows-vs-mac-os-x.html</link>
		<comments>http://www.saltwaterc.net/windows/linux-vs-windows-vs-mac-os-x.html#comments</comments>
		<pubDate>Fri, 06 Jun 2008 13:41:12 +0000</pubDate>
		<dc:creator>SaltwaterC</dc:creator>
				<category><![CDATA[Linux]]></category>
		<category><![CDATA[Mac OS X]]></category>
		<category><![CDATA[Windows]]></category>

		<guid isPermaLink="false">http://saltwaterc.net/pics/linux-vs-windows-vs-mac-os-x.html</guid>
		<description><![CDATA[Pozele spun totul &#8230; mai mult decat 1000 de cuvinte &#8230;]]></description>
			<content:encoded><![CDATA[<div style="float:left;margin-left:+10px"><a href="http://saltwaterc.net/wp-content/uploads/linux-vs-windows-vs-mac.jpg" title="Linux vs Windows vs Mac OS X"><img src="http://saltwaterc.net/wp-content/uploads/linux-vs-windows-vs-mac.thumbnail.jpg" alt="Linux vs Windows vs Mac OS X" /></a></div>
<p>Pozele spun totul &#8230; mai mult decat 1000 de cuvinte &#8230;</p>
<p><a class="a2a_dd addtoany_share_save" href="http://www.addtoany.com/share_save"><img src="http://www.saltwaterc.net/wp-content/plugins/add-to-any/share_save_171_16.png" width="171" height="16" alt="Share/Bookmark"/></a> </p>]]></content:encoded>
			<wfw:commentRss>http://www.saltwaterc.net/windows/linux-vs-windows-vs-mac-os-x.html/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>FreeBSD</title>
		<link>http://www.saltwaterc.net/linux/freebsd.html</link>
		<comments>http://www.saltwaterc.net/linux/freebsd.html#comments</comments>
		<pubDate>Fri, 29 Feb 2008 08:45:47 +0000</pubDate>
		<dc:creator>SaltwaterC</dc:creator>
				<category><![CDATA[FreeBSD]]></category>
		<category><![CDATA[Linux]]></category>

		<guid isPermaLink="false">http://saltwaterc.net/tech/freebsd.html</guid>
		<description><![CDATA[Vin imediat 3 saptamani de cand am ras Linux de pe notebook si am pus un FreeBSD in dual boot cu XP. Motivul este: majoritatea distributiilor care stateau pe langa XP Home au avut prostul obicei sa se muste cu hardware-ul. Ubuntu imi placea, dar crapa. De fapt asta este motivul pentru care l-am schimbat. [...]]]></description>
			<content:encoded><![CDATA[<p>Vin imediat 3 saptamani de cand am ras Linux de pe notebook si am pus un FreeBSD in dual boot cu XP. Motivul este: majoritatea distributiilor care stateau pe langa XP Home au avut prostul obicei sa se muste cu hardware-ul. Ubuntu imi placea, dar crapa. De fapt asta este motivul pentru care l-am schimbat. De fapt crapa orice din familia Debian. openSUSE e prea puturos si package managerul (YaST2) e dezastru in linie de comanda. Nu suport managerele grafice &#8230; imi ia prea mult timp pana gasesc si instalez un pachet pe care il vreau. In rest, de RPM nu prea mai vreau sa aud din motive ce tin de trecut. Dintr-un motiv pe care inca nu am reusit sa il explic, Arch nu ma atrage (inca?). Gentoo nu voiam sa pun pentru ca sincer nu am timp de RTFM prea gros pentru a instala un sistem. Deci mi-am pus FreeBSD. Nu ca ar fi si asta floare la ureche la instalare, mai ales pe un HDD plin, dar m-a ajutat <a href="http://www.linuxsoft.ro/forum/index.php/topic,1296.0.html" title="FreeBSD pentru incepatori - tutorial (de la Consola la CompizFusion)" target="_blank">tutorialul lui steelheart</a>, si pe alocuri cel al lui skaarj (acelasi thread, pagina 2) &#8211; iar pe alocuri am improvizat, nu pentru ca am vrut sa tai colturi in procesul de instalare, ci pentru ca anumite chestii nu au mers dupa cum zicea pe foaie.</p>
<p>In fine, nu ma apuc sa detaliez chestii. Important este ca din punctul de vedere al resurselor ocupate sta foarte bine (si zic asta de bine, nu de rau), este rapid, n-am avut probleme nici cu stabilitatea. Mi-am pus si Compiz-Fusion (evident, dooh) pentru ca am mai declarat pe undeva urmatoarele: dupa perioada OS X nu am mai putut sa privesc un desktop non-3D cu aceeasi ochi. Desi este cel mai bun sistem pentru servere (daca maine ar fi sa imi trec file serverul de pe Ubuntu Server pe FreeBSD &#8211; as face-o, dar imi trebuie niste timp pe care nu il am) sa zicem ca face o figura frumoasa si pe desktop. Ce-i drept, are lipsurile lui, despre care cred ca o sa ma apuc sa scriu la un moment dat.</p>
<p>Din punctul de vedere al hardware-ului, singura chestie care imi lipseste enorm este un driver care sa imi suporte placa de sunet care o am ca add-on, si anume o Audigy 2 ZS Notebook. Ce-i drept, n-am incercat Open Sound System care vine cu propriile module. Este o idee. Driverul snd_emu10kx care suporta Audigy si Audigy 2 nu vrea sa stie de placa mea, ba mai mult, cand l-am instalat si am uitat sa il scot din lista de boot (s-a pus automat acolo), FreeBSD a refuzat sa mai boot-eze pana nu am eliminat fizic placa din sistem. Acu pe partea de multumiri din punctul de vedere al hardware-ului este faptul ca se pupa bine cu el, ba mai mult, a rezolvat o problema pe care nu au reusit sa o rezolve nici driverele de sub Windows si nici cele de sub Linux: placa de retea &#8211; pe care o suspectez de o oarecare defectiune care se manifesta la 100Mbps. Chiar am facut teste de transfer prin SFTP, MikeS este martor. I-a picat si lui fata la testul de doua fisiere peste 1GB &#8211; nu a cazut nici unul sub 5MB/s, media a fost undeva de 11MB/s. Culmea, la 1Gbps prin conexiune directa cu serverul merge &#8220;flawless&#8221; sub Windows si Linux. Am umplut vreo 3 threaduri pe varii forumuri de specialitate in cautarea unei solutii. N-am gasit nici in prezent. Sub Windows/Linux tot ca un cur imi merge reteaua daca nu o pun pe 10Mbps &#8211; iar la 10Mbps ma apuca Sfantul Asteapta pana iau ceva de pe severul propriu care este in acelasi LAN &#8211; limitat la 100Mbps de router, un ASUS WL500g Premium. Cica in ultimele lui ore de viata, Linuxul in linie de comanda cu Midnight Commander si serverul montat prin SSHFS nu a mai cazut la trasfer (si am facut un backup masiv, vreo 30j de gigi de date). Dar este singura situatie in care a functionat corect &#8230; in rest a fost praf.</p>
<p>Oricum, articolul care mi-a dat multe idei si m-a facut sa imi pun FreeBSD in defavoarea Linux a fost acesta:</p>
<p><a href="http://www.over-yonder.net/%7Efullermd/rants/bsd4linux/bsd4linux1.php" title="BSD for Linux users" target="_blank">http://www.over-yonder.net/%7Efullermd/rants/bsd4linux/bsd4linux1.php</a></p>
<p>Iar daca ar fi sa apreciez ceva la FreeBSD este faptul ca fisierele de configurate tipice sunt foarte logice ca denumite, ca pozitionare in file system, precum si inca alte cateva chestii. Deasemenea ma bucur ca nu exista haosul din lipsa de organizare a Linuxului in ceea ce priveste anumite chestii dat fiind faptul ca un standard este greu de impus cand fiecare incearca sa traga foc la oala lui. Inchei &#8230;</p>
<p><a class="a2a_dd addtoany_share_save" href="http://www.addtoany.com/share_save"><img src="http://www.saltwaterc.net/wp-content/plugins/add-to-any/share_save_171_16.png" width="171" height="16" alt="Share/Bookmark"/></a> </p>]]></content:encoded>
			<wfw:commentRss>http://www.saltwaterc.net/linux/freebsd.html/feed</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Pidgin file transfer cu Yahoo! sub Ubuntu</title>
		<link>http://www.saltwaterc.net/linux/pidgin-file-transfer-cu-yahoo-sub-ubuntu.html</link>
		<comments>http://www.saltwaterc.net/linux/pidgin-file-transfer-cu-yahoo-sub-ubuntu.html#comments</comments>
		<pubDate>Tue, 26 Feb 2008 14:11:10 +0000</pubDate>
		<dc:creator>SaltwaterC</dc:creator>
				<category><![CDATA[Linux]]></category>

		<guid isPermaLink="false">http://saltwaterc.net/tech/linux/pidgin-file-transfer-cu-yahoo-sub-ubuntu.html</guid>
		<description><![CDATA[Una din problemele de care se plang multi din utilizatorii de Yahoo! Messenger (si nu ma refer la acei kiddies care in conjuga pe sh de zici ca discuta despre shell-uri UNIX) este faza cu transferul care pute. De trimis puteam sa trimit, dar cam atat. Azi am incercat sa ii trimit lista mea de [...]]]></description>
			<content:encoded><![CDATA[<p>Una din problemele de care se plang multi din utilizatorii de Yahoo! Messenger (si nu ma refer la acei kiddies care in conjuga pe sh de zici ca discuta despre shell-uri UNIX) este faza cu transferul care pute. De trimis puteam sa trimit, dar cam atat. Azi am incercat sa ii trimit lista mea de repositories (<a href="http://saltwaterc.net/wp-download/sources.list" title="sources.list" target="_blank">sources.list</a>) lui <a href="http://neo1984.haipa.ro/" title="The Matrix has you.." target="_blank">neo,</a> dar praf &#8230; nu voia. Deci am pus patch-ul pe care intentionam sa il pun, dar uitasem complet de el. De data aceasta meritul ii revine lui <a href="http://wonder.rodp.net/" title="blogul lui wonder" target="_blank">wonder</a> care a avut buna vointa sa acorde niste timp patchuirii surselor si punerea la download a pachetelor care rezolva problema.</p>
<p>Sursa: <a href="http://wonder.rodp.net/2008/02/pidgin.html" title="Pidgin file transfer" target="_blank">http://wonder.rodp.net/2008/02/pidgin.html</a></p>
<p><a class="a2a_dd addtoany_share_save" href="http://www.addtoany.com/share_save"><img src="http://www.saltwaterc.net/wp-content/plugins/add-to-any/share_save_171_16.png" width="171" height="16" alt="Share/Bookmark"/></a> </p>]]></content:encoded>
			<wfw:commentRss>http://www.saltwaterc.net/linux/pidgin-file-transfer-cu-yahoo-sub-ubuntu.html/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>KDE 4</title>
		<link>http://www.saltwaterc.net/windows/kde-4.html</link>
		<comments>http://www.saltwaterc.net/windows/kde-4.html#comments</comments>
		<pubDate>Sun, 27 Jan 2008 17:10:13 +0000</pubDate>
		<dc:creator>SaltwaterC</dc:creator>
				<category><![CDATA[Linux]]></category>
		<category><![CDATA[Mac OS X]]></category>
		<category><![CDATA[Windows]]></category>

		<guid isPermaLink="false">http://saltwaterc.net/tech/kde-4.html</guid>
		<description><![CDATA[A venit momentul sa scriu si cateva cuvinte despre noul si mult asteptatul KDE 4. Sub OS X nu l-am incercat din lipsa de material de teste pentru moment, si oricum, mi-am cam tras concluziile. KDE 4, asa cum a fost promis, ruleaza nativ sub Linux, Windows, OS X, mai pe scurt, sub orice platforma [...]]]></description>
			<content:encoded><![CDATA[<p>A venit momentul sa scriu si cateva cuvinte despre noul si mult asteptatul KDE 4. Sub OS X nu l-am incercat din lipsa de material de teste pentru moment, si oricum, mi-am cam tras concluziile.</p>
<p>KDE 4, asa cum a fost promis, ruleaza nativ sub Linux, Windows, OS X, mai pe scurt, sub orice platforma sub care este suportat <a href="http://en.wikipedia.org/wiki/Qt_(toolkit)" title="Qt - Wikipedia" target="_blank">Qt</a>-ul celor de la <a href="http://trolltech.com/products/qt" title="Qt - Trolltech" target="_blank">Trolltech</a>. Inainte sa apara eram destul de entuziasmat de vestea aparitiei KDE 4. Tin minte ca din intamplare citisem despre planurile ce tin de KDE 4 inca de acum 2 ani. Eram entuziasmat pentru faptul ca la vremea cand asteptam KDE 4, inca eram user de KDE 3 sub Linux. Faptul ca a fost promis nativ sub Windows/OS X nu a facut decat sa imi creasca entuziasmul.</p>
<p>O mica notificare ar fi faptul ca sub OS X rula KDE 3 si o buna parte a aplicatiilor ce tin de acest desktop environment, dar modul de rulare nu era nativ ci rula sub implementarea Apple a <a href="http://www.xfree86.org/" title="Xfree86" target="_blank">XFree86</a>. Chiar am fost curios sa vad cum arata o mana de aplicatii KDE sub OS X si au iesit momente horror &#8230; aratau ca nuca in perete si faptul ca nu rulau nativ era destul de nasol la consistenta. Acum cica s-a rezolvat problema &#8230; astept sa vad cum arata treaba in teren.</p>
<p>Sub Windows lucrurile stateau putin diferit datorita anumitor restrictii ce tin de licentierea Qt 3. Da, KDE 4 respecta numerotarea versiunii majore de Qt sub care au fost dezvoltate &#8230; KDE 3 a fost dezvoltat sub Qt 3, KDE 4 sub Qt4. Nimic nou sub Soare. Odata ce problemele s-au rezolvat incepand cu v4 a Qt, acest fapt a permis portarea aplicatiilor si sub Windows.</p>
<p>Alaltaseara mi-am pus KDE 4 sub Windows. Installer-ul desi e grafic, cel mai probabil va pune probleme celor nefamiliarizati cu lumea *nix. Mi-e mi-a adus a installer de <a href="http://www.cygwin.com/" title="cygwin" target="_blank">cygwin</a>, deci concluzia rapida a fost ca baietii de la KDE nu au dorit sa reinventeze roata. Setup-ul a inceput in mod &#8220;uzual&#8221; &#8211; downloadarea pachetelor necesare din repository (uzual &#8211; cum ziceam mai sus, precum cygwin). Instalarea nu a decurs fara probleme. La anumite pachete setupul (v0.8.5 &#8211; cea mai recenta) claca fara drept de apel. Spre exemplu am dat sa instaleze toate tool-urile de development. Desi rar am avut nevoie de <a href="http://en.wikipedia.org/wiki/Concurrent_Versions_System" title="CVS" target="_blank">CVS</a> cand de regula gaseam sursele gata arhivate, am dat sa instaleze si TortoiseCVS. Asta a fost OK. A crapat la instalarea TortoiseSVN pe care il aveam instalat deja din moment ce sunt <a href="http://en.wikipedia.org/wiki/Subversion_%28software%29" title="SVN" target="_blank">SVN</a> user, ce-i drept aveam o versiune mai veche. Clacatul se traduce prin 100% load si apasarea butonului de &#8216;Cancel&#8217; se traducea prin proces care continua sa ruleze in background, dar nu facea nimic. Multumesc cerului ca setup-ul nu stie multi-core, deci sistemul nu a fost afectat substantial la viteza, sistemul mutandu-si chestiile pe core-ul celalalt al procesorului. Ar mai fi si alte pachete la care am intampinat probleme, si culmea, pachetele respective nu erau instalate anterior precum TortoiseSVN.</p>
<p>Utilizarea este de-a dreptul seaca. In primul rand trebuie rulate in terminal doua comenzi de configurare &#8230; nu am nimic impotriva, dar in documentatie caile erau indicate complet aiurea. Le-am dibut si am rezolvat. A urmat rularea aplicatiilor propriu zise. Practic installer-ul pune executabilele si dll-urile in directorul <em>bin</em> care se gaseste in directorul de instalare al KDE 4. Cum ziceam la un moment dat, poate fi putin ciudat pentru un user nefamiliarizat cu *nix. Pentru mine a fost OK, atata ca in <em>bin</em> este un haos de nedescris. Am dibuit niste chestii cunoscute, le-am rulat, a fost relativ OK. Prima executie a fost mai dureroasa in sensul ca tre sa isi faca in prealabil o chestie care ruleaza in background, dupa care nu mai sunt probleme. Aplicatiile se integreaza bine ca aspect printre celelalte. Inafara de cateva butoane si alte chestii tipice KDE, aplicatiile arata bine. M-am jucat cateva jocuri ce vin in pachet, am editat niste fisiere text folosind Kate si Kwrite, m-am dat pe net cu Konqueror. Desi am fost incantat, inca nu am vreun gand de inlocuire a unor aplicatii ce le folosesc deja sub Windows, exemplu Windows Explorer-ul pimpuit sa il dau la o parte pentru Konqueror din motive de varii instabilitati, feature-uri care nu functioneaza sau nu functioneaza corect, etc. Poate cel putin nu pentru moment. Mai este de lucru &#8230; atat la stabilitate cat si la uzabilitate. Oricum, KDE 4 sub Windows inseamna o mana de aplicatii, si nicidecum un full desktop environment, ceea ce lasa un gust semi-amar in gura.</p>
<p>Sub Linux totul a fost destul de scurt &#8230; dupa aproximativ 15 secunde de gugălit am gasit un repository neoficial in care sa fie KDE 4 pentru ubuntu. L-am instalat usor pentru ca package managementul si-a facut treaba. Mici probleme au fost la anumite aplicatii specifice, desi in general treaba a mers OK. Desktopul plasma arata bine, pare o revolutie peste KDE 3, desi mie inca nu mi-a sters impresia ca Vista Sidebar cu ale lui gadgets s-au mutat si s-au intins pe tot desktop-ul. La un moment dat a inceput chiar sa ma enerveze acest aspect. Interfata este mult mai bine lucrata din punctul de vedere al consistentei fata de KDE 3, multe chestii seamana, dar la anumite optiuni de configurare nu s-au eliminat dialogurile interminabile si putin uzabile. Am incercat sa schimb stilul ferestrelor de pe Oxygen (cel implicit si fresh pentru KDE 4) pe alte stiluri tipice KDE 3, dar a dus la scaderea caliatii vizuale. Oricum, la nivel de interfata, vizual vorbind, KDE 4 este peste KDE 3, desi inca nu s-au reparat unele din pacatele trecutului. Ce am apreciat a fost faptul ca s-a implementat meniul tabular care are motor de cautare pe care il stiu de sub openSUSE.</p>
<p>Aplicatii nu am prea testat pentru ca sincer nu ma interesau aplicatiile in sine, ci desktop environment-ul. Oricum, aplicatiile tipice KDE le rulez cu succes si sub Gnome, si chiar daca arata putin ciudat, tot raman in sfera acceptabilului. Desi de aproximativ 4 luni am trecut de la KDE 3 la Gnome, sincer sa fiu, nu m-as mai intoarce nici pentru KDE 4. In plus, desi initial erau o mana de chestii care in KDE le gaseam imediat si sub Gnome sapam dupa ele, cu timpul situatia s-a inversat. Exact aceasta a fost senzatia cand am trecut acum din sesiunea de Gnome in cea de KDE 4. Au inceput imediat sa imi lipseasca chestii, sa ma enerveze alte chestii, sa imi lipseasca <a href="http://www.compiz-fusion.org/" title="Compiz-Fusion" target="_blank">Compiz-Fusion</a> (da, dupa un an si ceva de OS X &#8211; am ramas fan al desktop-urilor 3D).</p>
<p>Pe total KDE 4 a fost pentru mine o semi-dezamagire, sau poate ca asteptarile mi-au fost prea mari. Vom vedea ce vor aduce versiunile mai noi, pentru ca desi e release, mie inca nu imi sterge impresia de preview release.</p>
<p><a class="a2a_dd addtoany_share_save" href="http://www.addtoany.com/share_save"><img src="http://www.saltwaterc.net/wp-content/plugins/add-to-any/share_save_171_16.png" width="171" height="16" alt="Share/Bookmark"/></a> </p>]]></content:encoded>
			<wfw:commentRss>http://www.saltwaterc.net/windows/kde-4.html/feed</wfw:commentRss>
		<slash:comments>5</slash:comments>
		</item>
		<item>
		<title>Sun Microsystems a anuntat cumpararea MySQL</title>
		<link>http://www.saltwaterc.net/windows/sun-microsystems-a-anuntat-cumpararea-mysql.html</link>
		<comments>http://www.saltwaterc.net/windows/sun-microsystems-a-anuntat-cumpararea-mysql.html#comments</comments>
		<pubDate>Wed, 16 Jan 2008 21:54:09 +0000</pubDate>
		<dc:creator>SaltwaterC</dc:creator>
				<category><![CDATA[Linux]]></category>
		<category><![CDATA[Mac OS X]]></category>
		<category><![CDATA[Windows]]></category>

		<guid isPermaLink="false">http://saltwaterc.net/tech/sun-microsystems-a-anuntat-cumpararea-mysql.html</guid>
		<description><![CDATA[O stire care personal m-a luat prin surprindere: cumpararea MySQL de catre Sun pentru nu mai putin de 1 miliard de dolari, adica 800 milioane in cash, iar restul de 200 milioane urmand a intra in buzunar prin actiuni. Tranzactia care este una de mare anvergura urmeaza a se finaliza undeva in jurul Q3/Q4 al [...]]]></description>
			<content:encoded><![CDATA[<p>O stire care personal m-a luat prin surprindere: cumpararea MySQL de catre Sun pentru nu mai putin de 1 miliard de dolari, adica 800 milioane in cash, iar restul de 200 milioane urmand a intra in buzunar prin actiuni. Tranzactia care este una de mare anvergura urmeaza a se finaliza undeva in jurul Q3/Q4 al anului fiscal 2008.</p>
<blockquote><p>Chiar si Google, YouTube, Yahoo sau Wikipedia, FaceBook, Nokia folosesc platforma MySQL. Este nu doar o platforma open source, ci si foarte buna, stabila, usor de instalat, administat sau upgradat ulterior. Sun Microsystems vrea sa transforme solutia MySQL intr-o plartforma pentru companii.</p></blockquote>
<p>Serverul de baze de date MySQL produs de compania MySQL ocupa aproximativ 80% din piata serverelor Web, un fapt bine cunoscut de altfel. Sun se asteapta sa dea lovitura cumparand MySQL prin integrarea serverului de baze de date in solutiile oferite de acestia, marind in acelasi timp canalele de distributie MySQL.</p>
<p>Avand in vedere cota de piata MySQL, se poate spune cu usurinta faptul ca aceasta tranzactie va schimba fata Internetului prin prisma impactului pe care il va avea aceasta tranzactie.</p>
<blockquote><p>&#8220;Cumparam astazi o solutie pentru baze de date care a fost aleasa de clientii din toata lumea cu o viteza extraordinara&#8221;, a spus Schwartz. &#8220;Titanii web-ului folosesc toti MySQL, banci, companii auto, toate firmele din Fortune 500 folosesc MySQL&#8221;, a adaugat el.</p></blockquote>
<p>Chiar nu mai am nimic de adaugat &#8230; speechless &#8230;</p>
<p><a href="http://www.mysql.com/news-and-events/sun-to-acquire-mysql.html" title="Sun to Acquire MySQL" target="_blank">Sursa 1</a> <a href="http://www.sun.com/aboutsun/pr/2008-01/sunflash.20080116.1.xml" title="Sun Microsystems Announces Agreement to Acquire MySQL, Developer of the World's Most Popular Open Source Database" target="_blank">Sursa 2</a> &#8211; oficiale</p>
<p><a href="http://www.bloombiz.ro/article--IT_C-Internet-Sun_a_cumparat_MySQL%3A_1_miliard_de_dolari--1336629.html" title="Sun a cumparat MySQL: 1 miliard de dolari" target="_blank">Sursa 3</a> &#8211; neoficiala</p>
<p><a class="a2a_dd addtoany_share_save" href="http://www.addtoany.com/share_save"><img src="http://www.saltwaterc.net/wp-content/plugins/add-to-any/share_save_171_16.png" width="171" height="16" alt="Share/Bookmark"/></a> </p>]]></content:encoded>
			<wfw:commentRss>http://www.saltwaterc.net/windows/sun-microsystems-a-anuntat-cumpararea-mysql.html/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Cea mai urata companie IT</title>
		<link>http://www.saltwaterc.net/tech/cea-mai-urata-companie-it.html</link>
		<comments>http://www.saltwaterc.net/tech/cea-mai-urata-companie-it.html#comments</comments>
		<pubDate>Sun, 06 Jan 2008 14:17:13 +0000</pubDate>
		<dc:creator>SaltwaterC</dc:creator>
				<category><![CDATA[Linux]]></category>
		<category><![CDATA[Tech]]></category>

		<guid isPermaLink="false">http://saltwaterc.net/tech/compania-it-asupra-careia-se-indreapta-cea-mai-multa-ura.html</guid>
		<description><![CDATA[Sa fie Microsoft? Sa fie Apple? NU. Raspunsul l-am gasit fara sa vreau in timp ce imi savuram ceaiul de la ora 4 (si nu pentru ca as fi mare bautor de ceai, ci pentru ca sunt cobza) &#8230; in timp ce mana libera baga scroalle pe Linux Soft. Desi sunt un sustinator al acestui [...]]]></description>
			<content:encoded><![CDATA[<p>Sa fie Microsoft? Sa fie Apple? NU. Raspunsul l-am gasit fara sa vreau in timp ce imi savuram ceaiul de la ora 4 (si nu pentru ca as fi mare bautor de ceai, ci pentru ca sunt cobza) &#8230; in timp ce mana libera baga scroalle pe Linux Soft. Desi sunt un sustinator al acestui brand (minus placi video si recenta mea mobo care e o abit), sa zicem ca am fost luat prin surprindere cand am aflat ca aceasta companie este AsusTek pe care majoritatea o stim sub numele de ASUS. N-a pacatuit prea mult &#8230; doar s-a bagat pe o nisa cu preturi agresive, a evitat Microsoft, si a iesit Eee PC. Restul incepe sa devina istorie.</p>
<p><a href="http://itmanagement.earthweb.com/columns/executive_tech/article.php/3719776" title="The Most Hated Company In the PC Industry" target="_blank">Sursa</a></p>
<p><a class="a2a_dd addtoany_share_save" href="http://www.addtoany.com/share_save"><img src="http://www.saltwaterc.net/wp-content/plugins/add-to-any/share_save_171_16.png" width="171" height="16" alt="Share/Bookmark"/></a> </p>]]></content:encoded>
			<wfw:commentRss>http://www.saltwaterc.net/tech/cea-mai-urata-companie-it.html/feed</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Rularea aplicatiilor in mod protejat accesului fizic</title>
		<link>http://www.saltwaterc.net/windows/rularea-aplicatiilor-in-mod-protejat-accesului-fizic.html</link>
		<comments>http://www.saltwaterc.net/windows/rularea-aplicatiilor-in-mod-protejat-accesului-fizic.html#comments</comments>
		<pubDate>Tue, 11 Dec 2007 17:04:01 +0000</pubDate>
		<dc:creator>SaltwaterC</dc:creator>
				<category><![CDATA[Linux]]></category>
		<category><![CDATA[Mac OS X]]></category>
		<category><![CDATA[Windows]]></category>

		<guid isPermaLink="false">http://saltwaterc.net/tech/rularea-aplicatiilor-in-mod-protejat-accesului-fizic.html</guid>
		<description><![CDATA[Stiu &#8230; stiu &#8230; nu am mai scris de o tona de vreme. De cand am schimbat jobul, in sensul ca acum sunt programator &#8230; sa zicem ca am avut mult mai putin timp la dispozitie in general, deci implicit a trebuit sa tai de unde se poate &#8230; din pacate si din actiunea de [...]]]></description>
			<content:encoded><![CDATA[<p>Stiu &#8230; stiu &#8230; nu am mai scris de o tona de vreme. De cand am schimbat jobul, in sensul ca acum sunt programator &#8230; sa zicem ca am avut mult mai putin timp la dispozitie in general, deci implicit a trebuit sa tai de unde se poate &#8230; din pacate si din actiunea de a posta pe blog. Cred ca am gasit balaria aia de directie spre care ma indreptam, deci o sa mai scot din mine niste balarii tehnice.<span id="more-296"></span></p>
<p>Stateam si ma gandeam zilele acestea la o metoda de a proteja anumite aplicatii de accesul neautorizat in ceea ce priveste accesul fizic la o masina. Problema sta cam asa: un sistem securizat priveste utilizatorul ca un potential risc &#8230; deci nu este o entitate in care se pune incredere (si bine face, dar despre asta in episodul urmator). Chiar daca utilizez deja sistemul sub un cont de user dupa cum va povesteam <a href="http://saltwaterc.net/tech/de-ce-user-si-nu-admin.html" title="De ce USER si NU admin" target="_blank">aici</a>, browserul, clientul de mail au master password care cripteaza parolele stocate in managerele proprii &#8230; sistemul prezinta o vulnerabilitate asupra accesului direct &#8230;</p>
<p>Se intampla sa vina prieteni pe la mine (din care unii evident &#8211; impart ocupatii asemanatoare), si cum nu am o masina dedicata pentru fiecare chestie in parte, sa zicem ca muzica canta de pe aceeasi masina de pe care fac development, browsing, si alte chestii. Momentan mi s-a pus pata pe cookie-uri, desi exista si alte date confidentiale care ar trebui sa ramana pe disk-urile proprii si numai acolo. Daca eu, ca detinator al sistemului &#8230; folosesc un model de securitate prin care eu nu sunt crezut fara autentificare ca superuser &#8230; de ce ar fi altii crezuti? Simplu &#8230; ei nu ar trebui sa fie, dar sunt. Browserul isi stocheaza profilul in directorul de &#8220;user data&#8221;. Chestia asta e valabila si sub *nix &#8230; deci vorbesc la cazul general, indiferent ca e vorba de /home/{user_name} sau de %systemroot%\Documents and Settings\{user_name}\Application Data (pe scurt %appdata%). Din moment ce browserul ruleaza sub un anume user &#8230; drepturile din &#8220;user data&#8221; sunt drepturile complete ale aceluiasi user. Simplu ca buna ziua. De ce nu mi-as crede proprii prieteni? Hmm &#8230; nu stiu &#8230; cred ca de cand am inceput sa citesc documentatie despre securitate &#8230; am devenit paranoic. In fine, sa continuia asupra ideei lansate.</p>
<p>Morala este simpla &#8230; se creeaza un utilizator cu acces limitat. Sub Windows (prin modelul prezentat in articolul anterior dedicat acestui fapt) este obligatoriu ca acesta sa aiba parola diferita de o parola nula pentru a permite utilizarea runas. Sub *nix este necesara prezenta loginului daca nu exista sudo, in caz contrar un <em>sudo su {user_name}</em> &#8211; ar loga un utilizator fara drept de login. Smecheria asta cu sudo am descoperit-o cand ma chinuiam sa dau drepturi de acces unui server HTTP (Apache 2) la un director SSH montat ca local prin sshfs. Solutia a fost sa montez directorul ruland comanda de mount de sub userul serverului &#8230; dupa ce in prealabil am dar acces mai larg la montare.</p>
<p>Dupa ce utilizatorul este creat &#8230; se muta user data-ul in directorul userului nou, se interzic drepturile de acces (citire) in ceea ce priveste fisierele utilizatorului (in cazul in care grupul/others au acces de citire la fisiere), iar aplicatia care se doreste a fi rulata protejat, se ruleaza folosind noul utilizator &#8230; astfel in momentul in care aplicatia este inchisa &#8230; datele sunt in siguranta. Ideea este simpla &#8230; punerea in aplicatie cere niste consum de taste in plus.</p>
<p>Apropo de paranoia care o ziceam mai sus &#8230; nu e 100% absurda. Au existat cazuri (da, la plural) cand din vina prietenilor mei, primeam acces la datele lor fara sa fac efort &#8230; mi se oferea un authentication_id (o metoda stupida de a autentifica calculand un hash obosit pentru a scuti utilizatorii unui site de actiunea de a tasta user+pass &#8211; si care ramane constant daca se schimba parola &#8211; deci algoritmul de generare este prost pentru ca nu stie de modificari, securitatea este precara datorita faptului ca un URL de acest gen este trimis in mod plain text prin retea), sau o usa de acces la chestii din sistem &#8211; si evident &#8211; nu ratam ocazia unui prank de zile mari. Motivul pentru care mi s-a pus pata pe cookie-uri care ar putea fi folosite pentru un prank la adresa proprie &#8230; motivul pentru care am varsat literele de mai sus &#8230; cu un singur catch &#8230; aplicatia nu trebuie sa ruleze ca utilzatorul respectiv in momentul in care se primesc vizite dupa modelul celui de mai sus (si chiar in general).</p>
<h1><a href="http://saltwaterc.net/disclaimer/"><span style="color: #000000">Disclaimer</span></a></h1>
<p><a class="a2a_dd addtoany_share_save" href="http://www.addtoany.com/share_save"><img src="http://www.saltwaterc.net/wp-content/plugins/add-to-any/share_save_171_16.png" width="171" height="16" alt="Share/Bookmark"/></a> </p>]]></content:encoded>
			<wfw:commentRss>http://www.saltwaterc.net/windows/rularea-aplicatiilor-in-mod-protejat-accesului-fizic.html/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>
