2941
|
Хардуер за Линукс / Сървъри / Re: Странен проблем CentOS 5.5
|
-: Mar 13, 2011, 18:10
|
Този не е Българин. Това си е гоогле превод... Де да знам защо.... Спам в БГ форум... Платен драскач .... Анти реклама на Центос.... или пък някое чуждо дуде дето е решило да пише linux-bg.org Между другото много подобни спам съобщения преведени на Бг съм виждал в пощата.
|
|
|
2943
|
Нетехнически теми / Идеи и мнения / Предложете wiki софтуер
|
-: Mar 08, 2011, 12:21
|
Трябва да сложа нещо за публикуване на статии, но не знам какво и нямам опит с wiki-тата. Пробвам разни.... Медиавики не мога да и хвана смисъла на админстрацията - нещо все е покрита и забутана. А за да добие вид трябва и много плагини да събирам... Хареса ми идеаята wiki-тата да се съхраняват в файлове (а не в DB) - docuwiki но всички такива изглеждат много постни.  Сега пробвам tiki wiki. Засега това най много ми харесва..... Но няма локалиция на Български  и освен това tikiwiki си ползава собствен нестандартен wiki синтаксис....  Трябва ми вики системата да е писана на PHP.. Незнам какво да избера и сигурно пропускам или подценявам нещо... Идеи?
|
|
|
2946
|
Нетехнически теми / Идеи и мнения / Re: Програма за възтановяване на повредени CD И други дискове
|
-: Feb 23, 2011, 16:35
|
Ако са CD-та може да стане с полиране но само ако надраскаването е от долната страна. Ако надраскването е от горната страна на CD-то - няма начин и забравяш за възтановяване - защото записващият слой при CD-та се намира точно от горната страна под много тънък слой лак и по всяка вероятност е пре...н самият записващ слой.
При DVD-та може да си ги полираш и от горе и от долу, защото записващият слой е в средата на пласмасата.
|
|
|
2950
|
Нетехнически теми / Идеи и мнения / Re: Solaris, OpenSolaris или OpenIndiana?
|
-: Feb 15, 2011, 16:45
|
Едно време някъде във времената на RH7.3 - RH9 пробвах Соларис. Но още тогава беше много под нивото на тогавашните линукси. Беше си и много по-бавен....... Все пак да не забравяме че GNU-то е измислено точно заради липсата на функционалност и е било пачосване на комерсилните UNIX-и. Наскоро даже един се беше изцепил, че UNIX в съвременният свят вече не съществува. Ако искаш стандарт насочи се към REDHAT/Fedora/Centos. Като Centos е 100% бинарно съвместим (барабар с бъговете) с Enterprise дистрибуциите на RH. Между другото много скоро - в рамките на дни се очаква излизането на Centos5.6 и Centos6. Centos6 е много съвременна диструбуция --- някъде от нивото на Fedora13. ![Beer [_]3](https://www.linux-bg.org/forum/Smileys/default/beer.gif) Можеш да го ползваш както за Десктоп така и за сървер. ПС: А какво е OpenIndiana? Това да не би да е някоя Индианска дистрибуция? 
|
|
|
2951
|
Програмиране / Web development / Re: обръщане на масив в PHP
|
-: Feb 15, 2011, 12:02
|
Има още изключения: 4 -> Ч 6 -> Ш  За какво изобщо ви е небходима обратната транслитерация? Айде правата има смисъл за да се предостави текст (не превод - а само имена) на чужденец който той ще може да го прочете. Ами обратната? Да не е за търсене? Ако е за търсачки предполагам, че се изготвя някакъв междинен звуков образ на думите и по този звуков образ се сравняват. Mysql-а имаше нещо подобно.. SpellCheck -овете работят по подобен начин (gnu aspell). Google-a предполагам също работи по подобен 'звуков' начин, но това не оправя проблемите - по скоро съдейства за налагането на световна Шльоковизация.
|
|
|
2952
|
Програмиране / Web development / Re: обръщане на масив в PHP
|
-: Feb 14, 2011, 15:37
|
Общо взето от кирилица към латиница е лесно, но обратното няма да стане без някакви предварително въведени граматически правила.
Обратното няма каk да стане без изкуствен интелект и разпознаване на реч --- щото се губи информация още при правото преобразуване Cyr->Lat
|
|
|
2953
|
Програмиране / Web development / Re: обръщане на масив в PHP
|
-: Feb 14, 2011, 14:50
|
GeSHi (PHP): require "transliteration.php"; // твърди параметри за експорт; $GLOBALS['bg']=$bg; $GLOBALS['table_ia']=$table_ia; $GLOBALS['table_bulg']= $table_bulg; function mb_is_upper($str) { // препинателните знаци, шпация, '', и край на реда // се третират като главни букви и за тях тази функция връща 'true' return $str === $upper; } /* function ia_function($matches) { // as usual: $matches[0] is the complete match // $matches[1] the match for the first subpattern // // за достъп към елемент от стринга не може да се използва формата $str[1] - работи само за ASCII // не може да се използва и substr() - работи само за ASCII $str=$matches[0]; // print '|'.mb_substr($str,0,1,'UTF-8').mb_is_upper(mb_substr($str,0,1,'UTF-8')).'|'; if (mb_is_upper(mb_substr($str,0,1,'UTF-8'))) $ret='I'; else $ret='i'; if (mb_is_upper(mb_substr($str,1,1,'UTF-8'))) $ret.='A'; else $ret.='a'; return $ret; } function bulg_function($matches) { // Тази функция предполага че всички замествания на 'бълг' се състоят от по 1-ин символ // например за всички езици Ъ->1символ(А); Следствие на това е, // че не нужна проверка за следващият символ за запазване на 'casе'-а, както се прави в replace_function() // global $bg, $target; $S1=$matches[1]; // 'бълг' // print $S1; if (mb_is_upper(mb_substr($S1,0,1,'UTF-8'))) $ret='B'; else $ret='b'; if (mb_is_upper(mb_substr($S1,1,1,'UTF-8'))) $ret.='U'; else $ret.='u'; if (mb_is_upper(mb_substr($S1,2,1,'UTF-8'))) $ret.='L'; else $ret.='l'; if (mb_is_upper(mb_substr($S1,3,1,'UTF-8'))) $ret.='G'; else $ret.='g'; return $ret; } */ function ia_function($matches) { // as usual: $matches[0] is the complete match // $matches[1] the match for the first subpattern // // за достъп към елемент от стринга не може да се използва формата $str[1] - работи само за ASCII // не може да се използва и substr() - работи само за ASCII $S1=$matches[1]; $ST=strtr($S1,$table_ia); return $ST; } function bulg_function($matches) { // Тази функция предполага че всички замествания на 'бълг' се състоят от по 1-ин символ // например за всички езици Ъ->1символ(А); Следствие на това е, // че не нужна проверка за следващият символ за запазване на 'casе'-а, както се прави в replace_function() $S1=$matches[1]; // 'бълг' // print '|'.$S1; // 0.43 сек. (10000 цикъла) strtr($S1,$table); // 0.70 сек. (10000 цикъла) str_replace() // 1.42 сек. (10000 цикъла) 8 броя $str=preg_replace('/б/u', 'b', $S1); // 2.62 сек. (10000 цикъла) 4 броя проверки (mb_is_upper(mb_substr($S1,0,1,'UTF-8'))) $ret='B'; else $ret='b'; // 5 сек. (10000 цикъла) най-бавно чрез цикъл и търсене в масива $bg, $target $ST=strtr($S1,$table_bulg); return $ST; } function replace_function($matches) { $S1=$matches[1]; $S2=$matches[2]; //print '|'.$S1.$S2.'|'; // ако не е намерен символа в бг таблицата връща самият символ например:ы if ( ($key = array_search($S1, $bg)) === FALSE ) return $S1; $ST=$target[$key]; // print '['.$S1.']'.($key & 1); // print '['.$S1.']'.mb_strlen($ST,'UTF-8'); // бърза проверка за главна буква: $key(четно 0,2,4)-главна; $key(нечетно 1,3,5)-малка; // проверка за четност // ($key & 1) - 1 нечетно; 0 четно; // ЖРЕБЧЕВО->ZhREBChEVO // ->ZH...CH... // Ако текущият заместван символ е главна буква (и заместващият я стринг е с повече от 2 букви) // И следващият символ е главна буква то целият заместващ я стринг се капитализира Zh->ZH // проверката за mb_strlen($ST,'UTF-8')>1 се предодврати ненужното извикване на mb_is_upper($S2) return $ST; } function transliterate($cyrstr, $lang, $STRICT_CASE=true) { // връща транслителиран стринг към съответният език // транслитерационните масиви трябва да се заредени предварително. // STRICT_CASE задава дали да се запазват case-а на буквите както е при оригиналния текст // STRICT_CASE = true Запазва се case-а // STRICT_CASE = false Не се запазва case-а. Всичко се конвертира към малки букви // и накрая се капитализира първата буква на всяка дума. // STRICT_CASE == true е 6 пъти по-бавен от без STRICT_CASE // 6.4 сек. (10000 цикъла) transliterate('жжжжжж', 'en', false); // 35 сек. (10000 цикъла) transliterate('жжжжжж', 'en', true); $target=$GLOBALS[$lang]; // това е нужно за _callback функциите $GLOBALS['target']=$target; // pcretest -C // // https://bugzilla.redhat.com/show_bug.cgi?id=457064 // http://gaarai.com/2009/01/31/unicode-support-on-centos-52-with-php-and-pcre/ // http://bugs.centos.org/view.php?id=3252 // // Compilation failed: PCRE does not support \L, \l, \N, \U, or \u // трябва пакета да се прекомпилира със %configure --enable-utf8 --enable-unicode-properties // --enable-utf8 е зададено в src.rpm но --enable-unicode-properties не е // документация // http://www.pcre.org/pcre.txt // \b matches a word boundary (only ASCII letters recognized - all with values less than 256 ) // \p{Cyrillic} -- match Cyrillic letter // \P{Cyrillic} -- match NON Cyrillic letter // \p{L} letter // \p{Ll} Lower case letter // \p{Lu} Upper case letter if ($STRICT_CASE) { // !!! за да работи правилно case-insensitive трябва да има задължително u за модификатор /xxx/ui // [^a-zA-Zа-яА-Я0-9]|$ маркира край на думата - всеки не буквен знак или край на стринга $ //$str=preg_replace('/ия(?=[^a-zA-Zа-яА-Я0-9]|$)/ui', 'ia', $cyrstr); // Заменя ия->ia в края на думите като запазва малките и големите букви в оригиналния текст // етнонима 'бълг' - незвисимо къде е се транслителира като 'bulg', частен случай е България-Bulgaria // ВАЖНО! (?=.?) е Lookahead assertion за всякакъв символ .? 0 или 1 път. // Въпреки че целият израз е в скоби той не се захваща и не може да се използва като $2 // Но когато патъна вътре в Lookahead израза е обграден в скоби (?=(.?)) той се захваща като $2 // Като при това целият израз си остава Lookahead, без да оказва влияние на целият патън // това е захващане на 1 пореден Кирилски символ $1 + инфо за следващият символ в $2 (какъвто и да е той) // /(\p{Cyrillic})(.?)/ - това по същият начин захваща $1 и $2 но скача на +2 знака при следващият цикъл // докато комбинацията с Lookahead скача на +1 - т.е. обхожда всеки пореден знак } else { $str=preg_replace('/(ия)(?=[^a-zA-Zа-яА-Я0-9]|$)/ui', 'ia', $cyrstr); } return $str; }
Мисля че това е всичко. първо трябва да заредиш масивите. transliterate.php и след това: transliterate('Това е само пример, София, България', 'en', false); ако $STRICT_CASE==false игнорира спазването на всички малки и големи букви и работи много бързо. Ако обаче $STRICT_CASE==true работи много бавно щото гледа малките и големите букви да съвпадат точно и в транслителираният стринг. Например: въведен стринг тип хакерско писане: transliterate('ЖрЕбЧеВо', 'en', true); ще го транслителира правилно така ZhRеBchEvO  общо взето транслитерацията (при не спазване на CASE-a) се извършва само от това: GeSHi (PHP): { $str=preg_replace('/(ия)(?=[^a-zA-Zа-яА-Я0-9]|$)/ui', 'ia', $cyrstr); }
ако успееш да оправиш кодировките и locale-тата всичко би трябвало да работи. Не мога да се сетя входящият стринг transliterate($cyrstr ..... дали беше в cp1251 или в utf-8
|
|
|
2954
|
Програмиране / Web development / Re: обръщане на масив в PHP
|
-: Feb 14, 2011, 14:45
|
Добре де ще вадя. transliteration.php GeSHi (PHP): <?php // този файл и всички локализиращи файлове са кодирани в utf-8 // в този файл се описват масивите за транслитерация от $cyr към различните езици 'Б', 'б', 'В', 'в', 'Г', 'г', 'Д', 'д', 'Е', 'е', 'Ж', 'ж', 'З', 'з', 'И', 'и', 'Й', 'й', 'К', 'к', 'Л', 'л', 'М', 'м', 'Н', 'н', 'О', 'о', 'П', 'п', 'Р', 'р', 'С', 'с', 'Т', 'т', 'У', 'у', 'Ф', 'ф', 'Х', 'х', 'Ц', 'ц', 'Ч', 'ч', 'Ш', 'ш', 'Щ', 'щ', 'Ъ', 'ъ', 'Ь', 'ь', 'Ю', 'ю', 'Я', 'я'); // АБВГДЕЖЗИЙКЛМНОПРСТУФХЦЧШЩЪЬЮЯ // ABCDEFGHIJKLMNOPQRSTUVWXYZ // abcdefghijklmnopqrstuvwxyz // http://bg.wikisource.org/wiki/Закон_за_транслитерацията // правилата са за превод към латиница, но се подразбира English // за другите езици (например Немски) важат други правила, които не са описани в закона. // // (2) Буквеното съчетание „ия“, когато е в края на думата, се изписва и предава чрез „ia“. Sofia // Чл. 6. Името на българската държава се изписва и предава на латиница в съответствие с установената // традиция: България — Bulgaria // Bulgaria Bulgarska, Bulgarski // $table_ia/bulg изключения. // Тези 2 таблици се използват за транслитерация само след цялостен match на стринга 'ия' или 'бълг' // как точно се мачва (например накрая на думата за 'ия') се определя от самият preg_replace() // идеята на използването им е, че така може да се запази Case-а на оригиналните букви. $table_ia=array('и'=>'i', 'я'=>'a', 'И'=>'I', 'Я'=>'A'); $table_bulg=array('б'=>'b', 'ъ'=>'u', 'л'=>'l', 'г'=>'g', 'Б'=>'B', 'Ъ'=>'U', 'Л'=>'L', 'Г'=>'G'); 'B', 'b', 'V', 'v', 'G', 'g', 'D', 'd', 'E', 'e', 'Zh','zh', 'Z', 'z', 'I', 'i', 'Y', 'y', 'K', 'k', 'L', 'l', 'M', 'm', 'N', 'n', 'O', 'o', 'P', 'p', 'R', 'r', 'S', 's', 'T', 't', 'U', 'u', 'F', 'f', 'H', 'h', 'Ts','ts', 'Ch','ch', 'Sh','sh', 'Sht','sht', 'A', 'a', 'Y', 'y', 'Yu','yu', 'Ya','ya'); // http://de.wikipedia.org/wiki/Kyrillisches_Alphabet#Bulgarisch // но: България — Bulgaria // правилото за ия (ia) се запазва в края на думата 'B', 'b', 'W', 'w', 'G', 'g', 'D', 'd', 'E', 'e', 'Sch','sch', 'S', 's', 'I', 'i', 'J', 'j', 'K', 'k', 'L', 'l', 'M', 'm', 'N', 'n', 'O', 'o', 'P', 'p', 'R', 'r', 'S', 's', 'T', 't', 'U', 'u', 'F', 'f', 'Ch', 'ch', 'Z','z', 'Tsch','tsch', 'Sch','sch', 'Scht','scht', 'A', 'a', 'J', 'j', 'Ju','ju', 'Ja','ja'); ?>
|
|
|
2955
|
Програмиране / Web development / Re: обръщане на масив в PHP
|
-: Feb 14, 2011, 14:19
|
Имам такова работещо решение и точно за такова го правих. Даже мислех да го пускам публично, но се замотах....... Обаче изисква pcre-то да е компилирано (заради кирилцата) с ./configure --enable-utf8 --enable-unicode-properties в fedora/RH --enable-unicode-properties липсва. например без това $str=preg_replace('/(бълг)/ui', 'bulg', $str); модификатора /u няма да работи  и разни други работи с кирилицата и preg_replace не работеха. Не открих и никакво друго алтернативно решение освен пркомпилирането на pcre. Ако искаш ще го пусна тук, но трябва да го вадя от код и може да пропусна някоя зависмост. 3-4 функции са
|
|
|
|