Naujausi įrašai

Turinys

« 1 2 ... 7 8 »

Birželis19

WPS Office - nemokama alternatyva MS Office

Žymės: microsoft,linux,ubuntu,wps,office,libreoffice

Pasidalink!

WPS Office

WPS Office (anksčiau vadintas Kingsoft Office) - nemokama alternatyva Microsoft Office biuro programų paketui. Nors kurtas Kinijoje, ir vizualiai yra beveik identiška MS Office kopija (tradiciškai kaip ir daugelis kiniškų produktų), jis yra išbaigtas ir gerai veikiantis produktas, kurio svarbiausi privalumai - pilnas suderinamumas su MS Office failų formatais bei veikimas skirtingose operacinėse sistemose.

Keletas faktų:

  • WPS yra santrumpa iš produkto sudėtinių dalių (Writer, Presentation, Spreadsheets)
  • WPS pradėtas kurti 1988 metais (MS Office - 1990m.)
  • WPS yra palaikomas Windows, Linux, iOS, Android operacinėse sistemose
  • WPS palaiko ispell kalbos tikrinimo žodynus ir turi lietuvių kalbos tikrinimo žodyną
  • WPS yra nemokamas (yra ir mokama versija, palaikanti VBA Macros skaičiuoklėse, tačiau jei to nereikia, pilnai užteks ir nemokamos versijos)

Dėl pastarųjų trijų savybių bei geresnio suderinamumo su MS Office failų formatais nei kiti biuro programų paketai (LibreOffice/OpenOffice), WPS yra vertas dėmesio.

Kad nereiktų ilgai ieškoti, kaip įdiegti ir susikonfigūruoti WPS Linux operacinėje, štai trumpas gidas:

1. Parsisiunčiame ir įdiegiame WPS Office

WPS Office, skirtą Linux OS parsisiunčiame iš http://wps-community.org/download.html

Ubuntu ar kitai Debian šeimos distribucijai siunčiamės DEB paketą, RedHat šeimos distribucijai siunčiamės RPM paketą ir įdiegiame naudodami įprastą OS paketų tvarkyklę.

2. Įdiegiame trūkstamus šriftus

Dėl teisinių (copyright) priežasčių kai kurie sistemoje naudojami šriftai nėra įdiegiami automatiškai, dėl to tam tikri dalykai (pvz.: nenumeruoti sąrašai; bulleting) gali būti atvaizduojami nekorektiškai.

Trūkstamus šriftus reikia parsisiųsti iš WPS tinklalapio, skirto Linux OS - http://wps-community.org/download/fonts/ - ir įdiegti naudojant standartines priemones (Ubuntu atveju atidaryti šrifto failą ir paspausti „Install“).

3. Įdiegiame lietuvišką kalbos tikrinimo žodyną

WPS meniu „Review“ pasirinkus punktą „Set Spellceck Language“ bus atidarytas langas su galimų kalbų sąrašu. Paspaudus „More“ būsime nukreipti į tinklalapį su galimų žodynų sąrašu. Parsisiuntę reikiamą žodyno failą jį įdiegiame paspaudę „Install“ ir pasirinkę parsisiųstąjį kalbos failą.

WPS kalbos tikrinimas

4. Pakeičiame kitus nustatymus

WPS sisteminiame meniu „Tools“ => „Options“ sekcijoje „General and save“ pakeičiame šiuos nustatymus:

  • „Measurement Units“ pasirenkame „cm“ ir atžymime „Use character units“
  • „Save files as default“ pasirenkame „Microsoft Word“ formatą (standartiškai naudojamas Kingsoft/WPS failų formatas)
  • „Start with“ pažymime „New Document“ (kitu atveju paleidus programą bus atidarytas parsisiunčiamų šablonų pasirinkimas ir kitas crap'as)

WPS nustatymai

Taip pat naudinga nustatyti numatytąjį lapo dydį. WPS meniu „Page Layout“ pasirinkę „Size“ atsidariusiame lange pasirenkame A4 lapo dydį ir paspaudžiame „Default...“

WPS puslapio nustatymai

Viskas - galime naudotis WPS Office biuro paketu. Sėkmės!

Rugpjūtis21

Sphinx su lietuvišku stemmer'iu diegimas (Komentarai 33)

Žymės: php,sphinx

Pasidalink!

Sphinx

Sphinx yra atviro kodo teksto paieškos variklis.

 
Nors viena pagrindinių Sphinx savybių yra greitis, taip pat teigiama savybė yra indekso sudarymas, nukarpant žodžių galūnes (stemming).
Tai leidžia vykdant paiešką rasti žodžius, neatsižvelgiant į galūnę.
Pavyzdžiui, indekse žodis stalas bus pakeistas žodžiu stal, ir vykdant paiešką dokumentas bus rastas pagal užklausas stalus, stalą ir pan.
 
Įprastai Sphinx gali būti įdiegiamas iš repozitorijos, tačiau kadangi stemmer'is nėra standartinis Sphinx funkcionalumas, o yra naudojama Snowball Libstemmer biblioteka, ją reikia kompiliuoti atskirai.
Taip pat lietuvių kalbos stemmer'io standartinėje konfigūracijoje nėra, norint jį naudoti teks kompiliuoti tiek Libstemmer'į, tiek patį Sphinx'ą.
 

Pradedam :)

 
Mums reiks šių programų (galima įdiegti iš repozitorijos: mano atveju, naudojant Ubuntu - sudo apt-get install <paketas>):
 
  • make
  • g++ arba gcc kompileris
  • mysql-client
  • libmysqlclient-dev (arba mysql-devel kitose distribucijose)
 
Parsisiunčiame Sphinx source'ą iš http://sphinxsearch.com/downloads/ (konkrečiu atveju 2.0.8 versiją)
 
Į libstemmer_c direktoriją parsiunčiam Libstemmer C versiją iš https://github.com/plutzilla/sphinx-libstemmer (git clone git@github.com:plutzilla/sphinx-libstemmer.git .) arba repozitorijos fork'o.
 
Libstemmer atskirai kompiliuoti nebūtina, tačiau ją sukompiliavus (make), kartu sukompiliuojama stemwords programa. Ja galima patikrinti, kaip veikia stemmer'is. Pvz.:
./stemwords -l lt
stalas
stal
stalą
stal
 
Žinoma, yra žodžių, kurie bus paverčiami neadekvačiai, pvz.:
./stemwords -l lt
šienas
š
 
Toliau konfigūruojame Sphinx:
 
./configure --with-mysql-includes=/usr/include/mysql --with-mysql-libs=/usr/lib/mysql --with-libstemmer
 
Standartiškai Sphinx bus instaliuojamas į /usr/local. Norint instaliuoti kitoje direktorijoje, galima nurodyti --prefix=/kelias/iki/sphinx
 
Kompiliuojame Sphinx su komanda make. Instaliuojame naudodami sudo make install.
 
Norėdami naudoti Sphinx iš kitos programavimo kalbos, turime sukonfigūruoti ir suinstaliuoti biblioteką:
 
cd api/libsphinxclient
./configure
make install
 
Jei naudosime Sphinx su PHP programavimo kalba, reikia įdiegti sphinx PECL biblioteką (extension):
 
pecl install sphinx
 
Kad galėtume įdiegti bibliotekas iš PECL repozitorijos, reikia prieš tai būti įdiegus paketus php-pecl ir php5-dev
 
Instaliavus sphinx PECL biblioteką reikia php.ini faile nurodyti extension=sphinx.so bei perkrauti PHP (jei veikia kaip mod_php, perkrauti Apache; jei kaip FastCGI, perkrauti FastCGI ar FPM servisą).
 
Kad Sphinx (searchd servisas) užsikrautų užkrovus OS bei kad galėtume jį sustabdyti/perkrauti, patogu turėti Init skriptą - sukuriame failą /etc/init.d/searchd su turiniu:
 
#!/bin/bash

case "${1:-''}" in
'start')
/usr/local/bin/searchd
;;
'stop')
/usr/local/bin/searchd --stop
;;
'restart')
/usr/local/bin/searchd --stop && /usr/local/bin/searchd
;;
*)
echo "Usage: $SELF start|stop|restart"
exit 1
;;
esac
 
Jei sphinx konfigūracijos failą laikysime ne standartinėje vietoje (/usr/local/sphinx/etc/sphinx.conf) galime nurodyti parametrą --config </kelias/iki/sphinx.conf>
 
Taip pat jei sphinx paleisime ne root vartotoju, galima searchd iškviesti (įtraukti į init skriptą) per komandą:
 
su - <unix-vartotojas> -c "/usr/local/bin/searchd --config /kelias/iki/sphinx.conf"
 
sukūrę init skriptą, suteikiame jam vykdymo teises ir atnaujiname rc.d konfigūraciją:
 
sudo chmod +x /etc/init.d/searchd
sudo update-rc.d searchd defaults
 
Norint naudoti lietuvišką stemmer'į, Sphinx konfigūracijos faile aprašant indeksą reikia nurodyti:
 
morphology = libstemmer_lt
 
Taip pat naudinga lietuviškas raides paversti lotyniškomis. Tam prie indekso galime nurodyti:
 
charset_table     = 0..9, A..Z->a..z, _, a..z, \
    U+104->a, U+105->a, \
    U+10C->c, U+10D->c, \
    U+116->e, U+117->e, \
    U+119->e, U+11A->e, \
    U+12E->i, U+12F->i, \
    U+160->s, U+161->s, \
    U+16A->u, U+16B->u, \
    U+172->u, U+173->u, \
    U+17D->z, U+17E->z
 
Kaip naudotis Sphinx, aprašyti indeksus bei indeksuoti duomenis, galima rasti Sphinx dokumentacijoje http://sphinxsearch.com/docs/ arba manual'uose (man search, man searchd, man indexer).
 
Didelis dėkui lt stemmer (http://sourceforge.net/projects/ltstemmer/) iniciatyvai bei Linui Valiukui (https://github.com/pypt)

 

Rugpjūtis16

Daugiakalbiškumas PHP (Komentarai 38)

Žymės: php,utf,unicode,icu,i18n,l10n

Pasidalink!

 Kuriant daugiakalbišką programinę įrangą, viena aktualiausių sprendžiamų problemų yra programos pritaikymas skirtingų šalių kalboms (internationalization; I18n) bei kitoms kultūrinėms ypatybėms, pvz.: skaičių, datų ir kt. rašymas (localization; L10n).

 
Pavyzdžiui:
  • tiesioginis teksto vertimas, teksto rikiavimas, specialių simbolių vertimas lotyniškais (transliteration);
  • daugiskaitinės formos, pvz.: lietuvių kalboje yra trys daugiskaitinės formos - vienas obuolys, du obuoliai, dešimt obuolių; anglų kalboje dvi - one apple, two apples, ten apples;
  • datos rašymas, pvz.: Europoje 2013-08-16, JAV 8/16/13;
  • valiutos rašymas, pvz.: 10 Lt, $10
  • ilgio (metrai, pėdos), svorio (kg, svarai), tūrio (litrai, galonai) ir kt. standartai (metric/imperial);
  • teksto iš kairės (left-to-right; ltr), teksto iš dešinės (right-to-left; ltr) rašymas;
  • ir kt.
 
Su tekstu susijusios problemos dažniausiai sprendžiamos naudojant standartines operacinės sistemos priemones - lokales.
Pvz.:
 
setlocale(LC_TIME, 'lt_LT.UTF-8');
echo strftime('%c'); // 2013 m. rugpjūčio 16 d. 11:50:29
setlocale(LC_TIME, 'en_US.UTF-8');
echo strftime('%c'); // Fri 16 Aug 2013 11:50:29 AM EEST
 
Visgi, šios priemonės neatitinka visų poreikių, be to, lokalės turi būti įdiegtos pačioje operacinėje sistemoje.
Linux OS gauti įdiegtų lokalių sąrašą galima komanda locale -a
 
Projektas, sprendžiantis daugiau problemų, susijusių su unikodo (UTF) internacionalizacija, vadinamas ICU (Internationalization Components for Unicode): http://site.icu-project.org/
Norint naudotis ICU, operacinėje sistemoje turi būti įdiegt ICU biblioteka (Ubuntu atveju libicu*). PHP biblioteka vadinasi intl, ją galima įdiegti iš PECL repozitorijos arba Ubuntu aveju kaip paketą php5-intl.
 

Transliteravimas

 
Dažnai tenka ne lotyniškus simbolius paversti lotyniškais, pvz.: formuojant lotyniškais simboliais pagrįstus nuorodų fragmentus (slug).
Tam galima pasinaudoti Transliterator klase:
 
$id = "Any-Latin; NFD; [:Nonspacing Mark:] Remove; NFC; [:Punctuation:] Remove; Lower();";
$transliterator = Transliterator::create($id);
$string = "ąčiū!?_-&% ĄČĘĖĮŠŲŪŽ";
echo $transliterator->transliterate($string);
// aciu aceeisuuz
 
Slug atveju tarpo simbolius paversti brūkšneliais galima naudojant Regxp:
 
echo preg_replace('/\s+/', '-', 'tekstas   tekstas2');
// tekstas-tekstas2
 
Transliterator::create() perduodamą argumentą galima susiformuoti pagal ICU transformacijos gidą: http://userguide.icu-project.org/transforms/general
NFC, NFD - unikodo normalizacijos ir denormalizacijos funkcijos. Plačiau: http://en.wikipedia.org/wiki/Unicode_equivalence
 

Rikiavimas

 
Standartiškai masyvas PHP rikiuojamas (sort) taip:
 
$arr = ['urvas', 'ūkas', 'Ukmergė', 'ugnis'];
sort($arr);
print_r($arr);
// Array ( [0] => Ukmergė [1] => ugnis [2] => urvas [3] => ūkas ) 
 
Matome, jog rezultatas nėra teisingas (pirma rikiuojama didžioji raidė, lietuviška ū rikiuojama paskutinė).
 
Įprastu atveju galima sort() funkcijai nurodyti, kad būtų naudojama sistemos lokalė (perduodant SORT_LOCALE_STRING konstantos reikšmę kaip antrą parametrą):
 
setlocale(LC_ALL, 'lt_LT.UTF-8');
$arr = ['urvas', 'ūkas', 'Ukmergė', 'ugnis'];
sort($arr, SORT_LOCALE_STRING);
print_r($arr);
Array ( [0] => ugnis [1] => ūkas [2] => Ukmergė [3] => urvas )
 
Rezultatas teisingas, tačiau tai turi neigiamų pasėkmių, nes lokalė greičiausiai bus nustatoma globaliai, be to, ji turi būti įdiegta operacinėje sistemoje.
 
Kitas variantas yra naudoti Collator klasę:
 
$arr = ['urvas', 'ūkas', 'Ukmergė', 'ugnis'];
$collator = new Collator('lt_LT');
$collator->sort($arr);
print_r($arr);
// Array ( [0] => ugnis [1] => ūkas [2] => Ukmergė [3] => urvas )
 

Skaičių formatai

 
Skirtingose kalbose dažnai naudojami skirtingi skaičių (taip pat valiutos) formatai. Tinkamai juos atvaizduoti galima naudojant NumberFormatter klasę:
 
$ltNum = new NumberFormatter('lt_LT', NumberFormatter::CURRENCY);
echo $ltNum->formatCurrency(1234567890.25, 'LTL');
// 1,234,567,890.25 Lt
echo $ltNum->formatCurrency(1234567890.25, 'EUR');
// 1,234,567,890.25 €
echo $ltNum->formatCurrency(1234567890.25, 'USD');
// 1,234,567,890.25 US$

$enNum = new NumberFormatter('en_US', NumberFormatter::CURRENCY);
echo $enNum->formatCurrency(1234567890.25, 'LTL');
// LTL1,234,567,890.25
echo $enNum->formatCurrency(1234567890.25, 'EUR');
// €1,234,567,890.25
echo $enNum->formatCurrency(1234567890.25, 'USD');
// $1,234,567,890.25
 
Matome, jog skirtingos lokalės skirtingai atvaizduoja valiutas.
 
NumberFormatter klasė taip pat leidžia skaičių versti tekstu:
 
$ltNum = new NumberFormatter('lt_lt', NumberFormatter::SPELLOUT);
echo $ltNum->format(1234567890.25);
// vienas milijardas du šimtai trisdešimt keturi milijonų penki šimtai šešiasdešimt septyni tūkstančiai aštuoni šimtai devyniasdešimt kablelis du penki

$enNum = new NumberFormatter('en_US', NumberFormatter::SPELLOUT);
echo $enNum->format(1234567890.25);
// one billion two hundred thirty-four million five hundred sixty-seven thousand eight hundred ninety point two five
 
Tiesa, skaičius išverstas ne idealiai, tačiau žiūrint pozityviai, yra galimybė contribute'inti į ICU projektą ir prisidėti prie ICU tobulinimo :)
 

Teksto formatavimas

 
Verčiant tekstą į skirtingas kalbas svarbu ne tik užtikrinti paties teksto fizinį vertimą, bet ir datų, skaičių bei jų daugiskaitinių formų tinkamą atvaizdavimą.
Tam tinkama naudoti MessageFormatter klasė. Pavyzdžiui, atvaizduojant datas:
 
$enDate = new MessageFormatter('en_US', 'Today {0,date,short}');
echo $enDate->format(array(time()));
// Today 8/16/13
$enDate = new MessageFormatter('en_US', 'Today {0,date,long}');
echo $enDate->format(array(time()));
// Today August 16, 2013

$ltDate = new MessageFormatter('lt_LT', 'Šiandien {0,date,short}');
echo $ltDate->format(array(time()));
// Šiandien 2013-08-16
$ltDate = new MessageFormatter('lt_LT', 'Šiandien {0,date,long}');
echo $ltDate->format(array(time()));
// Šiandien 2013 m. rugpjūtis 16 d.
 
MessageFormatter konstruktoriui perduodame lokalę ir teksto formatą, o metodui format() masyvą duomenų, kuriuos apdoroja formateris. {0,date,short} reiškia, jog pirmą format() metodui perduoto atributo masyvo elementą naudosime kaip trumpo formato datą.
 
MessageFormatter taip pat aktualu naudoti su daugiskaitinėmis formomis, pvz.:
 
$x = new MessageFormatter('lt_LT', 'Parduodu {0, plural, one{{0,number} obuolį} few{{0,number} obuolius} other{{0,number} obuolių}} ir {1, plural, one{{1,number} bandelę}few{{1,number} bandeles}other{{1,number} bandelių}} už {2,number,currency}');
echo $x->format(array(15, 2, 15));
// Parduodu 15 obuolių ir 2 bandeles už 15.00 Lt
 
Daugiau informacijos apie teksto formatavimą: http://userguide.icu-project.org/formatparse/messages
 
Kadangi PHP manual'e intl funkcijos nėra pilnai dokumentuotos, jei rasite daugiau naudingų panaudojimo atvejų, pasidalinkite komentaruose. Būsiu dėkingas :)

 

Gegužė30

Mobilusis internetas - kurį pasirinkti (Komentarai 172)

Žymės: internetas,tele2,mezon,omnitel,bite,omniconnect,vodafone mobile connect

Pasidalink!

Neseniai turėjau progą išmėginti skirtingus mobiliojo interneto tiekėjus.

Iki tol namuose naudojausi VDNet interneto tiekėjo paslaugomis, tačiau CGates nupirkus VDNet, sumažėjo kabelinės televizijos kanalų kiekis, o kainos pakilo, todėl nusprendžiau pamėginti naudotis mobiliuoju internetu.
Užbėgant įvykiams už akių - išmėginau daugelį interneto tiekėjų ir vėl grįžau prie CGates (tiesa, tik interneto, bet ne televizijos) siūlomo optinio (FTTB; Fiber to the building) interneto ryšio. 

Mezon

LRTC teikiama 4G interneto paslauga „Mezon“ pasirodė geriausia alternatyva įprasto interneto tiekėjams namuose - neribojamas parsisiunčiamų duomenų kiekis, akcentuojamas didelis ryšio greitis, kainos taip pat yra labai padorios ir turėtų gerai konkuruoti su įprasto interneto tiekėjų siūlomomis kainomis.
Taip pat jie siūlo šaunų įrenginį „Mezon YZI“, kuris sukuria bevielio tinklo (Wi-fi) zoną, prie kurios galima prijungti iki 8 įrenginių (kompiuterių, mobiliųjų telefonų).
Vis dėlto, ryšys labai priklauso nuo vietos mieste, todėl renkantis šį interneto tiekėją reiktų labai atidžiai peržiūrėti tinklo aprėpties žemėlapį. Nors gyvenu netoli Vilniaus centro, mano name internetas veikė lėtai ir nestabiliai, nors darbe ar pačiame miesto centre veikė puikiai.
Taip pat naudojantis „Mezon“ nepavyko tinkamai susikonfigūruoti prisijungimo prie vidinio tinklo (VPN), todėl darbo reikalams negalėjau pilnai naudotis šiuo interneto tiekėju.

Omnitel (OmniConnect)

Šios kompanijos marketingas veikia puikiai, tačiau realybėje jų siūlomi interneto sprendimai yra nieko verti. Nors su brangiausiu „OmniConnect“ (galbūt šis prekinis ženklas nebenaudojamas?) interneto planu duodamas „neribotas“ duomenų kieis, bet pasiekus 10 GB parsisiunčiamų duomenų kiekį per mėnesį, ryšio sparta sumažinamas iki 120kbps. Skamba kaip apgaulė, bet jie tai vadina „Sąžiningo naudojimosi taisykle“. Šiais laikais, kuomet tinklalapiai naudoja daug grafinės informacijos, naršyti tokiu greičiu yra visiškai neįmanoma, o 10GB išnaudojama atliekant tik būtiniausias užduotis, jau nekalbant apie didelį duomenų kiekio parsisiuntimą (pvz.: intensyvesnį video filmukų žiūrėjimą internetu).
„Omnitel“ akcentuoja didelę jų teikiamo interneto spartą (Su 4G net iki 80Mbps), bet tai reiškia, kad duomenų limitą pasieksite dar greičiau, t.y. greičiau nebegalėsite naudotis internetu apskritai. Kažkoks bullshit, juo labiau, kad mano namuose „OmniConnect“ veikė kur kas nestabiliau už „Bitės“ siūlomą „Vodafone Mobile Connect“.

Bitė (Vodafone Mobile Connect)

Sąlygos panašios kaip ir „Omnitel“, tačiau su brangiausiu planu (vadinasi „NO LIMIT“, bet limitai visgi egzistuoja) mėnesio limitas yra 15GB, o po to ryšio sparta apribojama iki 512kbps (tiesa, jų tinklalapyje tos informacijos neradau, ją rasite tik sudarę sutartį, todėl skaitykite, po kuo pasirašote).
 
Svarbu atkreipti dėmesį į tai, kad tiek „Omnitel“, tiek „Bitės“ modemai neveikia su jokia kita SIM kortele, išskyrus jų pačių. Nesu tikras, ar tai yra parašyta įsigijimo sąlygose, bet bent jau mokant pilną kainą už modemą, norėtųsi gauti „nepririštą“ įrenginį. 

Tele2

Tai vienintelis mobilaus interneto tiekėjas, kurio nebandžiau. Nežinau, kokią strategiją renkasi Tele2, bet panašu, kad interneto paslaugos jiems nėra prioritetas. Su brangiausiu planu suteikiama tik 5GB duomenų, kas šiais laikais yra absurdiškai juokingas kiekis.
Taip pat keistai atrodo ir jų mobiliųjų telefonų paslaugų planai - paskutiniu metu buvo atsisakyta „Smart“ planų, kurie suteikia bent kažkokį nemokamą kiekį duomenų. Panašu, kad jų požiūris ir į išmaniuosius telefonus yra tik kaip į gražų aksesuarą.

Išvados

Jei reikia greito ir sąlyginai nebrangaus mobilaus interneto mieste ir nebijote, kad liksite be ryšio, jei kokia siena užstos ryšio anteną, rinkitės „Mezon“. Kitu atveju - „Vodafone Mobile Connect“.
Jei galvojate naudoti mobilų internetą tik namie (kalbu apie daugiabutį namą), pasidomėkite, ar nėra optinio interneto tinklo (FTTB) jūsų name. Jei yra, naudokite jį. Tiekėjų yra tikrai nemažai, o kokybės ir kainos santykis geresnis nei mobiliojo interneto tiekėjų.
Visgi, jei retai reikia pasinaudoti internetu mieste, paprasčiausias variantas yra pasiieškoti (tebūnie mokamų) bevielio interneto zonų, arba pasinaudojus išmaniuoju telefonu (naudojant Portable WiFi hotspot; Android turi šią galimybę nuo 2.2 versijos).

Liepa25

Compiz downgrade'inimas Ubuntu 11.04 OS (Komentarai 194)

Žymės: linux,ubuntu,compiz

Pasidalink!

Compiz Cube

Ubuntu 11.04 versija bei jai artimos distribucijos (pvz.: Linux Mint 11) mano nuomone, yra vienas prasčiausių release'ų.

Apie Unity aplinkos nebrandumą rašė Vidmantas, bet net ir standartinėje Gnome aplinkoje (Linux Mint 11 atveju) yra palikta nemažai defektų. Vienas jų - dar nestabilios Compiz versijos (0.9) integravimas, dėl ko neveikia ar veikia nekorektiškai daugelis vizualinių elementų (neveikia Desktop Cube bei kiti plugin'ai, dingsta lango valdymo mygtukai ir t.t.).

Vienas problemos sprendimo būdų, siūlomų įvairiuose forumuose, yra Compiz versijos downgrade'inimas (vietoj nestabilios 0.9 naudojimas 0.8). Tai galima atlikti įvykdžius komandas:

sudo apt-get purge compiz compiz-plugins-extra compiz-plugins-main
sudo apt-get purge compizconfig-settings-manager sudo add-apt-repository ppa:guido-iodice/compiz-0.8.6-natty
sudo apt-get update
sudo apt-get upgrade
sudo apt-get install compiz compiz-core compiz-fusion-plugins-main   compiz-fusion-plugins-extra compiz-fusion-plugins-unsupported compiz-gnome compiz-plugins compizconfig-backend-gconf   compizconfig-settings-manager libdecoration0 python-compizconfig   simple-ccsm

 

Balandis11

MongoDB (Komentarai 233)

Žymės: php,sql,mongo,mongodb,mysql,nosql

Pasidalink!

MongoDB yra dokumentinė NoSQL tipo duomenų bazių valdymo sistema.

Noriu pasidalinti savo prezentacija apie MongoDB - tikiuosi bus naudinga.

Balandis05

GNU screen (Komentarai 252)

Žymės: linux,ssh,gnu,screen,unix

Pasidalink!

GNU screen yra virtualus terminalo multiplekseris. Naudojant jį viename konsolės lange galima paleisti kelis virtualius terminalus, persijungti tarp jų, padalinti langą ir matyti jame kelis terminalus, kuriuose galime vykdyti iškart kelias komandas (ar paleisti kelias programas). Galima paleisti ir kelias screen instancijas.

GNU screen

Taip pat galima screen'e paleisti programą ir prisijungti prie jos iš kito kompiuterio (per tą pačią screen'o instanciją). Atsijungus nuo terminalo, programa, paleista per screen'ą, yra vykdoma toliau, tuo tarpu įprastai paleidus programą ir atsijungus nuo terminalo, ji automatiškai išjungiama. Panaudojimas gali būti labai įvairiapusiškas, pvz.: serveryje, kur didelė interneto sparta, per screen'ą paleidžiame Torrent klientą, paleidžiame siųsti failus (žinoma, legalius), ir vėliau iš kito kompiuterio prisijungę prie to paties screen'o toliau naudojamės programa.

Taipogi per screen'ą naudinga paleisti ilgai trunkančias komandas nutolusiame serveryje, kuomet reikia užtikrinti, kad jos baigs vykdytis net ir atsijungus nuo serverio, pvz.: dingus interneto ryšiui ar elektrai.

Screen'as paleidžiamas komanda:
$ screen

Taip pat galima paleidžiant screen'ą, jam suteikti pavadinimą:
$ screen -S <pavadinimas>

Visas paleistų screen instancijų sąrašas:
$ screen -ls

Prisijungti prie screen'o:
$screen -r

Jei paleistos kelios screen'o instancijos, gausite jų sąrašą:
There are screens on:
31296.pavadinimas (04/05/2011 06:04:51 PM) (Detached)
30781.pts-0.paulius (04/05/2011 05:39:06 PM) (Attached)
2 Sockets in /var/run/screen/S-paulius.

Tuomet reiks nurodyti screen'o instancijos pavadinimą, pvz.:
$ screen -r 31296.pavadinimas

Prisijungus prie screen'o, komandos (išeiti, atsijungti, padalinti langą etc.) atliekamos paspaudus klavišų kombinaciją Ctrl+a (toliau - C-a), ją atleidus ir paspaudus kitą klavišą.
Svarbu atkreipti dėmesį į tai, kad skiriasi komandų didžiosios ir mažosios raidės (pvz.: C-a x atlieka kitką nei C-a X).

Komandos

Išeiti (detach - neišjungiant paties screen'o): C-a d
Išeiti (exit - išjungiant screen'ą): C-a \ (taip pat galima išeiti uždarant langus su Ctrl+d)
Užrakinti screen'ą: C-a x

Langų valdymo komandos

Sukuriamas naujas langas: C-a c
Uždaromas esamas langas: C-a k
Atidaromas kitas langas: C-a <space>
Atidaromas ankstesnis langas: C-a <backspace>
Parodomas langų sąrašas, su galimybe pasirinkti norimą: C-a "
Keičiamas lango pavadinimas: C-a A

Regionų (padalintų langų) valdymo komandos

Padalinamas aktyvus langas horizontaliai: C-a S
Padalinamas aktyvus langas vertikaliai: C-a |
Pereinama į kitą regioną: C-a <tab>
Uždaromas aktyvus regionas: C-a X

Sukūrus naują regioną ir perėjus į jį, reikia arba jame sukurti naują langą (C-a S), arba atidaryti jau egzistuojantį langą (C-a <space> arba išsirinkti iš sukurtų langų sąrašo - C-a ").

Vasaris15

Užklausos tarp skirtingų domenų (Komentarai 284)

Žymės: saugumas,ajax,http,xmlhttprequest,flash,cookies,jsonp,proxy

Pasidalink!

AJAX

XMLHttpRequest (AJAX) užklausos

Naršyklės įprastai neleidžia daryti XMLHttpRequest (liaudyje labiau žinomo kaip AJAX) užklausų į kitą domeną, kadangi tai neatitinka Same Origin Policy saugumo koncepcijos.

Firefox 3.5 ir Safari 4 buvo įdiegta naujai sukurta naršyklių technologija CORS (cross-origin resource sharing), kuri leidžia daryti XMLHttpRequest užklausas į kitus domenus, kai šie patvirtina, jog leidžia konkretiems šaltiniams daryti užklausas.

Kaip tai veikia?

Vartotojo naršyklė, siųsdama XMLHttpRequest užklausą į kitą domeną, siunčia HTTP request header'į Origin su savo domeno reikšme.

Serveris siunčia atsakymą su HTTP response header'iu Access-Control-Allow-Origin su konkretaus domeno, kuriam leidžiama daryti užklausas, reikšme, arba * reikšme, kuri leidžia visiems šaltiniams daryti užklausas. HTTP response headerio formavimo pavyzdžiai PHP kalba:

header('Access-Control-Allow-Origin: http://www.domenas.tld');

header('Access-Control-Allow-Origin: *');

Šiuos header'ius taip pat gali siųsti ir pats HTTP serveris, pvz.: Apache, naudojant mod_headers modulį.

Daugeliu atveju to turėtų pakakti, tačiau CORS specifikacija leidžia daryti sudėtingesnes užklausas, nurodant leidžiamą HTTP metodą, atitinkamus header'ius ir kt., pvz.:

HTTP request header'iai:

Origin: http://www.domenas.tld
Access-Control-Request-Method: POST
Access-Control-Request-Headers: belekoks-headeris

HTTP response header'iai

Access-Control-Allow-Origin: http://www.domenas.tld
Access-Control-Allow-Methods: POST, GET, OPTIONS
Access-Control-Allow-Headers: belekoks-headeris
Access-Control-Max-Age: 1728000

Tam tikrais atvejais reikia nurodyti HTTP response header'į, leidžiantį XMLHttpRequest užklausas:

Access-Control-Allow-Headers: X-Requested-With

JSONP

Kitas būdas, norint gauti ir apdoroti duomenis yra naudoti <script> elementus, kadangi jiems negalioja Same Origin Policy, pvz.:

<script type="text/javascript" src="http://kitas-domenas.tld/skriptas.php?parametras=reiksme"></script>

Tačiau kadangi šis skriptas bus iškart įvykdytas, vien duomenų pasiimti nepavyks. Dėl to, skriptas turi grąžinti kvietimą į funkciją, kuri apdoros duomenis. Pvz. šiuo atveju skriptas.php turėtų grąžinti tokį rezultatą:

funkcija({"jsonDuomenuStruktura": "reiksme"});

Čia funkcija - Javascript funkcija, kuri apdoroja gautus duomenis.

Šis metodas vadinamas JSONP (JSON with prefix).

Akivaizdu, kad šiuo metodu galima gauti ir perduoti duomenis tik GET metodu. Be to, serveris, kuris grąžina rezultatus turi būti pritaikytas JSONP duomenų perdavimui, t.y. turi būti galimybė parametrais nurodyti funkciją, kuri bus iškviečiama.

Taip pat, kadangi įterpiamas svetimas Javascript kodas, atsiranda galimų saugumo spragų, nes skriptas gali įrašyti bet kokį HTML kodą ir kitaip manipuliuoti turiniu, be to atsiranda galimybė perimti duomenis naudojant CSRF pažeidžiamumą.

Vietinis proxy

Dar vienas metodas yra naudoti skriptą tame pačiame domene, kuris serverio (ne naršyklės) lygyje padarytų HTTP užklausą į kitą domeną ir grąžintų rezultatus, pvz.: failas proxy.php, esantis tame pačiame domene:

<?php
echo file_get_contents('http://kitas-domenas.tld/skriptas.php'); // Geriau naudoti cURL

Tokiu atveju pakaks daryti užklausą į tame pačiame domene esantį proxy.php ir taip patenkinti Same Origin Policy saugumo koncepciją.

Adobe Flash užklausos

Adobe Flash elementai, darydami užklausą į kitą serverį (pvz.: norėdami pasiimti tam tikrus duomenis), kreipiasi į tame domene esantį crossdomain.xml failą (pvz.: http://www.domenas.tld/crossdomain.xml), kuriame aprašomos taisyklės, nurodančios, kokiems šaltiniams leidžiama skaityti duomenis iš serverio.

crossdomain.xml failo pavyzdys:

<?xml version="1.0"?>
<!DOCTYPE cross-domain-policy SYSTEM "http://www.macromedia.com/xml/dtds/cross-domain-policy.dtd">
<cross-domain-policy>
    <allow-access-from domain="*"/>
    <allow-http-request-headers-from domain="*" headers="X-Requested-With"/>
</cross-domain-policy>

Verta pastebėti, jog darydamas užklausas, Flash neperduoda slapukų (pvz.: sesijos identifikatorių), todėl juos perduoti reikia kaip atskirus Flash parametrus.

Bonus tip: HTTP headeris Content-disposition

Pavyzdys: failas http://www.domenas.tld/paveikslelis.php generuoja paveikslėlį, tačiau norint jį išsaugoti, siūlomas failo vardas bus paveikslelis.php.

Norint jį pakeisti, galime siųsti HTTP response header'į:

Content-disposition: inline; filename="grazus-pavasaris.jpg"

Jei norime iškart iškviesti failo išsaugojimo langą, galime nurodyti:

Content-disposition: attachment; filename="grazus-pavasaris.jpg"

Lapkritis15

Smarty 3 apžvalga (Komentarai 100)

Žymės: php,smarty

Pasidalink!

Smarty

Po beveik 2 metus (2008-12-16 - 2010-11-12) trukusio programavimo, buvo išleista 3 PHP šablonų variklio „Smarty“ versija.

Sistema buvo perrašyta iš pagrindų, pritaikyta PHP 5 versijai, buvo sukurtas naujas sintaksės nagrinėjimo variklis (parser), pagerėjo sistemos darbo našumas, šiek tiek pasikeitė šablonų sintaksė.

Nors egzistuoja kontraversiškos nuomonės, reikalingas PHP kalbos šablonų variklis ar ne, „Smarty“ suteikia papildomas galimybes atskiriant prezentacijos logiką nuo programos logikos. Be to, techniniams dizaineriams, nemokantiems PHP kalbos, dirbti su „Smarty“ gali būti patogiau, saugiau ir produktyviau.

Smarty 3 sintaksė šiek tiek pasikeitė nuo 2 versijos, todėl seni šablonai gali neveikti, ypač jei jie buvo parašyti su klaidomis. 3 versija į sintaksės klaidas žiūri griežčiau, tačiau turi papildomų galimybių.

Kas pasikeitė Smarty 3 versijos šablonų sintaksėje nuo 2 versijos:

Atsisakyta {ldelim} ir {rdelim}

2 versijoje norint naudoti { ir } simbolius šablone (pvz.: rašant Javascript funkcijas) juos reikdavo pakeisti {ldelim} ir {rdelim} simboliais arba rašyti tekstą tarp {literal} ir {/literal}. Dabar to daryti nebereikia, tačiau rašant kintamuosius ar funkcijas nebegalima palikti tarpų tarp skirtukų, pvz,: { $foo } ir išves tokį tekstą, o ne kintamojo reikšmę.

Masyvų modifier'is

2 versijoje norint modifier'iui perduoti visą masyvą, o ne atskirus jo elementus, reikdavo pridėti @ simbolį, pvz.: {$masyvas|@count}. Dabar visas masyvas perduodamas modifier'iui, pvz.: {$masyvas|count}.

{php} žymės

Standartiškai {php} žymės 3 versijoje yra uždraustos. Jas galima įjungti nurodant $smarty->allow_php_tag = true;

Kabutės parametruose

2 versijoje kabutės parametruose buvo nebūtinos, tačiau 3 versijoje jas naudoti būtina, pvz.: {include file="/kelias/iki/sablono.tpl"}

Visi pakeitimai, nesuderinami su „Smarty“ 2 versija.

Taip pat buvo padaryti pakeitimai, palengvinantys darbą su duomenimis:

Išplėstas {foreach} funkcionalumas

3 versijoje galima naudoti tokią {foreach} sintaksę:

{foreach $masyvas as $reiksme}

{$reiksme}

{/foreach}

Taip pat palengvintas ciklo savybių gavimas, pvz.:

{$reiskme@key} - masyvo raktas

{$reiksme@iteration} - ciklo iteracija

{$reiksme@total} - visas masyvo elementų kiekis

{$reiksme@first}, {$reiksme@last} - grąžina true, jei elementas pirmas/paskutinis. Patogu naudoti sąlygos sakiniuose

2 „Smarty“ versijoje šios savybės buvo pasiekiamos per {$smarty.foreach.<ciklo vardas>.<savybė>}

{strip} blokas

Naudojant {strip} ir {/strip} galima nurodyti, jog visas output'as šiame bloke bus rašomas vienoje eilutėje, pašalinant tarpus, naujas eilutes ir kt. whitespace simbolius.

„Smarty“ 3 versijoje taip pat atsirado šablonų paveldėjimas, funkcijų kūrimas pačiuose šablonuose ir kt. Taip pat šis tas pasikeitė PHP pusėje, pvz.: dabar norint paveldėti Smarty klasę, reikia iškviesti tėvinį konstruktorių - parent::__construct();

Pilna „Smarty“ 3 versijos apžvalga smarty.net tinklalapyje.

Spalis07

Kaip pasakos baigiasi iš tikrųjų (Komentarai 154)

Žymės: pasakos,aladinas,gražuolė ir pabaisa,miegančioji gražuolė,pelenė,raudonkepuraitė,snieguolė,undinėlė

Pasidalink!

Aladinas:

Aladinas

Gražuolė ir pabaisa:

Gražuolė ir pabaisa

Miegančioji gražuolė:

Miegančioji gražuolė

Pelenė:

Pelenė

Raudonkepuraitė:

Raudonkepuraitė

Snieguolė:

Snieguolė

Undinėlė:

Undinėlė

« 1 2 ... 7 8 »

Įrašų RSS Įrašų RSS