Уцели го, бре 🙂 Ама колко е чевръст, Буш 🙂
Ситуацията е следната – имам няколко обекта, които онаследяват някакъв клас. В родителският клас има методи, които връщат определени суми. При първоначалният ми план, бях направил всеки метод ( три метода ) да си определя сумата с отделна заявка – т.е. три заявки на обект умножени по четири класа т.е. заявките към базата стават дванадесет. Ето примера:
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 );
}
}
// Тук кодът продължава като първият пример
Ако нещо не сте разбрали или имате предложения – чувствайте се свободни да пишете коментари.
Рок виагра
Да налазим Богомил
Тъй като Богомил ме измъчи с неговата загадка, как да се стигне рожденният му ден, сега ще му направя кален номер и ще публикувам частичното решение. Намерете си 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
Качването на WordPress 2.7 преминаха успешно и много бързо. Трябва да по разботя известно време, за да свикна и направя оценка на новата администрация.
Как се вграждат субтитри във видео
Колежката Моника ме помоли да й обесня как се вграждат субтитри във видео. Естветвено, че казах, че знам как става ( няма да се излагам, я ) и направих едно търсене в 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. Купувате ми Загорка 🙂
Разговор с полицай
Преди малко за първи път ме спиряха полицаии за проверка на документите. По принцип не ходя нощно време и явно за това, но този път ме издебнаха в един тъмен ъгъл. Заобградихаме трима, но с една глава по-ниски от мен. Диалогът ни беше горе долу следният.
П: – Момче, чакай малко. Сержант, Х, първо РПУ. Документи имаш ли?
Аз: – Да. ( вадя си ги ). Заповядайте.
П: – Къде живееш тук? ( Явно забеляза, че съм от Павликени ).
Аз: – В първи блок.
П: – Какво правиш в София?
Аз: – Уча. В Софийски Университет.
П: – Имаш ли някакви незаконни вещи в себе си? Наркотици, огнестрелно оръжие?
Аз: – Ъъ … не. ( поколебах се, защото носех разни лекарства из себе си )
П: Сигурен ли си? На къде си тръгнал сега?
Аз: Към бензиностанцията, да си купя нещо за хапване.
П: Какво прави на 8-ми?
Аз: У нас си бях. Имах работа.
П: Е, случва се.
Аз: А вие имахте ли много работа?
П: Ние винаги имаме много работа! Лека вечер!
Аз: Лека вечер.
Взех си Pepsi и бейкролс.
Миналият понеделник във Великобритания промениха процентът на тяхното ДДС ( 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
Малко снимки на това как изгледа новата дата попаднали ми по неведоми пътища. Очакваме “всеки момент” да я пуснат официално. Всъщност от доста време имам този и други screenshot-ове, но не ги публикувах, тъй като не исках да прецаквам работата по някакъв начин на @pesho. Обаче тия от data.bg ме изнервиха с тяхното самонадеяно поведение с този обратен брояч.
Разбира се аз, не гарантирам, че така ще изглежда. На това попаднах като си играех с адресите на data.bg.
Да ме пита човек защо се записах на курс при тях. Не че те са писали IPB-то, ама все пак бива ли такава излагация? Има 5 страници само със спамерски изпълнения. Тъй като форумът на НАРС е част от този на БАРС ( от трън та на глок ) проблемът не е изцяло техен, но огромната порция са го изяли те – и то напълно заслужено!!!
Прилагам и screenshot-ове, че току виж се разработили ( ще се изненадам, ако го направят ) и си оправят форума.



