RSS
 

Archive for December, 2008

Laudate Dominum, Почитайте Господ

15 Dec

Laudate Dominum omnes gentes
Laudate eum, omnes populi

Quoniam confirmata est
Super nos misericordia ejus,
Et veritas Domini manet in aeternum.
Gloria Patri et Filio et Spiritui Sancto.

Sicut erat in principio, et nunc, et semper.
Et in saecula saeculorum.
Amen.

—-

Почитайте Господ, всичи нации.
Почитайте Го, всички хора.
За това, че дарява
своята милост над нас.

Истината за Господ трае завинаги
В името на Отца и Сина и Светият дух
Както е било в началото, както е в момента,
И както ще бъде
Во веки веков

Амин

Грубият превод на български е на Маруш Денчев :)

 

Обувки по Буш

15 Dec

Уцели го, бре :) Ама колко е чевръст, Буш :)

 

Статични данни, PHP, урок 2

14 Dec

Ситуацията е следната – имам няколко обекта, които онаследяват някакъв клас. В родителският клас има методи, които връщат определени суми. При първоначалният ми план, бях направил всеки метод ( три метода ) да си определя сумата с отделна заявка – т.е. три заявки на обект умножени по четири класа т.е. заявките към базата стават дванадесет. Ето примера:

class A {

public function A1() {
// DB Query
}
public function A2() {
// DB Query
}
public function A3() {
// DB Query
}
}

class B extends A {

public function B() {
parent::__construct(); // Задавам нови насройки на базата
}
}

class C extends A {

public function B() {
parent::__construct(); // Задавам нови насройки на базата
}
}

class D extends A {

public function B() {
parent::__construct(); // Задавам нови насройки на базата
}
}

class E extends A {

public function B() {
parent::__construct(); // Задавам нови насройки на базата
}
}

$B = new B();
$B->A1();
$B->A2();
$B->A3();

$C = new C();
$C->A1();
$C->A2();
$C->A3();

$D = new D();
$D->A1();
$D->A2();
$D->A3();

$E = new E();
$E->A1();
$E->A2();
$E->A3();

Така всеки нов обект задава нови настройки за връзка с база данни и използва методие на родитеслкият клас за обработка на получените данни.

До тук добре. Всичко работи, но скоростта опрделено не е оптимизирана. Дванадесет заявки са много. Затова измислих следното решение. Добавих допълнителен метод в родетелският клас, който извлича всичките суми, чрез вътрешни заявки ( sub query / queries ), създава се  инициализиращ масив, а останалите методи ще обръщат към него. Да де, ама така излиза, че пак ще се правят 12 заявки, като този път ще са и по-сложни. И да и не. Тук идват на помощ статичните данни. Инициализираме един статичен масив във всеки от дъщерните класове, който ще предваме по референция. При извикването на метода, който извлича всичките данни ще се прави проверка, дали тези данни са вече записани в статичният метод – ако да използваме тях, ако не са – извличаме ги. Ето и примера:

class A {

public function A0( &$arr ) {
if( sizeof( $arr ) == 0 ) {
// Извлечи, обработи и запиши данните в $arr масива
}
return $arr;
}

public function A1() {
$a = $this->A0();
return $a['A1Result'];
}
public function A2() {
$a = $this->A0();
return $a['A2Result'];
}
public function A3() {
$a = $this->A0();
return $a['A3Result'];
}
}

class B extends A {

protected static $arr;

public function B() {
parent::__construct(); // Задавам нови насройки на базата
}

public function A0() {

return parent::A0( &$arr );
}
}

class C extends A {

protected static $arr;

public function B() {
parent::__construct(); // Задавам нови насройки на базата
}

public function A0() {

return parent::A0( &$arr );
}
}

//  Тук кодът продължава като първият пример

Ако нещо не сте разбрали или имате предложения – чувствайте се свободни да пишете коментари.

 

Рок виагра

11 Dec

 

Да налазим Богомил

11 Dec

Тъй като Богомил ме измъчи с неговата загадка, как да се стигне рожденният му ден, сега ще му направя кален номер и ще публикувам частичното решение. Намерете си Java компилатор и използвайте този код.

public class BogosBirthday {

public static void main( String[] args ) {

BigDecimal bd = new BigDecimal( “3.1415926535897932384626433832795028″ );
BigDecimal d42 = new BigDecimal( “42.00″ );
BigDecimal d139 = new BigDecimal( “139.00″ );

bd = bd.multiply( d42 );
bd = bd.divide(d139, 9, BigDecimal.ROUND_HALF_DOWN );

System.out.println( “If you want to go to Bogo’s birthday found the MD5 hash of: ” + bd );

}
}

Всъщност мен ме измъчи моята простотия като си мислех, че трябва да взимам мантисата до N-тият знак, а не цялото число + мантисата. Ех, това ФМИ ще ме побърка :)

Пожелавам весело изкарване на него и цяло Велико Търново :)

 

Upgrade до WordPress 2.7

11 Dec

Качването на WordPress 2.7 преминаха успешно и много бързо. Трябва да по разботя известно време, за да свикна и направя оценка на новата администрация.

 

Как се вграждат субтитри във видео

10 Dec

Колежката Моника ме помоли да й обесня как се вграждат субтитри във видео. Естветвено, че казах, че знам как става ( няма да се излагам, я ) и направих едно търсене в Google. Попаднах на следният софтуер – Avidemux. Обеснявам как се прави. Четете, че няма да повтарям :)

1. Изтеглете и инсталирайте Avidemux.
2. Отворете Avidemux
3. Натискате бутона “Open” и намирате видеото, на което искате да вградите субтири. Пак натискате Open.
4. Ще ви попита дали да изгради VBR Time Map – кажете му “Build Time Map”.
5. След това много нахално ще ви каже, че index-ът ви не е “up to date” – направете го “up to date”.
6. За удобство изберете от падащото меню, до бутона Calculator, “Slide”. Така ще се показва и оригиналното видео и това, което би трябвало да изглежда след като бъдат изпълнени вашите инструкции.
7. Изберете Video -> Filters -> Subtitles -> Subtitler и натиснете бутонът “+”.
8. Изберете субтирите, които искате да вградите от полето “Subtitle file”. OK и Close.
9. Не забравяйте, ако вграждате субтири на български език, да изберете Cyrillic за кодиране на знаците или UTF-8 ( Вижте чрез Preview бутона кой тип би ви свършил работа )
10.  Би трябвало да се върнете на главният прозорец. В ляво ще видите три секции с удебелн шрифт “Video”, “Audio” и “Format”. За видео изберете “MPEG-4 ASP (xvid4)”.
11. Натиснете бутона Save и въведете името и мястото за запазвне на новият файл.
12. Изчакайте докато приключи кодирането ( около 1 час на дву-ядреният ми 1.5GHz Intel за 700MB филм)
13. Купувате ми Загорка :)

 
 

Разговор с полицай

10 Dec

Преди малко за първи път ме спиряха полицаии за проверка на документите. По принцип не ходя нощно време и явно за това, но този път ме издебнаха в един тъмен ъгъл. Заобградихаме трима, но с една глава по-ниски от мен. Диалогът ни беше горе долу следният.

П: – Момче, чакай малко. Сержант, Х, първо РПУ. Документи имаш ли?
Аз: – Да. ( вадя си ги ). Заповядайте.
П: – Къде живееш тук? ( Явно забеляза, че съм от Павликени ).
Аз: – В първи блок.
П: – Какво правиш в София?
Аз: – Уча. В Софийски Университет.
П: – Имаш ли някакви незаконни вещи в себе си? Наркотици, огнестрелно оръжие?
Аз: – Ъъ … не. ( поколебах се, защото носех разни лекарства из себе си )
П: Сигурен ли си? На къде си тръгнал сега?
Аз: Към бензиностанцията, да си купя нещо за хапване.
П: Какво прави на 8-ми?
Аз: У нас си бях. Имах работа.
П: Е, случва се.
Аз: А вие имахте ли много работа?
П: Ние винаги имаме много работа! Лека вечер!
Аз: Лека вечер.

Взех си Pepsi и бейкролс.

 

Как да сменим ДДС-то и цените да останат същите

09 Dec

Миналият понеделник във Великобритания промениха процентът на тяхното ДДС ( VAT ), като мярка за справяне с глобалната икономическа криза. От 17.5% го намалиха на 15%. Разбира се, това трябваше да се отрази и в магазините за електронна търговия. Някои от тях просто смениха процента и така цените им с ДДС намаляха, но други решиха да запазят старите си цени като увеличат първоначалната цената, на която се изчислява това ДДС. Ето и една формула за MySQL как се прави това:

UPDATE products SET products_price = products_price + ROUND( ( products_price * 1.175 – products_price * 1.15 ) / 1.15, 2 ) WHERE 1 = 1

Това работи за osCommerce софтуер, но лесно може да го нагодите да работи и за вашата система.

 

Изглед на новата data.bg

09 Dec

Малко снимки на това как изгледа новата дата попаднали ми по неведоми пътища. Очакваме “всеки момент” да я пуснат официално. Всъщност от доста време имам този и други screenshot-ове, но не ги публикувах, тъй като не исках да прецаквам работата по някакъв начин на @pesho. Обаче тия от data.bg ме изнервиха с тяхното самонадеяно поведение с този обратен брояч.

Разбира се аз, не гарантирам, че така ще изглежда. На това попаднах като си играех с адресите на data.bg.

 

Форумът на БАРС/НАРС – спам

08 Dec

Да ме пита човек защо се записах на курс при тях. Не че те са писали IPB-то, ама все пак бива ли такава излагация? Има 5 страници само със спамерски изпълнения.  Тъй като форумът на НАРС е част от този на БАРС ( от трън та на глок ) проблемът не е изцяло техен, но огромната порция са го изяли те – и то напълно заслужено!!!

Прилагам и screenshot-ове, че току виж се разработили ( ще се изненадам, ако го направят ) и си оправят форума.

 

Епизод – Война

08 Dec

 
 

Малко за Data.bg

08 Dec

Цитат от сайтът, 20 минути след като “не тръгна”.

DataBG Уважаеми потребители, стартирането на сайта се отлага за 07:00 тази сутрин.Приемете нашите извинения!

Аз пък не ги приемам! Къде бяхте у гъбите цяла седмица, че не си уредихте нещата. След като казахте, че сайтът е готов и ще го пуснете след седмица – какво правихте през това време, питам аз? Българска работа, ей! Поредната излагация! Поне да кажат каква е причината за забавянето. Мълчат като задници! Абе … да не би Фънки от СМЕ да е собственик на датата? Те имат нивака да го правят този номер- “Моля да ни извините. Концертът ще се забави си със 3 часа, ама ние не сме виновни.”

 

Campaign Monitor, PHP4

07 Dec

Като работа за последният ми проект, трябваше да интегирам Campaign Monitor ( все го бъркам с Manager ). Това е софтуер за бързо и лесно изпращане на писма до клиенти ( т.е. масово спамене ). За мой лош късмет, точно в момента разработчиците решават, че трябва да внесат промени и премахват примерите ( samples ) и инструментите за работа с API-то им ( API kit ). Логично веднага почнах да търся дали някой добър човечец не е написал подобен клас и след няколко проби през Google попаднах на следния Campaign Monitor клас ( Campaign Monitor class ) написан от Keri Henare ( Кери Хенаре ще го преведа на български ). До тук добре, нали? Проблемът се появи когато видях, че класът е написан за PHP 5, в което няма нищо лошо, стига сървърът, на който е проектът да не беше на PHP 4. Ще кажете “Голям прас. Драсни един handler за PHP5 и всичко ще заспи”. И при други обсоятелства бих се съобразил с вас, но никак не исках да превключвам версията на сървъра, защото проектът не съм го писал изцяло аз, а е доста посещаван сайт и не знам откъде може да изкочи проблем ).

Затова реших да преправя класът от PHP5 към PHP4. След като разкарах private, public, protected декларациите за функции и данни, след като премахнах статичните извиквания или добавих обекти за тях се заех с функционалността. Буднах малко тук, малко там … и в крайна сметка се оказа, че трябва да бутна мнооого сериозно по функцията за превръщане на XML към Array ( XML to Array ). Бе направо я изтрих и я написах отново, само че да работи за PHP4.

И тук дойде другата ми изненада. domxml_open_mem фунцкията не съществува в PHP5!? Защо сте я махнали, бре? На кого му пречеше? Това е проблем, защото знам ли кога hosting компанията ще реши масово да премине на PHP5 ( а защо не го е направила до сега? ) и трябваше да си подсигуря стабилността ( сравнително ) на моята работа и на PHP5. Тук за пореден път много полезен се оказа Google. Оказа се, че фунцкиите за DOMXML ги има написани на PHP, а не за PHP. Copy/paste, една проверка дали е PHP 5, малко тестове на PHP5 сървър и съм готов.

Вдъхновен от Open Source движението реших да публикувам PHP4 версията на Campaign Monitor класът, както и съпровождащият го клас за правилна работа с XML на PHP5.

Campaign Monitor for PHP4 including Dom-xml-php4-to-php5

Не вярвам на някой да му потрябва, но знае ли човек ….

 

Вяра в собственото си творение

07 Dec

Когато правите нещо, вярвате ли си на 100%, че работи? Вижте този клип, за да видите човек напълно убеден в творението си.

 
 
FireStats icon Powered by FireStats