How to add partitions to non-partitioned table

 Общи  Коментарите са изключени за How to add partitions to non-partitioned table
сеп. 162012
 

То един път ли беше, два ли…

Всеки започва от малко. Дай тука едно приложенийце да напишем, само да записва едни данни. Десетина-двайсе таблички. Хващат се 1-2-3-5 човека и драсват нещо. После-хайде да добавим и това, после и онова… След няколко години приложението вече има хиляда таблици, като най-важните от тях (обикновено са и най-старите) имат десетки и стотици милиони записи.

Да, обаче в първоначалния ентусиазъм никой не е предвиждал обемите, до които ще се стигне. Вярвайте ми, виждал съм го много пъти. Пък и в началото в екипа обикновено има един-двама (най-много), които поназнайват това-онова за базата. Другите са JABORAC фенове. Така че кой ще ти мисли за физическата структура? Дай тука таблицата, да си insert-ваме редовете. Тя базата ще се справи.

Минават години и започват едни тежки въпроси. Хайде, индекси се правят online. Обаче партишъни? Таблица, която никога не е декларирана като partitioned, не става лесно на такава. Всъщност до сега не сме намерили начин това да се случи без downtime.

Един от вариантите е dbms_redefinition. Обаче… ако говорим за таблица със размер няколко стотин гигабайта, това прави страшно много redo – всъщност прави няколко стотин гигабайта redo. И тъжното е, че няма как да ги прави „полека“, изсипва ги наведнъж, колкото поеме. Това е голям стрес за Production база. А ако имате късмета да поддържате и Logical standby или Streams, нещата стават с няколко нива по-сложни.

Има един вариант (практикували сме го), при който новата таблица се подготвя в отделна, тестова БД. Наливат се данните до момента Х и след това се закача чрез transportable tablespace. Има някои чалъми със standby базите, но за primary база това минава online. След това, с малък downtime допълваме последните данни в новата таблица и ги разменяме с rename.

Да, ама и това е тежка и пипкава работа. Вярно, не натоварва production базите, но пък в един момент има всичките данни на две места (същото важи и за dbms_redefinition). Ако таблицата е 50 GB – трябват ти още 50. Пък и цялата процедура е толкова тромава и подадлива на грешки! А, и трябва да сме сигурни, че няма update на стари данни, иначе ще имаме разминаване. Което май важи само за log таблици или таблици, които имат log (pun intended).

И така достигаме с варианта за exchange partition. Предимства
– бърз – минава с 1-2 минути downtime (при определени условия). Скоростта не зависи от размера на таблицата!
– не е твърде сложен
– данните не се пипат, стоят си на мястото
Като минуси мога да кажа, че не могат да се правят промени по структурата на таблицата и данните (нови/променени колонки и т.н.). Нали цялата идея е да не се пипат данните. А, и за да става толкова бързо, трябва всички индекси на новата таблица да са локални – поне в началото. После могат да се добавят и глобални, по обичайната процедура.

* * *

И така, това упражнение го направих преди 3 седмици. Тествано е на 11.2 с таблица от половин терабайт! (без да броим размера на индексите). Works like charm 🙂
Разбира се, предварително инвестирах достатъчно време за да изгладя скрипта за конкретния случай чрез експерименти върху тестови БД

1. Подготовка (online)
1.1. Проверка за foreign keys, сочещи към таблицата. Ако има такива, те трябва да се премахнат преди размяната и да се направят наново след нея. Иначе биха сочили към старата таблица (която остава празна)

select *
  from dba_constraints
 where constraint_type = 'R'
   and r_owner = 'HR'
   and r_constraint_name = (select constraint_name
                              from dba_constraints
                             where owner = 'HR'
                               and table_name = 'EMP'
                               and constraint_type = 'P');

В случая аз нямах такива. Оставям на любознателните читатели да си добавят съответните команди при нужда.

1.2. Проверка до къде е стигнала старата таблица. Новата таблица ще има един голям и тлъст партишън, съдържащ всички стари данни. За това трябва да го направим до или над последното достигнато ID (или дата, или както там си изберем за partition key)

select max(emp_id) from hr.emp;

1.3. Създаване на празна таблица. Структурата на данните (демек имана и типове на колонки) трябва да е същата. Индексите – също, ако искаме всичко да мине бързо. В крайния вариант индексите от старата таблица ще се превърнат в локални индексни партишъни на новата. Ако някои от индексите не можа да бъде local, той ще трябва да се изгради по време на downtime-а, което ще отнеме много време за големи таблици

-- the table
CREATE TABLE emp_new
(empid  NUMBER(25),
fname   VARCHAR2(20),
lname   VARCHAR2(20),
sex     VARCHAR2(1),
ssn     VARCHAR2(9),
salary  NUMBER(8),
deptno  NUMBER(5)
)
partition by range (empid)
(partition EMP_OLD values less than (500000000) tablespace users,
partition EMP_520M values less than (52000000) tablespace EMP_520,
partition EMP_340M values less than (540000000) tablespace EMP_540,
...
partition  EMP_max values less than (MAXVALUE)  tablespace EMP_MAX);
-- primary key index
create unique index HR.EMP_NEW_PK on HR.EMP_NEW(empid) local
(partition EMP_OLD tablespace users,
partition EMP_520M tablespace EMP_520,
partition EMP_540M tablespace EMP_540,
...
partition  EMP_max tablespace EMP_MAX);
-- primary key
alter table HR.EMP_NEW
  add constraint EMP_PK primary key (empid);
-- foreign key index
create index HR.IFK_EMP_NEW_deptno on HR.EMP_NEW (deptno) local
(partition EMP_OLD tablespace users,
partition EMP_520M tablespace EMP_520,
partition EMP_540M tablespace EMP_540,
...
partition  EMP_max tablespace EMP_MAX);
-- foreign key 
alter table HR.EMP_NEW
  add constraint fk_deptno FOREIGN KEY (deptno)
        REFERENCES hr.dept (deptno);
-- some other index
create index HR.I_EMP_NEW_NAME on HR.EMP_NEW (fnmae, lname) local
(partition EMP_OLD tablespace users,
partition EMP_520M tablespace EMP_520,
partition EMP_540M tablespace EMP_540,
...
partition  EMP_max tablespace EMP_MAX);

Тук е момента да се добавят и тригери, VPD политики и други екстри (ако има такива).

2. Размяна. Това е нещото, което изисква downtime. При добре подготвен и многократно тестван скрипт всичко приключва за под 2 минути.
2.1. Спиране на Foreign key constraints на новата, празна таблица. При размяната не могат да бъдат проверени, за това ако са активни, просто не става

alter table HR.EMP_NEW
  disable constraint fk_deptno_new;

2.2. Спиране на всички unique и primary key constraints на новата, празна таблица. Ако има такива, при размяната се прави негласна проверка на всички стойности от таблицата, което отнема много време.

alter table HR.EMP_NEW
  disable constraint EMP_NEW_PK;

2.3. Размяна на сегментите. Това нещо, ако е правилно подготвено, се случва за част от секундата, защото прави само data dictionary updates. Като резултат сегмента на старата, пълна с данни таблица става сегмент на партишън от новата (и обратно). С други думи новата таблица мигновено придобива всички данни от старата.

ALTER TABLE HR.EMP_NEW
  EXCHANGE PARTITION EMP_OLD
  WITH TABLE HR.EMP
  INCLUDING INDEXES
  WITHOUT VALIDATION;

– клаузата INCLUDING INDEXES указва старите индекси да станат партишъни на (локалните) индекси на новата таблица. Ако не дадем тази клауза, EMP_OLD партишъните на всички индекси стават UNUSABE.
– клаузата WITHOUT VALIDATION казва „довери ми се, всички данни са наистина за тоя partition“. Така си спестяваме преравянето на старата таблица, което отнема много време. Но трябва да сме сигурни, че наистина данните ни са верни. Иначе стават странни неща. Освен това, ако има работещ unique или primary key на новата таблица, тази клауза се игнорира безмълвно – то държи да си провери. Явно идеята е тук да се спести време, а после да се проверят данните по време на enable constraint. Следите ли ми мисълта? NOVALIDATE….

2.4. Размяна на имената на таблиците. Мисля, че всичко е ясно тук

alter table HR.EMP rename to EMP_OLD; -- тази вече е празна
alter table HR.EMP_NEW rename to EMP; -- данните вече са тук

2.5. Размяна на имената на индексите. Това не е задължително, но така е по-подредено. Освен това помага ако някъде има hint, който забива някой индекс по име

alter index HR.EMP_PK rename to EMP_OLD_PK;
alter index HR.IFK_EMP_deptno rename to IFK_EMP_OLD_deptno;
alter index HR.I_EMP_NAME rename to I_EMP_OLD_NAME;

alter index HR.EMP_NEW_PK rename to EMP_PK;
alter index HR.IFK_EMP_NEW_deptno rename to IFK_EMP_deptno;
alter index HR.I_EMP_NEW_NAME rename to I_EMP_NAME;

2.6. Включване на constraint-ите. Техните имена ги оставих както са си, защото не се сещам за вариант, в който да се реферират. Е, освен в разни съобщения за грешка.

alter table HR.EMP
  enable novalidate constraint fk_deptno_new;
alter table HR.EMP
  enable novalidate constraint EMP_NEW_PK;

Тук е важна клаузата novalidate. Поставям я защото съм безразсъдно убеден, че всичките ми данни са наред. В крайна сметка те си бяха наред в старата таблица, а никой не е пипал никакви данни.

2.7. Прехвърляне на grant-овете. Който и да е имал право да ровичка данните, сега може да го прави само върху празната стара таблица. Трябва да възстановим статуквото преди да е изгърмяло някое приложение. Премахването на грантовете към старата таблица е само по желание

select 'grant '||privilege||' on HR.EMP to '||grantee||';'
  from dba_tab_privs 
 where table_name = 'EMP_OLD'
 order by 1;

2.8. Проверка за unusabe index partitions на новата таблица. Знае ли човек….

set lines 200
select ip.index_owner, ip.index_name, partition_name, ip.status, ip.tablespace_name
  from dba_ind_partitions ip, dba_indexes i
 where i.index_name = ip.index_name
   and i.owner = ip.index_owner
   and i.table_name = 'EMP';

Тук вече може да пускаме приложенията да напъплят базата. Свършихме невероятно много работа за две минути. Време е за по бира.

(тествано на Oracle 11.2)

P.S. Статистиките на старата таблица вече са локални статистики на партишъна на новата. Може да си пуснем едно събиране на глобални статистики. Кой както е свикнал.

P.P.S. Да не забравите тригерите и VPD политиките!

 Posted by at 18:36

Roomba – не си харесва зарядното

 Общи  Коментарите са изключени за Roomba – не си харесва зарядното
юли 222012
 

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

Румбата има нещастието да се завира навсякъде. Е, може да се ограничава с виртуалните стени (аз си имам две в комплекта), но мен ме мързи. И така, като я пусна да се разхожда из апартамента докато ни няма, се случва да се завре за някоя врата и да бута, бута, докато се затвори в дадената стая. Естествено, после не успява да си отиде до зарядното и се лута докато и свърши тока.

Понеже съм забутал докинг станцията под бюрото, в такъв случай просто разкачам жака на зарядното и и го завирам директно. И така, след няколко такива завирания на нея и хареса и започна да се цупи на зарядното. Отива до него, върти, сучи, дупи се, па се отказва. Не иска да клекне отгоре и да си цока тока. Повтарям, проблема не е в намирането на докинг станцията (демек някой датчик) – отива си до нея, но не я харесва и си заминава.

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

Порових и намерих това. Проблема е следния: хитрите инженери от iRobot, които може и да са много добри в електрониката, но механиката им понякога куца, са направили ЗАЩИТА! Когато пъхнеш жака за директно зареждане, той натиска една пластина и разкача веригата на една от клемите за зареждане от докинг станцията. Така няма опасност някой да тръгне да зарежда през двете места едновременно. Не че някой би го направил, ама… абе всякакви ги има. Та така, като извадиш жака, тази пластина се връща, дава контакт и затваря веригата на долната клема.

Обаче с времето тази пластина се изкривява, омеква и т.н. и в един момент не успява да се върне и вече не прави контакт. До колкото разбрах, това е често срещан проблем при Roomba 5xx

Дали това е моя проблем? Лесно се проверява с мултицет, без разглобяване. Когато жака за захранване не е пъхнат, всяка клема от долното зарядно трябва да е свързана със съответната част от страничното. Когато нещата са прецакани, едната не е свързана към нищо.

И така, започнах с разголбяването. Процедурата е същата като предния път. Даже не е необходимо да махате централния панел (с бутоните), но е по-удобно – за да може да изкарате кабела и да работите спокойно.


Вдясно е захранването. По-лесно се работи като разкачите кабела

Куплунга на зарядното се придържа само от един болт.


Болта,който държи куплунга

Малко трудно се вади, аз ползвах тънкоусти клещи. Но няма други болтове/щипки.


Изваденият куплунг

Проблема е механичен:


Двете пластини не правят контакт

Решението ми също беше механично. Тъй като не успях да разглобя куплунга, а не ми се искаше да го режа, просто напъхах нещо което да притиска пластината към другата. Ако пак се скапе, може просто да ги запоя – самата пластина или връзките отзад. Но понеже не съм на „ти“ с поялника (въпреки че се водя електроинженер), за сега ги закрепих механично. И работи.

 Posted by at 10:32

126390

 Общи  Коментарите са изключени за 126390
юли 132012
 

Сто двадесет и шест хиляди триста и деветдесет. Бая голямо число.

126390 index partitions има към момента една fact таблица от нашия Data Warehouse. Има и два глобални индекса за цвят.

И работи, мамка му и прасе!

Уау!

Възхищавам се на прекрасния database engine, който може да си позволи да работи безгрижно с такива екстремни стойности

 Posted by at 8:12
май 222012
 

Казват, че имало голям тътен. Аз не съм го чул. Събуди ме разтрисането – мощно, настойчиво, но само по себе си спокойно.

Земният трус не е нервен. Не бърза. Случва се бавно, но неотклонно. Просто… си се случва. Без да му пука за нас. Като огромен великан, който минава бавно през мравуняк, без да го забележи. Като спокойна, но неотклонна вълна, която отнася водораслите без да отнемат и частица от нейната енергия. Просто се случва. Не го спират врати и ключалки, охрана и пари – нищо!

Видях, че Тя вече е станала в леглото. Беше много уплашена. Прегърнах я и заредих тихо и спокойно „Ха, земетресение“. Не знам от къде намерих този спокоен глас – в мен се надигаше зловеща, животинска паника. Успявах да я подтисна, може би само с мисълта, че трябва да Я успокоя.

И преди съм усещал земетресение. Вярно, не с този магнитуд. Но и днешното не беше страшно – на съзнателно ниво. Знаех, осъзнавах, че нищо лошо не се случва в този момент, с нашия блок. Всъщност, на вторият етаж даже не беше толкова силно. Самото люлеене бе далеч по-слабо от, примерно, лашкането на автобус 413 – което никога не ме е стряскало.

Но на едно по-дълбоко и неуправляемо ниво паниката се подклажда от идеята, че люлеенето се случва на грешното място. И пълното осъзнаване че не можеш да го спреш. То ще си люлее колкото си реши. Ще подхвърля целия блок, целия квартал, целия град, като Лора подхвърля детския конструктор. Когато си иска, колкото и на където и хрумне. Тези… не са мисли, а подсъзнателни усещания… те ме вцепеняваха. Но успях да запазя външно спокойствие и да кажа „Ха, земетресение“. Да Я прегърна успокоително и да показвам, че не ми пука. Защото Тя има нужда от спокойствие много повече от мен – сега, когато носи нашия син. А може би да успокоя и себе си.

И така, седнали в леглото, зачакахме да спре.

(Да, знам. Трябва да застанеш под касата на вратата. Самата идея да стана ми изглеждаше абсурдно в този момент)

Малката Лора дори не се размърда в креватчето. Когато люлеенето спря (след половин вечност, че даже и по-малко), отидох до детската да видя и Ирина. Също като сестра си, тя си спеше блажено. И слава богу, защото не знам дали щях да намеря сили да изтичам до детската да я успокоя, ако се събуди по време на труса.

Някои съседи излязоха на двора, но не стояха дълго. Ние не искахме да будим децата, за това двамата с Нея отидохме в дневната. Не си и помисляхме за лягане след изпитания стрес – поне не веднага. Пуснах компа и след малко хората започнаха да изгряват в Скайп. Опитах се да намеря повече информация от European-Mediterranean Seismological Centre, но сайта не работеше. Един приятел ми подсказа да погледна на U.S. Geological Survey. От там разбрах, че е 5.8 и е близо до Перник.

След около час (около 4:00) започнаха да изгряват подробности и по новинарските сайтове. Някъде по това време се гушнахме пак в леглото.

Тя заспа бързо. Напоследък е много изморена. Не знам как ще е още 2 месеца… Мен съня не ме спохождаше. Щом притворя очи и имам усещането, че още люлее. По-скоро паника, не че имаше толкова силни послетрусове. До около 4:30, когато взех да се унасям. И тогава вече чух тътена и пак ни разлюля – наистина. И пак борбата с напиращата паника, докато се опитвам с безгрижен глас да И кажа „Хм, този път е по-слабо“. Странно съчетание от съзнателното усещане, че на практика не се случва нещо страшно, с неистово желание да изкрещя, да скоча да избягам, да изчезна, о боже, няма ли най-после да спре…

Е спря. Но повече не заспах. След третия значителен трус (към 5:15) се отказах и станах. Поне Тя да поспи… Аз ще спя довечера. Надявам се.

* * *

Скоро след това се разведели. Нощните страхове избягаха като парцаливи сенки пред напора на зората. По всички радиа и телевизии обясняваха какво страшно бедствие сме преживяли. Wtf? Но на светло спомените избледняват и сякаш не мога да се сетя какво толкова страшно е имало. Някакво полюшване, какво толкова? Една книга падна от лавица в дневната, това ли ме е стреснало?

Емоционалният спомен не може да се обясни с рационалния. Защо така?

 Posted by at 15:34

Земе-разтресе ни

 Общи  Коментарите са изключени за Земе-разтресе ни
май 222012
 

Около 3:00, и беше бая яко. Вече 20 минути не мога да отворя сайта на европейският средиземноморски сеизмологичен център, за да видя подробности. Но си беше стресиращо.

Според американците е било със сила 5.8 край Перник

 Posted by at 0:23
май 142012
 

Ден първи

Колегата до мен се опитваше да ми каже нещо разведряващо. Само му махнах с ръка да мълчи – не мога да му обърна внимание. Твърде ужасéн съм, за да мога да водя разговор в следващите 3-4 минути.

Иначе излитането не беше лошо. Е, имал съм и по-спокойни излитания (примерно с Airbus A380 – този слон не потрепва и милиметър), но нямаше някакви инциденти. Просто не съм летял от половин година и съм забравил какво е. А ми предстоят още 3 излитания и 4 кацания за 3 дни.

Когато достигнахме нещо като полетна височина, самолета спря да се клати и аз се поуспокоих. Луфтханза правят много за комфорта на пътниците, но първите 5 минути просто трябва да се изтърпят. Какво ли не ми мина през главата – от въпроса защо 10 души от софийския офис, 2 от берлинския и 2 от лондонския ще се събираме в Берлин, до идеята да се захвана с отглеждане на овце и повече да не помириша самолет. Човек не мисли рационално при такива високи нива на стрес.

Полета да Мюнхен продължава под 2 часа. Приземяването беше спокойно, въпреки облачността. Всъщност облаците не са проблем, освен ако не е гръмотевична буря или градушка. Виж, вятъра всеки път е приключение, особено за по-малките самолети. За това и избрах полета на Луфтханза, с Еърбъс А320, макар и с прекачване в Мюнхен. България еър пишат на сайта си, че техния полет до Берлин е със един дърт самолет, който прилича на автобус с крила – Бритиш Аероспейс нещо си. Ветровете го развяват като играчка – летял съм с него до Бон
(всъщност истината за полета на България Еър се оказа друга, и се прецаках, но хайде…)

Кацнахме в Мюнхен по разписание и имахме над час до следващия полет – т.е. половин час за размонтаване. Така успях с очите си да видя, даже да докосна Maclaren MP4 12C.

Никога не бих си купил толкова адски непрактична кола.

Но с удоволствие бих я покарал 🙂

Излитането от Мюнхен преживях много по-лесно. Явно големия зор е само първото излитане. С други думи, ако летя по-редовно, хич няма да се спичам. От Мюнхен до Берлин полета е 50 минути. Не знам дали изобщо стига стандартната летателна височина. Забелязал съм че самолетите на Луфтханза забавят и започват да слизат полека 30 минути преди кацане.

* * *

Летище Тегел в Берлин е като кибритена кутийка. Слизаш от самолета, минаваш десетина-двайсе метра и стигаш до таксито. Невероятно дребно е, дори в сравнение със софийското (да не говорим за Мюнхен). А най-тъпото е, че няма връзка с метро и си обречен да се бориш със задръстваниците. За щастие това летище се пенсионира на 2 юни и няма да се ползва повече. Полетите ще се преместят на ново летище, с няколко часа downtime.

Така де, ние си хванахме един лъскав мерцедес (такива са половината таксита в Берлин) да ни закара до хотел Park Inn by Radisson на Alexanderplatz (добре де, не знам как точно се пише).

Оказа се, че сме на много стратегическо за разходка място. Току до огромната телевизионна кула, молове и всякакви заведения. А, и на 700 метра от офиса. Кеф.

За съжаление нямахме много време за разходка. От 8 имахме вечеря; на другия ден в 9 трябваше да сме в офиса и се прибираме след 11 вечерта (ще разкажа за това), а след това в 9 тръгнахме към летището. Колегите, които летяха с България Еър имаха значително повече време за размотаване на третия ден.

Та така. Към 8-8:30 вечерта групата се пооформи и отидохме в някаква огромна бирария на 200 метра от хотела, където имахме резервация.

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

Все нещо ще става за ядене 🙂

Колегите разказаха, че са долетели с някакъв супер нов самолет. Веднага се сетих, че на скоро България Еър си купиха Ембреър 190 и се изядох от яд. Единственото ми успокоение беше, че колкото и да е нов, все пак е сравнително малък (2+2 места на ред).

Знаете ли, в Германия пушенето в закрити помещения е забранено отдавна. И заведеният не са никак празни, ама хич. Бирарията в която бяхме беше огромна – на маса 146 не бяхме в края на помещението – но пак не изглеждаше празна. Въпреки че беше едва средата на седмицата. Не знам до кога лобистите на тютюневите компании ще повтарят една и съща лъжа, че забраната за пушене в заведения ще фалира заведенията. На мен лично ще ми е по-хубаво да ходя там, когато може да се диша спокойно.

Та така, прибрахме се по тъмно. Хотела е доста висок, 37 етажа. Аз бях на 20-я (асансьора стига до него за 16 секунди, заедно с ускорението и забавянето). Веднага се сетих, че ще станат страхотни нощно снимки. После се оказа, че греша – прозорецът почти не се отваря (само малко, за проветрение). А отвън има стъклена фасада, не много чиста – не и за фотографски нужди – която вечер отразява гадната зелена светлина от близкия мол.

Ден втори

Станах рано. Имах заръка да купя едно лекарство, което не се внася в България. Обиколих всичките аптеки, които намерих, но никъде го нямаха налично. На края поръчах да ми го доставят (в ранния следобед вече е пристигнало). После се събрахме с колегите, хапнахме по някой сандвич и тръгнахме към офиса.

За работа няма какво да говоря. Ще спомена само, че обяда, който ни донесоха (в два и половина следобед, умрях си от глад!) беше някакви много вкусни сандвичи в прецели. Много вкусни и доста малко, между другото. Шефа каза, че е поръчал да доставят достатъчно за „twenty-something” (двайсе и нещо) хора, а ние бяхме 14. Гладни си и останахме.

До към пет следобед отхвърлихме работа, после започна спортната част (или, както му викаме тука, „тийм билдинг“). Дойдоха таксита и ни отведоха на невероятно забавно приключение, на име Beer Bike.

Това нещо представлява нещо като открит бар на колела, но за да се движи, всички трябва да въртят педалите. Един стои в центъра и налива бира, а екскурзовода управлява. Оказа се супер забавно.

И тук идва моята трагедия. Аз си бях оставил фотката в хотела – за какво ми е в офиса? А обиколихме супер много интересни за заснемане места из центъра. Не стига това, ами аз не пия бира. Е, казах си „ако тук не пропия, няма къде“. Насилих се, пробвах няколко пъти – ми гадно нещо си е. И срам – несрам, минах на кока кола.

Екскурзоводката беше една симпатична 19-годишна девойка, която хич я нямаше за екскурзовод. Минаваме покрай някаква интересна сграда, питам какво е – „Ами май някакъв музей“. После покрай Райхстага и около него – „Всичко тук са някакви правителствени сгради“. А иначе е местна, ама кой на 19 се интересува от местните сгради…

Друго интересно за BeerBike-a, че се движи по улицата. Много хора ни се радваха и подвикваха, японците ни снимаха. Бяхме атракция. Е, малко задръстваме движението, ама какво да правиш. Освен това озвучението ни беше супер евтин авто-CD и едни евтини, но гласовити колонки. По едно време CD-то се прецака и закачихме едно Blackberry да пее през колонките. После пък бурето с бира свърши, каката не можеше да повярва.

След няма и два часа нашата обиколка приключи където беше започнала – на паркинга Trabi world, на който освен трите BeerBike-а има десетки трабанти за разходка, няколко джогана, баркас и други интересни соц возила.

На близо има запазена част от берлинската стена

От там трябваше да се доставим до мястото за вечеря – „White Trash Fast Food”.

Част от групата решихме да използваме метро за да стигнем до там. Така успях да видя дъртия клаустрофобичен U-bahn. Стените и тавана са на една педя от влакчето!

* * *

Вечерта в White Trash Fast Food също се оказа добра идея. Обстановката е приятна, мака и доста тъмна. Храната е вкусна, макар и вредна. Опитах крем супа от аспержи – хита на сезона в Берлин. Не е кой знае какво. Поръчах си един бургер с името Big-нещо си, само заради това, че в името си има „Big“. Че след слабия обяд и въртенето на педали бях прегладнял. Е, оказа е наистина Big, едва се справих. И – о, щастие – имаше и други питиета освен бира. Аз карах на „The classic vodka fresh”, което се оказа коктейл screwdriver.

Настана вечер, към 10-11 часа, а аз и колегата, с който сме с Луфтханза, трябваше да си вземем лаптопите от офиса. Дадоха ни един ключ от офиса и хванахме такси. За втори път се убедих, че берлинските таксита са ебаси джигитите. Минава на червено, засича други коли, престроява се където свари… ужас! А, и още нещо – офиса беше сравнително близо (може би 2-3 километра), но той още в началото каза „10 евро“. И така и не пусна апарата. Абе българска работа, както би казал някой.

Та така. Помотахме се пред офис сградата. Входовете – затворени. Някакви хора си шпрехат отпред. Питахме ги как да влезем. Те от начало помислиха, че сме объркали „Ама това е офис сграда“ – „Да, знам. Трябва да влезем да вземем нещо“. „А, ОК“. Цъкнаха един звънец, и вратата се отвори. Толкоз! Някакви непознати балкански субекти – вътре! Взехме си лаптопите и си излязохме, без никой да ни каже копче…

Ден трети

Станах още по-рано, за да мога да пофотам. Взех си душ, даже и вана. Интересно дизайнерско решение: банята всъщност е в стаята, отделена с една завеска. Чувството е много странно – все едно се къпеш в хола.

Излязох, щракнах тук-таме.

Едно нещо ми направи странно впечатление: имаше някакъв голям ремонт край телевизионната кула. Камиони, багери, кал, заграждения… И от двете страни, върху тротоара/пешеходната зона, беше положен дебел слой асфалт, по който да минава строителната техника.

Към 9 тръгнахме към Тегел, с поредния авто джигит. Успя да ни откара за двайсетина минути. Там се поборих с check-in kiosk-а (неуспешно), оставих си багажа и т.н. Качихме се тъкмо навреме в доста нов Еърбъс А321. 40 минути полет и сме в Мюнхен.

Имахме малко, но достатъчно време за да се предвижим до гейт H30. Там имахме щастието да се качим на автобус и да тръгнем на панорамна обиколка на летището. Откара ни до някакво странно малко самолетче (О, ужас!). Е, не чак малко, но по-дребно от обещаното А320. Отвориха вратите на автобусчето, но ни казаха да не слизаме. И ние чакахме…

Първо дойде един наточен Мерцедес. Слязоха някакви хора, качиха се да огледат самолета. После слезе някаква важна клечка. Бахти, да стоим 50-60 човека прави в автобус, за да може някакъв галфон да се качи спокойно! После пък дофтаса бусче, от което влезе някакъв с белезници. Качиха го и него. И най-после ни пуснаха и нас.

Оказа се, че самолета е точно Ембреър 195 – същия, с който България еър прави директния полет до Белин. Демек – не спечелих от избора на Луфтанза. Нищо здраве да е. Качихме се и зачакахме да ни избутат на пистата. И чакахме, чакахме… По едно време капитана се включи по радиточката (на английски): „Уважаеми пътници, имаме забавяне, защото един пътник не се е качил, но багажа му е качен. И заради нашите строги сикюрити правила трябва да видим какво става. Тук ли е господин Дими… тров?“ (двама души вдигат ръце). „Димитров Ди…ми………тар? И Димитров Йор..дан?“ Ами и двамата са налични. Покажете документи, билети, ала-бала… В крайна сметка се оказа, че имало двама Димитър Димитров-ци и единия просто не се е явил (не е оставил и багаж). Нямат ли сурогатни ключове тия, че идентифицират багажа по името на пътника?

И понеже бяха свалили всички багаж, после да го качат, си направихме почти час закъснение. През което време аз треперих как ще се справи тя вейка с ветровете. Оказа се, че се справя добре.

По средата на полета отидох на последната седалка и започнах да фотам.

На края бях толкова уверен, че снимах десетина минути видео – приземяването: от високо в небето, покрай някои много готини облаци, над централна гара, до самата писта. За съжаление поради двойния VR на обектива (Nikkor 28-300), и още един от ръката, така и не се вижда как яко се огъват бразилските крила.

Снимки може да кача след ден-два.

 Posted by at 18:23
мар. 102012
 

Всичко започна с купуването на нов килим. Хубав, мек, неутрални цветове, уж да не се цапа видимо. От светло бежово, през различни кафяви, до черно:

Кой да предположи, че румбата (iRobot Roomba 564 Pet) не обича черното? Пуснахме я да го почисти, тя се разхожда само по широчина и не смее да пресече черните линии. Фиър ъф дъ дарк, дееба.

Започнах с почистване, четки, датчици, ала-бала. Не помогна. Хвърлих едно око в гугъл и намерих това. Историята е следната – има 4 датчика, които гледат да не се изсули от някое стъпало. Всеки от тях има инфрачервен светодиод, който „свети“, и един приемник, който приема отразената светлина. Ако няма светлина – значи има дупка. И румбата обръща.

Обаче черното по нашия килим се оказа твърде черно и не отразява светлината. Описания в горната статия workaround не работи, защото при 564 трансмитера и рисйвъра са в две отделни камерки. Пробвах да залепям изолирбанд, бяло тиксо, даже алуминиево фолио – нъц. В момента в който я пусна, веднага реве „Error 1. Move roomba to a new location, then press CLEAN to restart“
(абе ако си бях поиграл с фолиото, можеше и да направя някакъв „светловод“, който да работи, ама ще е нестабилен)

И така, порових още малко и попаднах на следните „42 лесни стъпки за шунтиране на сензорите за стъпало„. Disclaimer: в резултат на това румбата няма да усеща дупките и може да пада от високо; но у дома стъпала няма, подът е равен. Упътванията са доста ясни, не се прави нищо деструктивно като чупене, рязане, пробиване, разпояване/запояване. Но си трябва смелост за да се направят (и инженерен дух, хехе). Пък и сигурно се губи гаранцията.

И така, ето я моята румба на операционната маса:

Ето как залепих и четирите датчика:

Честно, в повечето случаи не бих се заел с такъв ремонт. Не знам какво ми става днес. Още от нощес ме държи авантюризма. Направо ме е страх да си пусна VPN-а – да не взема да upgrade-на някоя production база.

А най-странното е, че след като завих всички болтчета, всичко си тръгна от раз. Ефекта на затворената кутия го нямаше!

И сега, румба си мете килима. Датчика за блозост до обект си работи (забавя преди да се буторяса някъде); датчика за докинг станцията също не съм го преебал.

Ура!

 Posted by at 17:55

iOS 5.1 on iPad 2

 Общи  Коментарите са изключени за iOS 5.1 on iPad 2
мар. 092012
 

Изглежда че работи.

Пробвах да я инсталирам през iTunes, тегли я маса време (6-7 минути) и на края каза нещо за майка ми. Отговорих му подобаващо и – мечка страх, мен не страх – го пуснах направо от iPad-а. Мина за, хммм, около 10 минути, абе от раз.

Пощата ми работи (Exchange), другите най-използвани от мен приложения (Thinking Rock и Notes) – тоже. Calendar, Da Dictionary, Discover, както и разни игрици не се оплакват.

Абе слагайте. Уж някакви проблеми с батерията оправя. Не че се оплаквам, държеше си доволно…

 Posted by at 23:25