2014/11/30–Seattle Marathon–3:23:45

 

В хто зна який раз (насправді в шостий) ми приймаємо участь в цьому чудовому старті. Цього разу було холодно, найхолодніший Сіетльський марафон на моїй пам’яті. Температура впала ще в суботу, і на момент старту в неділю було –5 по цельсію і холодний вітер.

 

 

Ми з Оленою стартували в рукавичках і шапках які збиралися викинути по дорозі, але я свою шапку навіть не знімав. Так само хотів викинути і кофту, але доніс її на собі до фінішу бо час від часу налітав холодний вітер і я був майже готовий одягти її назад.

 

 

У Оленки старт був о 7:30, а я ховався від холоду аж до 8:15. Чи то через погоду, чи то з інших яких причин але цього року людей було помітно менше. На марафон вийшло щось близько 2 тисяч людей, на півмарафон добре якщо 10 тисяч, а скоріше менше.

 

 

Враховуючи усі свої травми та дуже поганий результат попереднього марафону (2014/10/02–Portland Marathon–3:30:32) я ні на що особливо не розраховував і спеціально уникав дивитися на годинник усю дорогу. Першу частину дистанції біг в районі пейсерів з табличкою 3:15, а десь на 20-му кілометрі відстав від них і біг у власному темпі.

 

 

На дистанції жодного разу не було відчуття того що легко біжиться, або того що увійшов у правильний темп. Тобто я не лише не готовий фізично, але і морально не готовий бігу на результат теж.

А з іншого боку вдалося пробігти відносно рівно без особливої втрати швидкості на останніх милях (на цій трасі останні кілька миль йдуть в не надто круту гірку) і навіть не зупинявся ні разу що вже можна вважати досягненням.

 

 

Якось більше писати і нема про що так вважаємо цей звіт завершенним Smile

У підсумку я був 148-й у загальному заліку, 133-й серед чоловіків, 23-й з 176 в своїй віковій групі.

Геловін в GoDaddy

На відміну від Microsoft в GoDaddy якась більш грайлива атмосфера і не зважаючи на відсутність персональних офісів у нас натомість є безкоштовні щоденні обіди від ресторанів навколо, кава/лате/пиво/вино/джин-водка-ром/горішки/цукерки і таке інше. І до свята що наближається люди готуються більше серйозно.

 

Якщо в МС дехто інколи прикрашав офіс черепом чи кабаком та приводив дітей то тут усе на набагато вищому рівні. Пам’ятаю у МС постійно точилися дискусії коли одна половина жалілася що свято вже не таке тепле і лампове як було колись і чому дітей одягають в метеликів, принцес та навіть костюм банана, яким боком це страшно? На що інша половина відповідала що вони не хочуть щоб дітям було страшно, і це миле затишне свято з цукерками та костюмами принцес. І ці дискусії точилися постійно.

 

Класично, це моє розуміння, свято Геловіну походить від дня вшанування мертвих і має бути страшним. Люди дитинство яких прийшлося на 50-60-ті роки розповідають що дітьми вони ходили за цукерками малими і їх усі лякали, тим кому не давали цукерок, або давали погані закидували двері яйцями, старші діти на велосипедах нападали на групки молодших і відбирали цукерки. А цукерками об’їдалися до блювоти.

 

Зараз же батьки з дітьми одягненими феями і принцесами ходять по будинках сусідів і збирають цукерки та печиво, але дітям солодощів не перепадає бо багато цукру шкідливо і все таке. Коротше розумієте чому стара школа не любить те у що перетворилося це свято.

Але знову ж таки – у нас все серйозно і по дорослому Smile

 

До того ж це перший Геловін який ми з Оленою вирішили не ігнорувати: купили маски, цукерки, прийняли участь в прикрашанні офісу.

А в спортклубі та магазинах зранку можна було побачити багато людей одягнених у різні, хоча і не завжди страшні костюми: пожежник, черепашка-ніндзя, поліцейський, гіппі і таке інше. Ну і звісно багато зомбі, смертей з косами, орків з мечами та іншої нечисті. Про відьом у гостроверхих капелюхах вже не згадую.

 

Дивно що свято це схоже все сильніше поширюється в Україні. Дивно тому що я не розумію чому саме це і як воно взагалі було привнесене. Ну у нас же і своїх свят вистачає. Не те щоб я за те щоб наше рідне виключно відзначалося та святкувалося, але не можна не помітити доволі таке сліпе копіювання американського усього. Навіть не знаю чи добре це чи ні, наче ось таке прямо з нечистю та костюмами у нас не було поширено, а цього року у тому ж фейсбуці я бачу що ледь не кожне у себе на роботі так чи інакше відзначив Геловін.

 

Я ж ніяк особливо не одягався, але купив собі прикольну маску до якої приєднано пластикове серце і дві трубки. Коли серце стикаєш з нього червона рідина починає стікати маскою – там прозорий пластик, а під ним жовний, от між ними та “кров” і тече.

 

А ви якось відзначали це свято? Які у вас взагалі думки з цього приводу?

 

2014/10/02–Portland Marathon–3:30:32

Поки що це мій найгірший результат на марафоні, але скажу чесно я не надто сильно розстроївся що є дивним. Єдине що так багато часу зайняло написати про цей марафон через те що власне мало чого хорошого маю сказати.

 

Отже Портланд, найбільше місто штату Орегон, дуже незвичне і особливе місто: рози, мости, велосипедисти, хіпстери таке інше, деталі читати тут – Портланд, Орегон–місто мостів, троянд і диваків.

Приїхали ми за день, зупинилися на краю міста, звідти в центр в якому і був старт/фініш їхати 15 хвилин.

 

Готель “Хілтон” в самому центрі міста віддав пару поверхів на виставку/реєстрацію учасників де ми забрали свій номер і дещо купили у деяких компаній та магазинів що представляли різний біговий одяг, кросівки, продукти та інше.

Взагалі цей марафон дуже відомий і популярний і одразу хотіли зареєструвати і Олену на половинку марафону, але на момент реєстрації (а це за 3 місяці до старту було!) все всі місця на пів-марафон було розпродано.

Усього на страрті було більше 10 тисяч бігунів на повний та пів-марафон.

 

Мій план був дуже простий: бігти з групою 3:15 (власне це і була моя ціль), а там вже дивитися як виходить. Старт наший був о 7-й ранку і за пару кілометрів з центру з натовпами глядачів ми добігли до набережної (річка Коламбія) і побігли робити кількакілометровий крюк. Взагалі було прикольно по дорозі назад бачити весь той натовп що тільки суне від старту: щільний нескінченний потік людей на протязі пари кілометрів, це надихає…

 

З самого початку я вже розумів що навряд чи зможу пробігти як планував. Крім відчуття елементарної неготовності було неочикувано тепло (було обіцяно легкий дощ та прохолоднішу температуру), а крім того старт був занадто швидкий. Пейсери (це ті що біжать з табличками, в моєму випадку з табличкою 3:15) повторювали що ми біжимо швидше тому що в другій половині дистанції є пара серйозних гірок і вони просто хочуть щоб у нас був запас часу.

 

Взагалі траса дуже дивна була і я чесно кажучи не розумію звідки така популярність у цього марафона  чому він стабільно входить в десятку тих що їх обов’язково треба пробігти в США. Як на мене марафон в Сіетлі і красивиший видами і цікавіший трасою.

Тут ще половина дистанції проходила між якимись гаражами і промисловиви будівлями (але дороги такі самі хороші), а друга половина у місті де натовп дуже привітно підтримував бігунів.

А ось це на фото найменший парк у світі. Так, ця клумба зареєстрована як парк:

 

Отже десь 6 км пройли містом (центр, вздовж річки), а потім ми забігли у якусь промислову зону без затінку взагалі і кілометрів 10 бігли під сонцем що вже почало добре припікати. Потім зробили поворот і забігли знову у місто. І зново натов з табличками, вереск, крики підтримки і місцеві групи грають вздовж траси кожні кількасот метрів.

Світлини з розами зроблені наступного дня у місцевому парку Роз де можна подивитися/понюхати безліч їх видів з усього світу:

 

А я тим часом почав уже замислюватися коли і як буду скидати швидкість. На початку я біг кілометр по 4:20, троши зашвидко, 10 км подолав за 44:35, все ще дуже швидко, половина дистанції пройшла за 1:34:43, було вже важкувати, але не хотілося відставати від групи.

image

 

От перед заходом на перший мість (миля 17, або 27-й кілометр) і починається перша складна гірка: дорога піднімається до моста дуже круто, а потім і сам міст йде дугою. І ось на цьому підйомі я скинув швидкість, а потім вже так і не зміг її увімнкути і миттєво відстав від групи.

Власне десь на мосту більшість груп і розпадається. Всі люди що до того бігли невеличкими купками і трималися за тих з ким зручно бігти раптом розсипалися на поодиноких бігунів і далі було саме страждання аж до фінішу.

 

З моста вид відкривався неймовірний: широка ріка, місто зелене, з хмарочосам що ростуть вздовж берега, на воді різноманітні човні і кораблі, вдалину йдуть ще безліч мостів (у Портланді їх неймовірно просто скільки).

А бігти ставало все важче, сонце пекло все сильніше. Я зупинявся на кожній точці з водою і спортивними напоями, але підтримувати темп вже не вдавалося. Вирішив бігти так що не нашкодити собі бо вже ясно було що хорошого результату не вийде.

Коротше на середині мота (вершина найбільшої гірки на трасі) на позначці 17.5 миль мій час був 2:10, а швидкість впала з 7:13 за милю до 7:26.

 

Далі власне і розказувати нема чого. Швидкість падала, я все частіше зупинявся, ноги боліли, фініш був все так же далеко.

Але ось вже і другий міст, перебігаю його і вбігаю назад в цент міста. Китайський квартал, велечезні дракони на воротях, знову натовп, але цього разу дорога вже відгорожена бар’єрами і відчуваєш себе ледь не фінішуючим олімпійцем.

 

На одноколесному велосипеді катається чувак у шоломі Дарта Вейдера, в кілті і грає на волинці. Усі хто пробігають повз нього кричать одне одному що це глюк від знесилення та дегідрації, що це тепловий удар.

Вибігаємо з китайського кварталу знову на набережну, тут я біг три години тому, але повний сил і сподівань Smile Бігти стає складніше і через те що людей набагато більше – фінішують сотні повільних пів-марафонців. І ось поворот, ще одни, ще один і фініш!

На фініші медаль на шию, полежати, посидіти, з’їсти морозиво, взяти розу, взяти футболку і куртку які видають на фініші, взяти банан-апельсин-яблуко-печиво-молоко, йду шукати Олену.

Фінішна зона реально велики і вийти з неї можна лише подолавши доволі тривалий огорожений лабіринт вуличок.

Ну і все, знаходимо одне одного, їдемо в готель, відлежуюся, вечером тортик з морозивом і кавою, наступного дня відпустка одноденна – проводимо її в парку троянд і додому (три години).

Чесно кажучи я не певен що хочу бігти цей марафон вдруге – в цей же приблизно час проходить набагато красивіший марафон у Вікторії (2013-10-13–Victoria Marathon, 07/10/2012–Victoria Marathon, Victoria, BC–3:23:48) куди ми мабуть і зареєструємося наступного року. Але я радий що спробував.

Як мене збила машина

Оскільки вся ця справа нарешті завершилася можна вже і розказати.

Отже після повернення з неймовірної подорожі у пустелю Моаб де ми три дні каталися на гірських велосипедах (читати тут – https://blog.golovatyi.info/2014/05/04/white-rim-moab-ut/) вже дома я вийшов побігати вечером і бац…

Вибіг я такий з дому, пробіг менше двох кілометрів, біжу звивистою дорогою з гірки, біжу по обочині, думаю щось про своє. І раптом чую гучний удар… Так, це було перше що я помітив – звук удару. Потім помітив що замість дороги і дерев я бачу перед собою небо. А потім вже вдарився об землю.

Взагалі уся ця “пригода” була схожа на якийсь із трюків з фільмів Джекі Чана. Схоже що було все так: машина спочатку вдарила мене лобовим склом у лівий лікоть (лобове скло я таки пробив) який як раз йшов вперед і трохи підкинула мене вгору, ноги підлетіли і праве дзеркало вдарило мене під ліве коліно (там був поріз. а дзеркало знесло с машини). Таким чином я підлетів горизонтально і впав на праве плече і троши на ньому проїхав по траві і гравію.

Отже лежу такий і бачу як вильнула машина попереду. Перша думка була що мене штовхнули з машини. Потім прийшо розуміння що я тільки що літав і той гучний звук що я чув мабуть означає що мене та машина збила.

Тут почалася паніка “МЕНЕ ЗБИЛА МАШИНА!!!”. Прислухався до себе – наче нічого не болить. Спробував сісти і ура, можу сісти, спина не пошкоджена. Потім ноги, мацаю ноги, виглядають наче цілі і нічого поки не болить. Чомусь немо кросівок на ногах, але ж нічого не болить і зовні усе ціле!

Пробую встати і це мені вдається. Обдивляюся себе і помічаю що ліва рука вся у крові. Мацаю голову з переляку, але вавок наче нема. Звідки ж кров? Обдивляюся себе: а, це лікоть розбитий, але рука рухається, отже не так страшно.

Зупиниласть машина і тітонька щось мене питає. Я кажу що нічого не розумію і прошу подзвонити у 911. Вона каже що вже подзвонила. Зупиняється друга машина і водій щось питає у тітки і потім каже мені що спробує наздогнати машину яка мене збила.

Я ж тим часом ходжу по битому склу і шукаю свої кросівки. Тітонька мені каже щоб я цього не робив, але я їй пояснюю що мені терміново треба знайти кросівки бо інакше Я МОЖУ ПОРІЗАТИ НОГИ ОБ СКЛО!

Тут повертається машина яка мене збила і водійка починає вибачатися, я їй кажу що живий і продовжую шукати кросівки.

Приїздять пожежники. За моїми відчуттями пройшло максимум 2 хвилини. Мене обдивляються, закріплюють шию в каркас. А тут і поліція. Офіцер записує мої данні і хлопає мене по плечу – щасливчик, каже. Йому не видно що на лопатці у мене футлобка порвана, а я раптом починаю відчувати біль у плечі.

Далі мене закріплюють на каталці, я дзвоню Олені і розказую що сталося, кажу що все в порядку і куди мене везуть.

Ось я вже в швидкій допомозі. Тут мене залишають на якийсь час, потім приходять зрізають ножицями одежу і промивають рани. Залишають ще на більше часу. Потім везуть на томографію шиї і взагалі командують не рухатися доки не буде ясно що зі мною. Ще через якийсь час кажуть що все ціле і корсет знімають.

Приїздить Олена, а мені колять знеболюєче і починають зашивати лікоть. Тут мені вперше стає погано від болю. Плече вирішують не зашивати бо рана дуже глибока і довга, бояться щоб запалення не було.

Приїхала поліція. Знайшли мої кросівки за 15 метрів (!) від того місця де мене збили. Офіцер розказав що він вперше бачить щоб машина була з такими пошкодженнями, а у жертви навіть жодного перелому нема. У них там усі хто бачили пожмакану машину очикували що збила вона когось насмерть. Отаке от.

Також він мені сказав що водій яка мене збила нетвереза, зараз заарештована і взагалі він вперше бачить когось настільки п’яного. Навіть дивно як вона взагалі в машину сісти змогла. Підписав якісь протоколи і на цьому все.

Ну і все, Олена забирає менен додому. За моїми враженнями пройшло хвилин 30 максимум. але насправді це було годин 5. При цьому я не втрачав свідомості наче.

Наступний день відлежувався дома, плече, лікоть, прес та боки болять страшенно, але можна обійтись без пігулок. Проте сідати, лягати, вставати дуже боляче, пересуваюся як робот-пінгвін.

На третій день поїхав до хіропракта (у нас здається це називається мануальний терапевт). Справа в тому що наслідки автомобільних аварій як правило починають серйозно проявлятися через 2, а то і 3 роки. До того організм намагається скоригувати усі мікропошкодження м’язами, невеличкими викривленнями хребта чи шиї, зміною походки і таке інше. Але ці мікрокоррекції призводять до більшого дисбалансу і якраз через 2-3 роки усе сипеться в один момент. Можуть початися хронічні головні болі, проблеми з попереком чи ще що завгодно. Тому лікарі рекомендують зробити максимум необхідних перевірок та лікування якомога швидше після аварії.

Через те що у мене страшенно боліли боки хіропракт не став мене сильно жмакати, а натомість порекомендував поїхати і перевірити чи все в порядку у мене з нирками та печінкою, була можливість травм. Отже я вдруге опинився у швидкій, лише цього разу потрапив туди своїм ходом. Зробили томографію і сказали що всі органи цілі, а от м’язи преса пошкоджені і всередині великі гематоми.

Олена тим часом знайшла адвоката який узявся за нашу справу. Той роз’снив нам що у подібній справі є три єтапи: кримінальна справа де місто чи штат виступає проти водія, цивільна справа де страховка водія має оплачувати моє лікування та те що у нас називаються “моральні збитки”, а у них тут “біль і страждання”. Третя частина це де я можу сказати що от я такий спортсмен, маю графік змагань, маю певний стиль життя, а тепер насильно мені все це поламали, крім того моя дружина/родина налякалися, також це вплинуло на мою роботу і так далі.

Стосовно кримінальної частини зі мною зв’язався обвинувачувач від міста де сталася пригода і повідомила мені що як буде необхідність то мене викличуть в суд. Але так і не викликали і наскільки я розумію водій не виходячи з тюрми так в тюрмі і залишилася. Але наскільки не знаю. Факт що крім ув’язнення вона ще сплатить кілька тисяч штрафу місту, втратить право водити машину на кілька років та її кредитна історія зіпсована наскліьки що купівля будинку чи дорогої машини стає для неї неймовірно дорожчою.

Також на запит мені прислали електронною поштою поліцейський протокол. Такий собі документ у pdf форматі на 25 сторінок де записано слова свідків (а також їх персональні данні), слова поліцейського, слова лікарів, мої слова. Там, наприклад, прокольно було прочитати як поліцейський попросив водія зробити 9 кроків по прямій, повернутися і зробити їх назад. Водій збилася з рахунку, потім забула що робити. Лікар попросив її порахувати від 9 до 1, вона сказала “дев’ять, вісім і так далі”. Показання свідка що їхав одразу за її машиною говорять про те що машина вильнула щоб мене збити. Отаке от.

Щодо цивільної частини то страховка водія довго опиралася і все розказувала що вони самі проведуть розслідування щоб підтвердити що мені насправді потрібно було усе те лікування. Дійшло до того що лікарні та швидка почали дзвонити мені і вимагати гроші, я всі ці дзвінки і листи спрямовува до адвоката. В кінці кінців (через 6 місяців) страховка водія погодилася сплатити усі мої рахунки і заплатити зверху мені щоб я підписав документ що у випадку майбутніх проблем не матиму претензій до них.

Що сталося б якби у водія не було страховки? Тут є кілька варіантів. По-перше, це моя автостраховка (оскільки це була авто-аварія). Навіть якщо вона не покриває все то у мене є медична страховка. Потім страхові якось би відшкодовували свої збитки з водія. І навіть у випадку якби у жодного з нас не було б страховки передбачений – у штата є спеціальний фонд звідки беруться гроші на лікування жертв аварій.

У мене зайняло 3 тижні доки я нарешті почав плавати, а ще через тиждень вже почав потроху бігати. Взагалі організм відреагував набором ваги за цей місяць і я повністю втратив будь-яку швидкість. Власне кажучи якби займався спортом то може і не помітив би що щось змінилося, а так безперечно видно що став важчим, повільнішим і менш витривалим. За розкладом у мене через місяць був тріатлон який я так і не зміг фінішувати (2014/05/31–Troika Triathlon).

Зараз залишилися маленькі шрами на лікті, два некрасиві і дуже випуклі шрами на плечі, в усьому іншому наче більш-менш добре.

Отаке от, так що будьте уважними!

Чим я займався в Windows Phone, або Windows Update

З квітня 2012 по лютий 2014 я працював у Windows Phone в команді яка називалася Device Update. В цілому я пережив 2 великі реорги (це коли перетасовують структуру команд і продуктів щоб оптимізувати взаємодію), але весь час моя команда була частиною того що умовно можна назвати командою ядра Windows Phone. Організаційно моя команда була споріднена з наступними:

  • Core – команда яка займалася тим що вирізала все що можна з ядра Windows 8 і намагалася це примусити працювати на телефонах. Також в їх задачі входило примусити працювати, або знайти чому не працюють драйвери від сторонніх виробників таких якQualcomm.
  • Security – на телефоні кожна програма що не є частиною ОС працює в своїй жорстко обмеженій пісочниці і не те що не має доступу, але навіть і не бачить ресурси (файли, диск, пам’ять, реєстр, мережа, …) крім тих про які їй дозволено знати. Система безпеки телефону не покладається на механізми десктопної Windows, а по суті заміняє її. Це необхідно тому що вимоги до програм на смартфоні абсолютно інші ніж до десктопних програм.
  • Network and Drivers – на телефоні свій стек протоколів для WiFi, Bluetooth і усього іншого, але виглядає це як частина ОС.
  • Device Update – моя команда яка відповідала за оновлення на телефоні що рештою дівізіона сприймалося як частина ОС.

Ще в Windows Phone існують такі великі команди як UI, Developers Platform, Services та інші.

Тепер невеличкий відступ про механізми Windows Update. Технологія ця існує доволі давно і добре обкатана в самій ОС, а відносно недавно і інші продукти почали оновлюватися використовуючи цей механізм. Але важливо не плутати з механізмом оновлення програм з магазину – це зовсім інша сутність ніяк не пов’язана з ОС.

Працює Windows Update приблизно так:

  • клієнт питає у сервера щось типу “що в тебе є для категорії Windows/Windows Phone/XBox/Office/…”. Сервер повертає список версій: Windows 6, 6.1, 6.2 і так далі.
  • Клієнт каже “о, а я Windows 6.2, що там у тебе є для мене?”. До речі оте 6.2 це версія ядра ОС.
  • Сервер повертає список так званих детектоідів. Це такі логічні умови типу “значення ось цього ключа в реєстрі знаходиться між A та B”, або “версія ось такої DLL дорівнює ХХХ”, або “мова встановленна в українську”. Ну ви зрозуміли. Причому умови можуть бути які завгодно, а їх перевірку виконують так звані провайдери що реєструються на клієнті. Є провайдери для файлів, ресурсів (версія ОС, розв’язок екрану, версія драйверів), реєстру і інші. Таким чином клієнт не має уявлення як перевіряти детектоїди і що вони означають, а просто викликає відповідні провайдери. Імена детекоідів містять провайдерів, щось типу “./system/hardware/monitors/1/resolution/width”.
  • Для тих детектоідів умова яких істинна серверу повертаються ідентифікатори, а сервер повідомляє які файли відповідають цим детекоідам.
  • Клієнт викачує файли і робить з ними що хоче. Зверніть увагу що ні формат файлів ні що з ними робити протокол не диктує.
    Насправді там може бути кілька рівнів категорій і детектоідів, детектоіди можуть мати складні і навіть вкладені умови, один файл може бути пов’язаний з кількома детектоідами і таке інше. Але суть думаю зрозуміла.
    До речі коли ви встановлюєте Windows ваша машина отримує випадковий номер від 1 до 100 що використовується виключно механізмом оновлення. Коли ОС за розкладом перевіряє оновлення вона повідомляє серверу цей номер і той може сказати “у мене для тебе нічого нема”. Це зроблено для того щоб зменшити наватнаження на сервер який щодня без перебільшень смикають сотні мільйонів клієнтів. Також це дозволяє перевіряти оновлення на мешній аудиторії, скажімо перший тиждень віддавати його лише 1% користувачів. А от коли ви заходите в Панель Управління і натикаєте “Шукати оновлення” там то ваша ОС каже серверу “кажи що в тебе є і не дивись на мій номер”.

Коли було прийнято рішення оновлення Windows Phone зробити доступними за допомогою Windows Update (це дозволило уникнути реалізації серверної частини та деяких інструментів) то виникло кілька проблем специфічних для смартфонів, деякі з них:

  • через те що батарею треба економити не можна постійно тримати у пам’яті процес яки лише раз на кілька днів буде перевіряти чи є на сервері оновлення.
  • для зменшення трафіку дерево категорій та детекоідів має бути нижчим, але ширшим.
  • файли не мають бути надто великими щоб у випадку поганого зв’язку не качати заново один і той же файл знову і знову. Ні, докачувати не можна, а чому – залишу вам як домашню вправу для самостійних роздумів Smile Підкажу лише що весь сеанс від першого звернення до серверу до завершення розпакувування останнього файлу має бути транзакційним.
  • через обмеження пам’яті не можна скажімо розпакувати нову версію DLL і почати її використувавати для нових процесів в той час як старі використовують стару версію.
  • через обмеження дискового простору не можна розпакувати оновлення і чекати до наступного перезавантаження телефону щоб замінити ними старі файли.

Із секретів можу сказати таке що на смартфоні (і не лише Windows Phone) встановленно дві ОС, одна спеціально для того щоб встановлювати оновлення на іншу. Тобто зі сторони пристрою процес виглядає приблизно так:

  1. Знайти і викачати оновлення на сервері
  2. Запропонувати користувачу встановити їх
  3. Розпакувати оновлення (по суті це не нові файли, а лише те що треба змінити в існуючих)
  4. Перезавантажити телефон в другу ОС
  5. Пропатчити оновленнями файли на робочій ОС (на тому диску де встановлено робочу ОС)
  6. Перезавантажити телефон в робочу ОС
  7. В процесі завантаження виконати програми що зареєструвалися як мігратори даних зі старої версії в нову

До речі Apple так і не подужала зробити нормальні оновлення для iPhone і користувачі тупо викачують імідж (тобто цілий знімок диску) робочої ОС. Для цього їм треба тримати порожнім місце розміром таке саме як диск робочої ОС.

Із секретів можу сказати що функція “повернути до заводських настроєк” не відновлює оригінальні версії файлів, а просто стирає все з диска на якому зберігаються настройки і файли користувача, а робоча ОС залишається без змін. Таким чином якщо ви встановили хоч одне оновлення то повернути телефон у справді заводські настройки можна лише повною його перепрошивкою. Алетернативою було б мати ще один диск з оригіналами файлів, але на це ніхто з виробників не піде – робити пристрій дорожче заради сумнівної користі…

Одна з переваг переводу Windows Phone на Windows Update полягає в тому що теоретично (нижче детальніше чому теоретично) можна викладати оновлення коли Mictrosoft має їх готовими та протестованими. Десктопна Windows так і робить. Але у світі мобільного зв’язку волю диктують оператори. Жоден оператор не погодиться продавати телефони якщо вони не зможуть контролювати що саме на них встановлюється. Саме тому Microsoft не може самовільно робити доступними навіть критичні оновлення. Кожне оновлення має детекоід “оператор має бути Х”. Apple диктує свою волю операторам, у них інша ситуація. Що стосується Android то там шаленна фрагментація ринку і ніхто не зацікавлений робити доступними оновлення, краще продавати телефони з оновленою ОС і тому Google віддала оновлення на відкуп операторам та виробникам телефонів. Тобто вони їх звісно роблять, але публікацією не займаються, кому цікаво той сам робить оновлення доступними.

Я особисто вважаю що Microsoft має найвдалішу модель оновлень, але нажаль ситуація на ринку не дозволяє її задіяти.

А тепер зі сторони того хто публікує оновлення, звісно теж не всі особливості:

  • треба визначити між якими версіями мають існувати оновлення. Якщо для Windows нормально мати ланцюжок 1 оновлюється в 2, 2 оновлюється в 3 і так далі та ще й з перевантаженнями між оновленнями то для телефонів це не підходить: забагато викачувати, та і клієнти викинуть телефон якщо той почне перезавантажуватися кілька разів. Тому якщо вже опублікували оновлення з 1 до 2 то треба буде публікувати і 1 в 3 та 2 в 3. Ну і так далі.
  • після того як готова чергова версія (наприклад щоденний білд) треба не просто згенерувати оновлення для усих існуючих версій, але і розуміти які оновлення для чого та якось їх ділити на пакети. Наприклад у телефонів на відміну від десктопів розв’язок екрану фіксований, а тому оновлення для 600х800 та 600х1024 треба публікувати як окремі навіть якщо це єдине чим вони різняться. Додайте сюди мови (інтрефейсу, клавіатури, голосу і так далі), країну і ще багато всього і раптом з одного білда у вас виникає оновлень на кілька гігабайт.
  • до речі клавіатура (та деякі подібні речі) дуже цікавий приклад. Оновлення усіх можливих мов клавіатури ставити на кожен телефон не має ніякого сенсу, а коли користувач додає собі скажімо українську клавіатуру то її можна встановити лише з повної версії файлу, а не з патчу. Таким чином деякі оновлення містять як нові версії так і оновлення і використання того чи іншого визначається складними умовами.
  • оскільки смартфони захищені доволі серйозно то все що публікується має бути пошифровано і захищено сертифікатом який періодично закінчується (доволі часто).

Тепер подумає які ще є особливості в публікуванні оновлення. Скажімо MIcrosoft має нову версію до якої хоче обновити телефони. Будується імідж з якого виробники, наприклад Nokia, вибирають для кожної моделі саме те що їх цікавить. Десь не потрібна фронтальна камера, десь NFC, десь контроль трафіку, десь ще якісь фічі. Після тестування цієї версії виробник повертає імідж який вони модифікували і довопнили своїми компонентами. Тепер імідж треба підписати, згенерувати оновлення для попередніх версій і віддати операторам. Оператори вимагають гроші за тестування кожного оновлення (сотні тисяч долларів) і тому так часто як для десктопа виставляти оновлення не вийде. Власне з того що я бачив оновлення з’являються у доступі приблизно через рік після того як їх розробка завершена. Навіть зараз на наших Lumia 920 тa 1520 є не все що мав на своєму розробницькому телефоні 2 роки тому.

Так чим же займалася моя команада? А ось чим:

  • Інструменти які в процесі білду генерують оновлення для попередніх версій.
  • Публікація оновлень для усіх бранчів (їх було більше 150 на 2000 програмістів) теж в процесі білду. Таким чином розробники могли прошити свій телефон своїм бранчем і щоранку отримувати апдейти для нічного білда, або пропустити кілька днів і отримати апдейт що перестрибував кілька версій. Я в основному цим ось і займався.
  • на пристрої – частина що сканує, скачу і готовить оновлення
  • частина другої ОС що власне виконує оновлення
  • фреймворк для клієнтських міграторів данних

Ось, поки на цьому зупинюся. Хотів написати більше, але вже і так багато вийшло. Задавайте питання якщо є які.

2014/09/21–Kirkland Triathlon

Вже втретє робимо цей невеличкий тріатлон що проходить в нашому місті:

У порівнянні з минулим роком погода була трошки краща, а в цілому і за результатом і за відчуттями вийшло майже те саме що і минулого року.

Цього разу нам не повезло з фото і я знайшов лише пару своїх фотографій. А ще минулого року на цьому старті був присутній мій батько.

 

Почнемо з плавання. Знову було кілька хвиль і кожен бажаючий стартував у тій хвилі якій хотів. Минулого року я плив без гідрокостюму і за моїми враженнями це уповільнило мене на пару хвилин (дистанція спрінт, плавання 750 метрів), хоча і дозволило зберегти секунди на першій транзитній зоні. Результат це підтвердив: плавання вийшло 13:37 проти 15:17 минулого року. І транзитну зону я пройшов за 02:14 (минулого року за 1:44). Так що навіть на такій короткій дистанції гідрокостюм дає виграш.

 

Велоетап проходив в 2 кола де перші 6 кілометрів йшли в помітну гірку, а останні 4 це був крутий доволі спуск (на якому я боявся і гальмував більше ніж треба). Доволі нетиповий профіль для тріатлону де стараються зробити велоетап якомога пласкіше.

Час вийшов таким самим майже: цього року 23 км подолав за 45:06, минулого 45:01. І друга транзитка вийшла 53 секунди проти 52 секунд минулого року.

 

Що стосується бігу то в цей раз весь час було за ким тягнутися і з ким боротися, навіть вдалося прискоритися на останньому кілометрі. В результаті 5 км пробіг за 19:55 проти 19:59 минулого року Smile

 

У підсумку результат 1:22:03 і 4-те місце у своїй віковій групі, а рік тому було 1:22:51 і 3-тє місце. Вже наступного року на цьому старті потраплю в іншу вікову групу і з’явиться шанс боротися за перше місце Smile

 

А Олена нехай сама про свій старт напише як захоче, я вважаю що вона хоча і не з видатним результатом, але доволі непогано виступила. Проте вона своїм часом і місцем майже ніколи не цікавиться, їй більше цікаво участь приймати.

CppCon 2014

Короткий звіт про тиждень що я його провів на зльоті представників комітету зі стандартизації С++, розробників компіляторів та бібліотек, розробників що займаються оптимізацією коду та “промислових” представників галузі: розробників ігор, дослідників ведучих наукових закладів та представники найвідоміших компаній.

Усього було присутньо більше 600 людей. Щодня сесії на різні теми починалися 0 9 ранку, закінчувалися о 6 вечора з 2-годинною перервою на обід. О 8 вечора починалися воркшопи (класи) де можна було поговорити скажімо з авторами бібліотек boost, представниками комітету зі стандартизації С++ або іншими видатними людьми. Паралельно доповіді тривалістю в 1-1.5 години читалися у шести аудиторіях проіменаваних на честь видатних вчених: Паскаль, Ньютон, Ферма, Лейбніц, Декарт та Ейлер.

Цього року більшість доповідей було присвячено паралельному програмуванню (~80%) на відміну від попередніх років коли акцент робився на метапрограмування (шаблони).

Багато також говорили про новий стандарт С++14 в який увійде все те що було недороблено в С++11. А вже в С++17 буде багато нових змін які будуть підкориговані в С++20.

Ну і декілька речей які особисто мені запам’яталися.

Всюди auto

Сучасна рекомендація полягає в тому щоб використовувати auto де тільки можна. І суть в тому що це не лише коротший запис, але і безпечніший: скажімо при зміні типів в алгоритмах/інтерфейсах/структурах данних на відбувається прихованого приведення типів. Тому замість

for (list:const_iterator it = l.begin(); it != l.end(); ++it) {...use(*it);...}

В С++11 можна (і треба) писати

for (const auto& i: l) {...use(i);...}

А в С++14 стане можливим навіть

for (i: l) {...use(i);...}

Але авто-виведення корисне не лише для циклів та ітераторів, але і для лямбд, які за новим стандартом можуть повертати лямбди як результат:

auto plus = [](auto x){ retur [](auto y){ return x + y; } };
auto plus4 = plus(4);

auto s6 = plus4(2);
auto s10 = plus(4)(6);

Правила виведення типів

Через додання авто-виведення типів в мову довелося додати правила за якими це виведення відбувається. Усього цих правил більше 10 зараз і тим хто розробляє бібліотеки треба їх усі знати і розуміти дуже добре. І в цілому тенденція така що мова для тих хто пише біблітетеки мова стає складнішою і дозволяє робити тонкіші речі, а для тих хто користується бібліотеками мова навпаки стає простішою.

Так от для виведення типів треба враховавати що діють правила як для шаблонів, а для шаблонів тип шаблону залежить від параметрів методів. Крім того авто-типи втрачають константніть/волатильність. Ну і для типів-значень правила виведення завдяки слайсінгу складніші ніж для вказівників та посилань.

Нові рекомендації для програмістів:

  • для обов’язкових параметрів які не будуть змінюватися використовувати const &
  • для обов’язкових параметрів які будуть змінюватися використовувати &
  • для необов’язкових параметрів використовувати *
  • для оптимізаційних трюків і передачі прав володіння використовувати && та  std::move(). Але при цьому важливо на 100% розуміти що робиш бо такий код майже гарантовано вбиває всю оптимізацію яку міг би зробити компілятор.

 

Ніяких new/delete

Залиште new/delete людям які пишуть біблітотеки та аллокатори, почніть використовувати unique_ptr/shared_ptr. І не забувайте що unique_ptr є фактично безкоштовним і фактично це голий вказівник, але безпечний! А shared_ptr використовуйте коли у об’єкта може бути лише один власник.

Наприклад замість

widget* f();

void n(){
  widget* w = f();
  gadget* g = new gadget();
  use(*w, *g);
  delete g;
  delete w;
}

Треба писати

unique_ptr<widget> f();
void n(){
  auto w = f();
  auto g = make_unique>gadget>();
  use(*w, *g);
}

Небезпечний код

Це була довга доповідь з трьох частин що зайняла майже весь день і була присвячена тому як писати небезпечний код.

У короткому підсумку код

 

do_something();

cleanup();

Не є небезпечним через те що в ньому ніяк не перехоплюються та не оброблюються виключення і не даються гарантії що алоковані ресурси буде звільнено у правильному порядку. Із застосуванням методіки RAII (Resource Acquisition Is Initialization) небезпечний код має виглядати так:

do_something();

Досягається це дотриманням простих правил:

  • конструктор ніколи не кидає виключення та не викликає код який може кинути виключення само собою
  • так само і деструктор ніколи не кидає виключення
  • оператор присвоєння ніколи не кидає виключення і має бути транзакційним. Досягається це створенням тимчасового об’єкту який і ініціалізують як копію, а потім просто замінюють, щось типу такого:
class A {
  A& operator=(const A& a)
  {
    A tmp(a);
    using std::swap;
    swap(tmp);
    return *this;
}

До речі звернічть увагу що swap рекомендується використовувати саме так і не викликати std::swap() на випадок якщо swap() перевантажено для типу.

Ну і взагалі там неймовірно багато усього було. Наприклад розбір того чому код

f(shared_ptr(new A()), shared_ptr(new B());
}

є небезпечним. Ось тут https://github.com/CppCon/CppCon2014/blob/master/Presentations/Exception-Safe%20Code/Exception-Safe%20Code%20-%20Jon%20Kalb%20-%20CppCon%202014.pdf?raw=true файл з усіма слайдами з цієї доповіді.

С++ на Марсі

Виступав ведучий програміст проекту Куріосіті (http://mars.jpl.nasa.gov/msl/) і розповідав в основному те як працює система руху цієї машини. Той С++ що вони там використовують це дуже порізана мова: нема шаблонів, виключень, потоків, множинного успадкування, перевантаження операторів, тощо.

У них там кожна підсистема незалежна і продубльована. Наприклад система руху на останньому марсоході побудувана на платі з процесором PowerPC RAD750 (133 MHz), має 128 Мб пам’яті, використовує ОС VxWorks. В цій ОС є пакетна обробка задач і розділена пам’ять, тому вони написали свій менеджер пам’яті.

Взагалі цікаво що 4 з 19 камер марсоходу належать системі руху (по 2 на кожен комп’ютер) і використовуються майже як людина використовує очі. Максимальна швидкість складає 1.5 см на секунду, але після цього треба зупинитися, зробити стерео-фото двома камерами, розбити катринку на сітку врахувавши перспективу і оцінити кожну клітинку після чого вибрати оптимальний/найнебезпечніший маршрут. Прикол ще в тому що колеса можуть або крутитися, або повертати, одночасно і те і інше не можливо робити. За день марсохід може зробити максимум 100 метрів.

Прикольні баги там у них. Наприклад коли машинці довірили самостійно проїхати кілька десятків метрів вона зупинилася і відмовилася їхати далі тільки коли прокручування (сковзання) колес перевищило допустимий показник. З’ясувалося що заїхали в пісчану дюну і наступні 2 місяці витратили щоб вручну вивести машину з ловушки (так, кожну команду відсилали на Марс окремо). Тобто за 2 місяці щоденної роботи проїхали назад 20 метрів.

Ну і був у них там якийсь баг з пам’яттю через який комп’ютер почав перевантажуватися невпинно. На той момент коли баг знайшли і пофіксали Марс сховався за Сонцем і довелося чекати кілька місяців доки з’явиться пряма видимість Smile

 

С++ в іграх

Представники галузі говорили в основному про оптимізацію коду і на кожен слайд з С++ кодом у них було по 3-5 слайдів з асемблером. Всякі хитрі трюки оптимізації що вимагають знання принципів роботи заліза і таке інше.

Але ось вам кілька цікавих фактів: в коді Assassin’s Creed 6.5 мільйонів (!) рядків коду на С++ самої гри плюс 9 мільйонів рядків С++ інструментів (це різні редактори, пакувальники і таке інше) та 5 мільйонів рядків на С#. При цьому в коді гри нема RTTI, виключень, шаблонів (ні STL, ні boost).

 

Кілька нових фіч

Це все або ось-ось з’явиться, або вже підтримується деякими компіляторами (читайте у вікіпедії подробиці):

  • constexpr  дозволяють писати код який виконується в процесі компіляції.
  • бар’єри пам’яті (дуже складна тема сама по собі) неймовірно спрощують написання програм у паралельному стилі і є набагато дешевшими за синхронізацію: lock_guard, conditional_variable, atomic, compare_exchange_weak/compare_exchange_strong. Про це все треба читати, воно не те щоб складне, але треба якісь приклади писати для пояснення.
  • atomic<T> можна буде використовувати для shared_ptr. Звучить це як щось звичайне, але насправді така підтримка дозволить уникнути багатьох проблем у реалізації lock-free алгоритмів та значно скоротити і спростити код.
  • обмеження шаблонів – можна буде вказати що шаблон чи функція призначені, наприклад, лише для колекцій які можна сортувати:
template<typename S, typename T>

requires Sequence<S> &&

  Sortable<S> &&

  Equality_compare<Value_type<S>, T>

Iterator<S> sort(S& seq);
...
sort(vector{ 5, 4, 1 }); //Ok
sort(list{5, 4, 1 }); // Error: not Sortable

Ну або скоротити все це до

auto sort(Sortable& seq);

Можна буде писати свої обмеження якось ось так:

 

requires(C x){ { f(x)} –> int }

що означає “має бути можливим викликати функцію f для об’єкту типу С і потім привести результат до типу int”.

Зараз комітет працює над визначенням списку стандартних обмежень.

 

Звісно при всьому бажанні я не можу переказати всього що там було, ось вам кілька посилань щоб почитати самостійно:

  • відеозаписи доповідей буде викладено на http://cppcon.org/. Якщо ви будете дивитися усього по 2 доповіді на тиждень то якраз завершите перегляд перед початком CppCon 2015
  • слайди презентацій доступні на https://github.com/CppCon/CppCon2014
  • Книга Effective Modern C++ добре описує всі нововведення та механізми С++ – http://shop.oreilly.com/product/0636920033707.do
  • Нова книга Страуструпа дуже коротко описує сучасний С++ усього на 180 сторінках (офіційний опис стандарту мови зараз складає понад 800 сторінок) – http://www.stroustrup.com/Tour.html

2014-08-31–Martha Swim Lake

 

Щоб внести трошки різноманітності в наше спортивне життя яке якось уповільнилося останнім часом вирішили взяти участь в цьому крихітному старті з плавання. Два роки тому ми вже приймали участь в цьому старті що проходить недалеко від нас (15 хвилин машиною до озера) і в цілому залишилися задоволеними. Ось тут можна почитати: 2012-07-07-Martha Lake Swim та Ще кілька фото з Martha Lake Swim.

Цього року погода була не така сонячна, але було бажання поплавати і зробили ми це із задоволенням.

 

Також було меньше людей ніж у 2012-му і організотори вирішили запустити тих хто плив 2 та 1 милю разом. Оленка цього разу захотіла спробувати допливсти 2 милі.

Ну що ж, натягли костюми, умовно порозминалися… Все ж таки це дуже довга дистанція для нас і швидкості на ній не такі що прямо аж сильно розігріватися треба.

 

Вирішив підклеїти великий шматок лейкопластирю на шию там де костюм постійно натирає і на диво це спрацювало – шия ціла.

На старті невеличка штовханина і колотнеча, але метрів за 200 усі розтяглися в одну лінію і до кінця вже пливлося спокійно.

 

На відкритій воді можна пливсти за кимось і тим економити сили, отож і я прив’язався спочатку за одним хлопцем який наче і плив нормально, але потім я зрозумів що дарма вчепився в нього. Він плив якийсь час вільним стилем (дуже технічно і доволі швидко), потім повертався і робив кілька гребків на спині, а іноді різко зупинявся і робив кілька гребків брасом (мабуть коригував напрямок).

Коротше я помітив що ми відстали від тієї групи в якій спочатку були і вирішив наздоганяти сам.

 

А в плавані на відкритій воді на відміну від бігу треба не просто сильніше пливсти щоб наздогнати, але і пливсти у вірному напрямку. Час від часу кидаєш погляди з під лоба щоб глянути куди зносить і внести корективи… це реально втомлює.

Як там не було але наздогнав ту групку і плив за ними доки не повернули на друге коло (ми робили 2 кола по одній милі). А там вже стало помітно що вони сильніші за мене і повільно розрив почав зростати. На фінішу я програм мабуть метрів 50 останньому з тієї групи.

Самому пливсти важко на відміну як пливсти за кимось. Ну і крім того не можливо пливсти зі збитим диханням, а тому сильні гребки і краща техніка значать дуже багато. Бути технічним мабуть важливіше ніж бути сильним чи/та витривалим на відміну від того ж бігу чи велосипеду.

 

У підсумку мій час 56:39 що на 30 секунд гірше ніж 2 роки тому, але я задоволений результатом і самим стартом.

Олена ж усю дистанцію трималася за парочкою яка і вивезла її до самого фінішу де вже вдалося їх обійти. У Олени час 1:12:18. Головне що допливла, це була єдина ціль.

Крім того ми обоє були на четвертих місцях в загальному заліку Smile

Помер мій батько

Кілька днів тому помер мій батько…

Я довго думав чи писати цей пост чи ні. Сам не дуже добре відношуся до подібних постів, ніколи не можна придумати що сказати людині у відподівідь на таке. Одна з причин чому я це пишу в тому що за кілька років я звик таким чином (через написання постів у блоґ) фіксувати свої переживання. Тому не вважайте себе зобов’язаними писати коментарі у відповідь, сприймайте це як запис що її було призначено лише для мене і вас випадково вдалося побачити її. Ящо ж ви таки вважаєте це пост чимось таким що не  варто було б писати… що ж, може я і сам через деякий час його приберу.

Є ще одна причина чому я вирішив це написати. Є кілька людей які знали мого батька і регулярно читають мій блог, при цьому особисто давно з ним не перетиналися чи через те що живуть далеко, чи просто через зайнятість. Тому цей запис є також повідомленням друзям і знайомим мого батька про те що сталося.

Ті ж хто його не знав далі можете не читати – нічого хорошого далі не буде.

Взагалі думаючи про це я все ще ніяк не можу сприйняти його смерть як остаточний факт. Хвороба з’їла його за якісь два місяці. Рівно рік тому він був у нас в гостях, ми робили велоподорож у 50 км по Сіетлу, ходили в похід на місцеву гору, каталися на озері на дошках, гуляли Сіетлом та околицями…

Я пам’ятаю той дзвінок додому коли мама сказала що батькові щось не добре, мабуть тиск піднявся. А насправді йому вже як потім з’ясувалося було не по собі вже пару тижнів, але він нікому нічого не сказав. Не маючи ніяких серйозних хвороб за все життя, навіть не знаючи що таке головний біль він думав що це якась тимчасова недуга що сама з часом пройде.

А коли легше не стало пішли у лікарню де поставили діагноз інсульт і почали лікувати від нього. При цьому батькові ставало все гірше з кожним днем: спочатку порушилася координація, потім почала відніматися ліва частина тіла. Далі лікар сказала що потрбіне додаткове обстеження бо від лікування стає тільки гірше. Повезли у Дніпропетровськ, на той час він вже сам ходити не міг, а це усього тиждень пройшов як поклали у лікарню.

В Дніпропетровську просканували мозок і винесли вирок: рак 4-го ступеню з метастазами у мозок. Сказали що нічого вдіяти не можна і метастази неоперабельні – занадто глибоко у мозку і неможливо до них дістатися не вбивши паціента. Відправили додому.

Дома знову у лікарню, почали колоти ліки щоб позбавитися від результатів лікування. Батько хоча і не міг сам ходити (ліва сторона тіла була дуже слабка) проте почав почувати себе краще.

Я приїхав в Україну якраз коли його забирали додому. Сказали що “виписують”, а насправді ми йому діагноз так і не сказали до самого кінця.

Видно було як він швидко втомлюється: якщо з ранку він ще балакав, міг сам сісти, пробував з нашою допомогою ходити, то під вечір в нього вже не було сил ні говорити, ні навіть набік повернутися він сам не міг.

Проте ми сподівалися що діагноз було поставлено помилковий. По-перше, у нього нічого не боліло, а як правило на цій стадії раку людям вже регулярно колять опіати для знеболення. А, по-друге, щодні аналізи не виявили раку в жодному з органів. Лікарі між тим нам казали що сподіватися не варто і рак десь є в організмі, а те що знайти не можуть то мало суттєво.

Останні дні як мені мама казала у батька почалися болі і він жалівся на те що спина болить і ноги, практично перестав рухатися. Спочатку після “виписки” він ще дивився телевізор, слухав аудіокнижки, навіть пробував читати. Але через кілька днів перестав все це робити: його все втомлювало, картинка розпливалася і він просто мовчки лежав. Балакати теж не хотів. Під кінець йому вже почали колоти дімедрол і останні дні він хоча б був позбавлений бюлю.

А потім мені подзвонив брат і сказав що батька не стало. Поховали його через день, людей кажуть на похоронах було багато – у нього було багато знайомих, друзів, людей для яких він робив якусь роботу, людей з якими займався спортом, ті з ким вчився і працював, ті з ким просто товаришував. Я не став їхати, хоча може і дарма, просто не встиг би.

Вже потім сказали що діагноз рак не підтвердився, а те що побачили на знімках виявилося первісною пухлиною мозку – злоякісне утворення з невідомим походженням. Лікується хирургічним шляхом (видаляється), після чого роблять радіо- та хіміо-терапію. Але не цьому випадку, як я вже сказав занадто глибоко вони були і у таких ділянках що оперувати не можна.

Хотів написати щось на зразок прощальної промови, а вийшов якийсь переказ фактів. Все, більше писати не можу.