Vector logo of the PHP programming language wi...

Днес ще драсна едно леко четиво за php cache " html. Тука говорим за кеширане на изхода от кода ни а не както съм писал да кешираме скритповете до opcode ниво с eAccelerator. Така за какво иде речнека да си припомним на бързо работата на php-то. Подаваме заявка на web server-a ни той приема параметрите който подаваме след това той ги подава на php скрипта той се компилира и плюе резултат в html вариант. Това е в доста общи линии. Каква ще е идеята ни тука да прескачаме заявки, да прескачаме големи блокове или не чак толкова големи блокове като директно изрисуваме вече веднъж компилирания изход. Преимуществата са очевиднинамаляна на времето за изпълнение, по малко натоварване и потребление на ресурси. Като цяло не е откриване на топлата вода нито е нещо кой знае колко сложно. Има множество класове за тая цел като PHP-ՈՒՄ Pear Cache_Lite който разполага с прекрасна функционалност но аз мисля в бъдеще да си напиша мой с доста по облекчена структура и мой си изисквания към кеширането. Сега ще разгледаме най аборигенския вариант с Output Control Functions. Така нека да кешираме нещо

//start cache all output after that will be saved

ob_start();

//generate output

echo 'Some dynamic output';

echo 'Some other dynamic output ...';

//assign output into variable

$var=ob_get_contents();

//close cache output

ob_end_flush();

Горния код е тривиален но нека да обясним какво стана. Първо декларираме от коя част в кода започва кеширането. След това си генерираме по стандартен начин изхода от кода. След това генерирания изход се присъединява към променлива която ще е достъпна по късно дали през файл някакво или през sessions това си е ваше решение. Накрая изчистваме и прекратяваме кеширането. Съвсем тривиална операция ако да речем геенрирането на кеша минава през огромни блокове от код така можем да спестим доста процесорно време като кешираме за известно време или за една сесия. Вече всичко опира то това какво искате дали да е общодостъпен кеша или да е достъпен за различен потребител.

Ընդլայնված by Zemanta

Հաջորդ հոդվածը կարող է լինել վերին հիմարություն է, բայց ես միշտ ասում եմ, որ ես ավելի լավ է, քան encoder admin. Երեկ դեռ дращех այն է javascript-AJAX եւ ստիպված է ուղարկել որոշ տվյալներ, որոնք ձեզ երբեք նրանց օգտագործում հաշ է, քանի որ սցենարը չի կիսում զանգված $_SESSION և ամեն ինչ դառնում է մի քիչ վտանգավոր. Այնպես որ, ես անում եմ հետևյալ свинщина բոլոր памери որոնք ներկայացված են POST-ը կամ ՍՏԱՆԱԼ, որպեսզի նրանց մեկ md5 hash конкатерираните պարամետրերի, ապա համեմատել. Ընդհանուր առմամբ ոչ մի վատ սխեման, ես կարծում եմ,. Хеширащи ալգորիթմներ այդ նպատակի համար ավելի MD5 , SHA, DESC.. Մինչ այստեղ ամեն ինչ պարզ է ասենք, որ պետք է օգտագործել MD5 համար ներդրումներ է պահանջում տարբերակները (ինչպես дейтвителност անել). Մենք ունենք 3 տարբերակը, որը ծառայել է ՍՏԱՆԱԼ, i=1, n=2, m=3 եւ ասում են տողերը хешриане է 123 որ մեզ դարձնում է հաջորդ MD5 hash 202cb962ac59075b964b07152d234b70. Այստեղ մի բան է շատ հետաքրքիր. Այս հաշ կնվազի վայրկյանների ընթացքում, երբ ցանկացած հարձակման. Ահա հիմա գնում է աղ եւ պղպեղ ըստ իմ պարզ գաղափարներ. Ասենք, ես առաջին եւ վերջին խորհրդանիշ տողերը, ինչպես նաեւ փոխանակել իրենց վայրից: այսպիսով ստացվում է 002cb962ac59075b964b07152d234b72 հաշ հետ, ով, եթե ինչ-որ մեկը եթե չի կարդացել կոդ օժանդակության մասին, նա անում է բաներ загрубяват, երբ փորձում է թալանել. Իրական հաշ այլ է, եւ նույնիսկ izsnifen չափազանց անիմաստ է. Բայց ինչո ՞ ւ կանգ մենք կարող ենք կիսել հաշ մի քանի բլոկների, MD5 այս դեպքում ունի երկարությունը 32 խորհրդանիշն է, եթե բաժանել 4 դաշինքի վերաբերյալ 8 հերոսները եւ նրանց գտնվելու վայրը տեղաշարժ դառնում է էլ ավելի անհարմար դրության մեջ. Далеч най приятния ефект е, че визуално си е стандартен md5 хеш и злия хахор може да си чупи докато има желание. Не съм добър по криптиране и не мога да пледирам за нещо кой знае колко фундаментално и прочие но ми допада колко е семпло като идея и реализация и съвременно надеждността е критично висока не като на нормалния MD5 които с една по грамотна видео карта се чупи за норматив.

Ето и примерен код за първата идея с размяната на първия и последния символ елементарен код от 3 реда 🙂

<?php

$hash = '202cb962ac59075b964b07152d234b70';

$first = substr($hash,0,1);
$last = substr($hash,-1);
$rest = substr($hash,1,30);
$hash = $last.$rest.$first;
echo "The real hash is : $str <br> inverted hash is : $hash";

?>

http://www.youtube.com/watch?v=Fvje9dzBHPM

Տեղափոխել ինչ-որ ծրագիր, որը ծրագրավորված առանց ակտիվ վերահսկողության տարբերակների ներկայումս դա լրիվ խելագարություն է. Ընդհանրապես, կան բազմաթիվ տարբերակներ բազար , mercurial , գիտ , svn . Այնպես որ, եթե դուք ակնկալում եք, որպեսզի բացատրել է, որ վերահսկողության տարբերակների լավ եւ ինչո ՞ ւ չի. Մենք օգտագործում ենք գիտ. Պատճառները շատ են – հեշտ է կարգավորել, շատ ճկուն, գրված Linus Торвальдс ծառայելու Linux Kernel տարբերակը, վերջին առնվազն 2 պատճառները 😉 . Այսօր ես ստիպված ստեղծել են շտեմարան, որ նոր նախագիծը. Իրականում ես ստեղծել մի քիչ репозиториев եւ դա շատ վաղուց, երբ մենք ծախսել մոռացել է ու նուրբ դեպքը տեղի է սա. Ստեղծել են շտեմարան իրար են բախվել մի քանի ֆայլերի պահպանման համար: սկզբում ամեն ինչ ընթանում էր ճիշտ. Ինքը գնացել է խանութ, ստանդարտ:

git init
echo "Short project's description" > .git/description
git config --global user.name "Your Name"
git config --global user.email "[email protected]"
git commit -a
touch .git/git-daemon-export-ok

Ընդհանուր առմամբ, ոչինչ, որ մարդու իրավունքների. Այն ժամանակ ես որոշեցի ստուգել հեռավոր մեքենա, որ съхраня բովանդակությունը եւ փորձում է մղել ինձ захлопнулась ugly հաղորդագրություն:

Pushing to գիտ://gitHost/project
remote: error: refusing to update checked out branch: refs/heads/master
remote: error: Լռելյայն, թարմացվել է ընթացիկ մասնաճյուղեր ոչ "մերկ" շտեմարանը
remote: error: մերժվել է, քանի որ դա կանի ինդեքս եւ աշխատանքի ծառ անհամատեղելի են
remote: error: ինչի դու հրել է, եւ կպահանջի &#8216;գիտ վերագործարկեք –կոշտ’ խաղում
remote: error: աշխատանք ծառ գլխին.
remote: error:
remote: error: Դուք կարող եք տեղադրել &#8216;կստանաք.denyCurrentBranch’ փոփոխական կոնֆիգուրացիա
remote: error: &#8216;անտեսել’ կամ &#8216;զգուշացնել’ է հեռավոր պահոցներում թույլ տալ, որ հրում է
remote: error: նրա ընթացիկ մասնաճյուղեր; սակայն, դա խորհուրդ չի տրվում, եթե դուք
remote: error: կազմակերպել է բարձրացնել իր աշխատանքի ծառ, որպեսզի համապատասխանի նրան, որ դուք հրել են որոշ
remote: error: այլ կերպ.
remote: error:
remote: error: To squelch this message and still keep the default behaviour, set
remote: error: &#8216;receive.denyCurrentBranch’ կարգավորում variable to &#8216;refuse&#8217;.
To գիտ://gitHost/project
! [remote rejected] վարպետության> վարպետ (branch is currently checked out)
error: failed to push some refs to &#8216;գիտ://gitHost/project’

Այնպես որ, ակնհայտ է, փորձում է комитвам հիմնական ծառ նախագծի և ծրագրային ապահովման ընդհատել է ինձ. Ընդհանուր առմամբ, ես չեմ պատրաստվում անել լրացուցիչ բաժանմունքի, քանի որ այն մարդիկ, ովքեր մասնակցում են նախագծերի պարզ են, եւ մի շարք այլ պատճառներով. Այստեղ գալիս է մի պահ, որ ասել, որ ես հայտնաբերեցի շատ некадърно տիտղոսը, սակայն դա մեկ այլ պահի. Որպես կանոն, լուծում չնչին է ։ գիտ/config ծրագրի, դուք պետք է ավելացնել հետեւյալ հրահանգը:

[receive]
denyCurrentBranch = false

Այնուհետեւ ամեն ինչ գալիս է իր տեղը.

http://www.youtube.com/watch?v=16bRiH5zfOY

Packet Tracer

Image via Wikipedia

Днес ми се наложи да демонстрирам една симулация през Cisco Packet Tracer на машина на която не беше инсталиран. В общи линии малоумщината е, че стимулатора на Cisco е за x86 машини а при мен машината беше x64. При опит за инсталация умира с грозното съобщение

Attempting to install package now
dpkg: error processing PacketTracer-5.3_3.i386.deb (–տեղադրել):
package architecture (i386) does not match system (amd64)
Errors were encountered while processing:
PacketTracer-5.3_3.i386.deb

Общо взето всичко е очевидно Debian-ския пакет не иска да се инсталира защото е за друга архитектура. От тук нататък проблема е ясен dpkg + форсирано инсталиране за да байпаснем грешката за различна платформа. Bin-ския файл на инсталатора реално е само разархивиращ се архив който се разархивира в /tmp/selfextract.XXXXX папка където XXXXX е произволен низ. В тази директория се намира .deb файлът на Packet Tracer-a. Инсталацията се извършва с командата

dpkg -i --force-all /tmp/selfextract.XXXXX/PacketTracer-5.3_3.i386.deb

Естествено с root права.

Ընդլայնված by Zemanta