Пролетен семинар на БГПО

 Общи  Коментарите са изключени за Пролетен семинар на БГПО
фев. 132009
 

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

Малко са нещата, които могат да ме откажат да присъствам. Но точно на 25-и април сестра ми ще се омъжва. И така, за ужас на всички мои фенки, за пръв път от много години, ще пропусна сбирката 🙂

Пожелавам весело (и полезно!) изкарване на всички

 Posted by at 15:27

JABORAC

 Без категория  Коментарите са изключени за JABORAC
фев. 122009
 

Преди почти 3 години написах статията за JABORAC. Там написах, че девелъпърите трябва да се обучават, за да разберат как работи БД. Но така и не стигнах до конкретни мерки. Е, правил съм някои опити, но нищо сериозно.

Един опит за сприятеляване на девелъпърите с Oracle DB прави Cari Millsap. Попаднах на неговия документ „For Developers: Making Friends with the Oracle Database„.

Много ми харесаха следните думи:

Speed is a vital feature of good software. Speed doesn’t just happen by accident. It’s a feature that you have to design into good programs.

Точно в десетката!

И като цяло четивото е полезно, макар и според мен да е малко трудно за един developer. Дано има някаква полза. Аз разпечатах няколко копия и ги раздадох на по-обещаващите колеги. Един от тях сякаш наистина прояви интерес.

 Posted by at 17:39

Клониране на схема

 Без категория  3 Responses »
фев. 102009
 

Най-простия начин:

expdp system@db schemas=abc directory=data_pump_dir dumpfile=abc.dp logfile=exp_abc.log
impdp system@db schemas=abc directory=data_pump_dir dumpfile=abc.dp logfile=imp_abc.log REMAP_SCHEMA=abc:def

После трябва да се оправят само грантовете от други към тази схема.
Не че е кой-знае какво, ама ми писна всеки път да се чудя какъв беше синтаксиса за нещо толкова елементарно. За това го пиша тук. Ако не те интересува – just ignore.

 Posted by at 17:14

Patchset чуденка

 Без категория  Коментарите са изключени за Patchset чуденка
фев. 092009
 

Аз се занимавам с Oracle databse повече от 9 години. Правил съм какво ли не. Дълги години поддържах една относително сложна система с 12 сървъра, които си говорят – това включва инсталация, ъпгрейд и т.н. После започнах да работя по „външни проекти“ за клиенти на фирмата и там също съм правил бая инсталации и ъпгрейди (няма да наблягам на разликите между migration, upgrade и patch). Инсталирал съм и съм ъпгрейдвал доста от възможните комбинации от 8.1.5 до 11.1.0.7. И съм забелязал, че едно: няма скука тука.

С други думи няма случай, в който една инсталация или ъпгрейд да е протекла от началото до края безгрижно. Винаги има проблем – винаги! Бил той проблем с ъпгрейд скриптовете, с инсталера, с инсталацията на ОС, инсталацията на хардуера, мрежата… Веднъж в една инсталация на един двунодов клъстер изгърмяха 3 (!) от четирите захранвания на сървърите (по 2 на сървър, за да са резервирани). И в общи линии си знам, че щом има инсталация или ъпгрейд – ще има проблем, няма как. Нали за това съм troubleshooter. То ако става с цъкане на next аз гладен ще остана.

Забелязах и една друга интересна зависимост. Обикновено когато има проблеми с хардуера или операционната система, всичко по Oracle си минава перфектно. Ако няма проблеми по хардуера и ОС, задължително гръмва нещо по Oracle човръкните. Случва се да има супер тъжни дни, когато има проблеми навсякъде. Но никога не се случва всичко да мине като по вода.

Поне така беше до вчера.

Вчера (да, знам, че беше неделя) пачнах една система от 2 сървъра във failover cluster със 3 бази без грешка – от 11.1.0.6 на 11.1.0.7. Нищо не съм пипал по ОС (нито нещо се скапа без да го пипам). Ъпгрейда на двата oracle home-а си мина по вода с помощта на Oracle Universal Installer. Ъпгрейда на трите бази мина също толкова безгрижно, въпреки че са натоварени с всякакви компоненти. Нищо не гръмна.

Между другото, в Oracle 11 дори и прилагането на patchset към БД става с DBUA. Това е много удобно, защото assistant-а е доста стабилен и прави доволно количество предварителни проверки. Явно и самите скриптове са тествани доста. Евала!

И сега се чудя… след като всичко мина толкова лесно, дали да очаквам в най-скоро време тази система да се срине тотално? 😉

 Posted by at 17:43

Обедната манджа

 Общи  Коментарите са изключени за Обедната манджа
фев. 092009
 

Санитар сервира
Карантия с бира
Бъбрек по хайдушки
Дроб със люти чушки

От една седмица любимото ни място за похапване в обедната почивка е стола на болница Токуда. Намира се само на 5 минути пеша от офиса и (Х минути докато изчакаш да дойде асансьора и да те качи до 9 етаж). Столчето е хубаво, просторно и светло. Това, че са се сетили да го направят на предпоследния етаж, а не в мазата, е страхотна идея. Понеже заема почти цяло крило, има прозорци отвсякъде и можеш с кеф да гледаш на едната страна Витоша, а на другата – Стара планина.

Манджите също са добри, макар и леко безсолни. Порциите не са малки, яденето е разнообразно и добре приготвено. Всеки четвъртък има по едно японско ястие (миналата седмица имаше кацудон). Доста вкусно, макар и в изпълнение за стол. Но за 5 лева – толкова.

Да, и цените са супер поносими. Едно ястие е около 3 лева (само японското беше 5.20). За около 6 лева можеш да хапнеш супа, манджа и десерт. Това вече е трудно постижимо в София, поне в околностите на нашия офис. А като прибавим и размера на порциите, офертата става много добра.

Но най-много ми харесва салатения бар. Вземаш си една купа и пълниш вътре колкото събере – домати, краставици, марули, нещо като макарони, шунка, кашкавал, сирене, маслини, кис. краставички, царевица, грах и още разни неща, плюс сосове. Малката купа (която хич не е малка) е 3 лева, без значение какво си сложил. Голямата не знам, защото тя не е за сам човек 🙂

Но не знам защо всеки път като тръгнем на там се сещам за песента „Стара градска морга“ на Джендема 🙂

 Posted by at 14:13

Зачистване на загинал target от Grid control

 Без категория  Коментарите са изключени за Зачистване на загинал target от Grid control
фев. 032009
 

Ще дам само линка, защото ми се струва страшно полезен: тук.

Приятен ден 🙂

 Posted by at 17:44

Юлиян

 Без категория  3 Responses »
фев. 022009
 

Юлиян е човек. За първи път го чух и видях на една сбирка в София, организирана от БГПО, в която той беше единствен лектор. Още тогава оцених, че е пич. Знае ужасно много неща, има всичката възможност на света да се големее, но не го прави. Говори ни съвсем човешки, всячески се опитва да предизвика дискусия. Сподели какви грешки е правил.

Юлиян е змей. Разбира Oracle database на едно друго ниво. Той е първия Oracle Certified Master в Европа, но отдавна е нещо повече. Той разбира нещата, осъзнава ги, чувства ги и ги усеща. Когато излезе Oracle 11g, Юлиян изнася темата „50 new features in oracle 11g“ на Oracle OpenWorld. Той разказа на света какво му е най-интересно в новата версия. Не някое рекламно лице от Oracle или някой архитект. Юлиян.

Юлиян е баш-DBA на Нокия във Финландия. На последната сбирка на БГПО каза, че те имат над 900 бази. Без да броят тези, който са по-маловажни и се хостват навън.

Юлиян е математик. Завършил е Computer Science в Будапеща, после Математика в Хелзинки. Математиката му е в кръвта. В Банско навлезе малко в темата на Пламен за Exadata и се опита да ни обясни механизма на bloom филтрите. Залата не прояви голяма интерес. Жалко.

Вижте филма за Юлиян и Сабина Дончеви в Другата България на bTV

 Posted by at 14:49

Натоварване

 Без категория  5 Responses »
ян. 302009
 

В момента правим тестове за това колко държи ЕСОЕД. Както знаете (от лекцията ми на пролетния семинар на БГПО миналата година), това е част от проекта за електронно правителство. В този проект аз участвам като database експерт – направих дизайна на БД и, по-важно, начините, по които Java приложението ЕСОЕД я достъпва.

Хавата е следната: влизат едни съобщения документи и се записват във входящата опашка. После се обработват на нещо като конвейер – проверяват се разни неща, подписват се, криптират се и т.н; готовите документи отиват в изходящата опашка, от където ги вземат Java процесите, които се занимават с изпращане и ги изпращат. Тук има една тъжна подробност: докато всички предишни обработки могат да стават колкото си искат паралелно, при изпращането трябва да изпращаме само по един документ към всяка система-получател, като този документ е изрично най-стария, т.е. документите се изпращат подредени. Това е един от най-конфликтните моменти, по който сме спорили мнооого дни, защото спъва скалируемостта. Но техническата му реализация е относително проста: има една функция в БД, която се извиква от всеки свободен изпращач. Тази функция намира документ, който:
– е в изходящата опашка, т.е. готов е за изпращане
– не е заключен от друг изпращач
– е най-стария неизпратен документ за тази дестинация, т.е. няма по-стар от него документ за същия получател, в никоя опашка
Щом намери такъв документ, функцията го заключва и връща неговото ID на Java-та, да си се занимава с изпращането.

Цялото това търсене на подходящ документ съм го реализирал с 1 (една!) заявка, която се пада най-тежката заявка в целия ЕСОЕД. И днес се изкефих колко оптимална е тя. В голяма степен заслугата за това е много добре измисления дизайн на БД и на работата с нея, за което претендирам да е моя заслуга.

Та тази заявка, оказа се, е изпълнена 631 147 пъти от последния рестарт на БД до сега, като за това е отнела общо 17 463 906 250 микросекунди процесорно време или общо около 17 960 692 000 микросекунди с включени всички други изчаквания (дискови операции и т.н.). Това е около 0,027670 CPU секунди на изпълнение или 0,028457 секунди по часовник. Пак казвам, това е най-тежката заявка в системата!

А най-красивото е, че при този дизайн, колкото и да се натовари системата (с много съобщения и стари данни), това време няма да скочи значително.

Обичам си професията! 🙂

 Posted by at 18:12

Нови територии

 Без категория  6 Responses »
ян. 302009
 

Реших да понауча малко Perl. Всички го хвалят, че бил супер гъвкав език. Аз, обаче, не съм програмирал от години (ако не броим по някоя друга процедурка на PL/SQL тук-там). Оказа се, че програмирането като работа не се забравя, но сблъсъка с нов език ме изненада.

Както и да е. Предисторията е следната: тази седмица трябваше да инсталираме един тестов Oracle 10.2 на Linux и в знак на оптимизъм избрах Oracle Unbreakable Linux 4 Update 2 x86_64, защото от Oracle 10.2 на RHEL 5 имам лоши спомени. Интересното тук е архитектурата. Не знам RHEL4 дали се държи по същия начин, но се сблъскахме с един много тъп проблем. Преди инсталацията на Oracle DB, когато слагах всички необходими пакети, rpm започна да се държи странно – обясняваше ми, че един пакет го няма, а rpm -q показваше, че го има. Оказа се, че инсталатора е сложил i386 версията, а на мен ми трябва x86_64 версията. И двете си стоят мирно на инсталационното CD, но инсталера по най-тъпия начин е избрал 32 битовата.

Това го преборихме. Но то ме вдъхнови за първата, може би не много смислена, но ПЪРВА за мен програмка на perl. Реших да изнамеря всички пакети, които са инсталирани, но не и в x86_64 вариант.

Почнах наистина а началото, но с много оптимизъм. Примерно, за да взема името на всеки пакет реших най-оптимистично да се боря с regular exressions – това само по себе си е едно дълбоко море. Започнах така:

#!/usr/bin/env perl

use strict;
use warnings;

#my $s = "world";
#print "Hello, $s\n";
my $pn;
my @in=`rpm -qa`;
chomp @in;

foreach (@in) {
  $pn = $_;
  if ($pn =~ /((\w|-)+)-(\d+[-\.]+[-\w\.]*)/) {
        print "For $pn";
        print ", name is $1";
        print " and version is $3\n";
...

Този regexp сам по себе си е голямо заклинание, обаче колкото и да се мъча, не можах да хвана всички случаи. Най-брадатия пакет се оказа java-1.4.2-gcj-compat-1.4.2.0-27jpp – просто няма (или аз не мога да направя) regexp, който да се справи с отделянето на името от версията. Странното е, че като го погледна и ми става ясно коя част е име и коя – версия; но не мога да формулирам точния алгоритъм, поне в тази нова за мен среда. Като стана дума за среда, използвам просто vim, за по-трудно.

Както и да е. Пробите и грешките бяха много. Пешо помага, Xerxes също удари едно рамо в момент, в който бях забил по много тъп начин. И на края успях да стигна до Първата Работеща Програма на Perl (ПРПП), която съм писал лично аз:

#!/usr/bin/env perl

use strict;
use warnings;

my $Str64 = "x86_64";

sub GetArch {
# This procedure checks if some package's architecture is $Str64
# If thеre is more than one package with the same name
# (and different architectures), it will return $Str64
# If there is no package installation with #Str64 architecture
# it will return the first architecture occured

  # get package name from the parameters
  my $PckName = shift;
  # get installed architectures for the package
  my @PckArchs = `rpm --query --queryformat \"%{ARCH}\n\" $PckName`;
  # init $Result with the first architecture found
  my $Result = $PckArchs[0];
  my $CurrArch;

  # lop through architectures
  foreach (@PckArchs) {
      chomp;
      $CurrArch = $_;
      # Check if the architecture is what we are looking for
      if ($CurrArch eq $Str64)  {
          # Victory!
          $Result = $CurrArch;
          }
      }
  return $Result;
}

my $pn;
# we take all package names
my @in=`rpm -qa --queryformat \"%{NAME}\n\"`;
#sort the package names (will look better)
@in = sort(@in);
# remove the new line character
chomp @in;
my $pa;
my $PckCount = 0;

#loop through the package names
foreach (@in) {
    # take thе current package name
    $pn = $_;
    # get package's architecture
    $pa = GetArch($pn);
    chomp($pa);
    #check if the architecture is fine 
    #(and if thе package has architecture at all)
    if (($pa ne $Str64 ) && ($pa ne "noarch")) {
        # this package is not fine, let's report it
        print "$pn is $pa\n";
        $PckCount++;
    }
}
print "Number of bad packages: $PckCount\n";

Може би може да се направи много по-елегантно, но за ПРПП и това е ОК 🙂

P.S. оказа се че има инсталирани цели 41 такива пакета.

P.P.S. Highlight Source Pro плъгина на WordPress, който си сложих днес, не се справя много блестящо с обратните кавички (`)

P.P.P.S. Оправих си Highlight Source Pro. Във файла wp-content\plugins\highlight-source-pro\geshi\geshi\perl.php на ред 63 вместо
'QUOTEMARKS' => array('"'),
написах
'QUOTEMARKS' => array('"','`'),

 Posted by at 15:58
ян. 292009
 

Аз не искам да обяснявам какво е станало. Нито съм бил там, нито съм виждал лавина на живо. Но съм ходил на планина, дори и през зимата. Ходил съм и на ски. И съм ходил по пътищата. И съм ги виждал тези хора. За това имам мнение.

Това да караш freeride е голяма зарибявка. Супер яко е, има хиляди филми и клипчета. Там можеш да почувстваш истинската свобода. Не че съм го правил, но съм правил малко подобни неща, говорил съм с много хора и ги разбирам. Удоволствието е неописуемо. Това е като наркотик. Невероятно. Истинска свобода!

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

Аз уважавам планината. Уважавам и живота си. Обичам удоволствието. И май това са трите стълба, между които стои компромиса – дали да направиш нещо или не. Не съм freerider, защото по природа съм твърде предпазлив. Но съм замръквал в планината, през зимата, загубил пътеката, в сняг до кръста, при страшна виелица, студ – дърво и камък се пукат буквално! – и знам какво е. Това ми беше предупреждение. Това ми е обеца на ухото.

Има хора, които не уважават планината и живота си. Или поне ги уважават много по-малко, от колкото си уважават кефа. Тук няма черно и бяло, всичко е въпрос на компромис. Но това момче, което е затрупано от лавината, просто си е търсило белята.

Вижте бюлетина на БАССЕС за лавинната опасност в района на Банско вчера:

Avalanche Buletin

Вижте улеите, по които са се пускали тези хлапета (на моята възраст, поне по ЕГН):

Улеи Тодорка
(снимката е от форума на БАССЕС)

Това е пълна безотговорност. Почти като да караш пил. Само дето шанса да пострадат невинни е малко по-малък. Според статистика, спомената във форума на ПСС, „Над 80% от лавините се причиняват от хората – скиори, бордисти, шейнари и туристи„.

Аз вярвам на БАССЕС, защото съм присъствал не веднъж на техни лекции по лавинна безопасност и знам, че те ги разбират тези неща. И имат огромен ентусиазъм и правят такива лекции редовно. Само един път да отидеш, придобиваш знания, които биха ти запалили червена лампа дори да не си виждал бюлетина за деня (който, според някой, е бил закачен на долната станция на лифта!).

Умолявам ви, хора, внимавайте. С планината шега не бива – никога! Отидете на някой от курсовете за лавинна безопасност. Посъветвайте се с ПСС за обстановката. Преценявайте условията. Това, че някой хлапак е дърпал дявоал за опашката и е затрупан от лавина си е негов проблем. Но почерня живота на всичките му близки. На хората, които обича (освен ако не обича само себе си). Затруднява живота и на хората от ПСС (според форума по време на издирването са паднали още 2 или 3 по-малки лавини в района), които и сега са там с риск за живота си, за да се опитат да намерят момчето, макар и шанса да е жив да е абсолютно имагинрен.

Моля уважавайте и труда на ПСС. Ще цитирам едно мнение от форума на ПСС. Gaitan:

Днес видях няколко невероятно тъпи човека на Шилигарника, които не правеха път на шейна, тръгнала за участие в акцията. Единия дигна скандал на спасителя, че искал да маневрира оттам, където оня си почивал. Други изобщо не се отместваха, въпреки светлините, звуковия сигнал и внимателното маневриране на човека. Трети искаха да се „напушат нечовешки, да набримчат музиката в слушалките“ и да пускат други улеи -добре, че спряха лифтовете за нагоре.

Още нещо. Много хора се опитват да вменят вина на Юлен (фирмата, която стопанисва ски съоръженията в Банско) за случая. Че не били предупредили, не били забранили, не били оградили, нямало пазачи, които да спират лудите глави. Това са пълни глупости. Такъв човек няма да се спре нито от въже, нито от охранител. Все ще намери от къде да мине. Освен това Юлен отговарят за тези улеи точно толкова, колкото и за всички други неохраняеми части в планината. Ако някой бордист загине в южен Пирин, пак ли Юлен ще са му виновни?

Но има нещо друго. Според Дир.БГ:

Кметът на Банско Александър Краваров, който бе на мястото на инцидента, заяви, че издирваният мъж е и бивш скиучител в дружество „Юлен“.

Това вече би било проблем. Защото аз не бих искал такъв човек да учи мен или децата ми как се карат ски или сноуборд. Ако това е истина Юлен трябва да затегнат реда в собствените си редици.

Е това е… малко дълго стана, но наистина има какво да се каже. Даже още много. Следете темите във форумите на БАССЕС и ПСС. Там и малко по-добре са обсъдени конкретните грешки – че са тръгнали по улей при лавинна опасност, че са се движили заедно вместо един по един, че са тръгнали без PIPSове и т.н.

 Posted by at 11:25