?

Log in

Научился пользоваться UD Bellus

Jun. 18th, 2016 | 04:47 pm
music: Tut Tut Child - Dragon Pirates

Когда-то очень давно кто-то говорил мне "смотри, продукты Apple так просты в использовании, что они даже не кладут в коробку бумажную инструкцию!". Видимо, ребята из UD (или Youde, они походу сами не определились) решили, что их Bellus тоже так прост в использовании, что никаких инструкций к нему не нужно - ни бумажных, ни в интернетах.

К сожалению, они заблуждались. Сегодня я в очередной раз поэкспериментировал и понял, что полгода пользовался этим девайсом как лох и виновата была не жижа. Хотя вроде смотрел не одно видео на ютубчике о том, как чо делать, а в результате ко всему пришел сам. Так что, подумал я, напишу-ка список хинтов для таких же лохов.

1. Чтобы поменять вату/койл в непустом Беллусе, достаточно вытащить мундштук, перевернуть девайс, открутить нижнюю (теперь верхнюю!) часть и вытащить хреновину - ничего не прольется (при условии, что девайс изначально скручен нормально, но мне он пришел уже скрученный).
2. Койлы нужно ставить в пределах базы (иначе она тупо не влезет), но как можно дальше от контактов. У меня было вплотную и треск стоял неимоверный, видимо коротило. Сейчас сделал подальше - треска стало намного меньше.
3. Ваты нужно брать как можно меньше. По толщине - чтобы болталось, по длине - чтобы еле-еле закрывало четыре канала по краям базы. У меня было напихано столько, сколько влазило, в результате места для самой жидкости не хватало и я курил ватный дым. Теперь вкус намного мягче.
4. Собственно да, вата должна вся помещаться в каналы - тогда девайс можно закрыть плотно и ничего не протекает. Для того, чтобы вставить базу правильно, есть две специальные фиговинки, которые вставляются в две специальные выемки. Можно (и нужно) собрать все так, чтобы щелей не было, а регулятор воздуха ходил туго.
5. Чтобы залить жижу, нужно закрыть воздух и открыть верхнюю крышку - именно в таком порядке, иначе польется.
6. Как аккуратно ни заливай, часть жижи все равно окажется там, где не надо. Чтобы от нее избавиться, нужно просто аккуратно дунуть в мундштук и вытереть все вылившееся салфеткой. Рекомендуется при этом держать девайс дырками в стороны, а не на рубашку.

Как бонус, хинт о секретной фиче Joyetech eVic VTC Mini, к которому инструкция прилагается, но прочитать ее я тоже сразу не подумал: девайс можно включить/выключить, быстро нажав на кнопку пять раз. Очень полезно, чтобы нечаянно не накурить карман или рюкзак (мне пару раз удавалось).

А какие у вас есть хинты по использованию абсолютно простых в использовании устройств?

Link | Leave a comment | Share

Understanding Coastline myself, part 1

Mar. 7th, 2015 | 09:36 am
music: Сплин - Шахматы

When my colleagues ask if I myself understand how Coastline works, I honestly answer that no, I don't have a complete grasp of how it operates. Yes, I wrote it and I know how it's supposed to work, and I also know that it seems to work well enough in production projects that they don't randomly crash anymore.

But, the thing with Coastline is, it's an experiment in implementing a concurrency model that I have never seen anywhere else. A concurrency model that started as a hunch and still has no formal definition or proof. It seems to do a great job at handling the race condition and deadlock scenarios I throw at it, but my imagination is limited.

Still, sometimes I come up with yet another interesting question of "Will it blend?" variety. Today's original question was "will c1.wait(c2) work if c2 = c1.q('bg', ...)?", or, in even less understandable terms, will trying to wait on a background task from the same caller work? It doesn't make sense to wait on a foreground task, since it has by definition finished when you get to the next task on the same caller. It is however completely reasonable to launch multiple background tasks and then wait for all of them to finish before proceeding, so that is what I tested.

And while I confirmed that yes, it works, I also found what doesn't: wait() on tasks that have a caller and have finished results in a deadlock.

In other words, given var c = coastline(); var c2 = c.q(...);, trying to sometime later wait(c) will work as expected (return immediately) but wait(c2) will never return. Can you spot the difference? It's that c2 has a caller (c) while c itself doesn't.

The reason it doesn't work slowly became apparent as I looked at the wait() implementation. We just try to push a noop task on the context we wait for with the waiting context as the caller. I wanted to use "waiter" and "waitee", but turns out they have reverse meanings. English is funny.

So, why does it deadlock? Because of this line. If something is pushed onto us and we're not working right now, we shall start working, but only if we have no caller. Why? Because if we have a caller, we can only work when caller bloody tells us to work, like here. And the reason for that is that if you have a task, you would probably rather it executes when it's turn comes, and not whenever it likes. And by that logic not only a task shouldn't work before it's position in caller's queue is reached, but it also shouldn't work ever again after it finished and therefore the caller has moved on to the next task.

So the first thing I did was add an exception and sure as hell the test code triggered it. And none of the production code I tested did, so I probably didn't break anything.

Note to self:

Stop being an unprofessional idiot and write some proper tests already.



Maybe tomorrow. No time for this now. Right now we have a wait() that throws an exception when it should just return immediately and we can't have that. So. It looks like the elegant one-line solution must be replaced with a subtask that will just return if the task is finished. Quick check against other deadlock scripts and production code and here we go. Another bug fixed.

Probably.

I'll certainly write those tests one day, I certainly will.

Link | Leave a comment {1} | Share

Сходите к психиатру

Feb. 17th, 2015 | 12:29 am

Люди крайне болезненно реагируют на мое предложение решать свои проблемы таблетками.

Я тоже когда-то думал, что таблетки - это, типа, для совсем больных. А я-то че, мне просто уныло, не хочется просыпаться, работа не работается, разгильдяй короче. Иногда, конечно, возникало желание что-то с этим делать, но было непонятно, что. Сходил к семейной, она мне сказала пить всякие там женьшени-гинкобилобы, мол вдруг поможет. Не помогло. Так это продолжалось лет пять-шесть - как минимум с того момента, как Профессионалы отвалились, наш стартап обломался, а офис закрылся. После этого, конечно, мы открылись обратно, но что-то было уже не то.

Естественно, кто только не предлагал мне "поработать над собой". Только как поработать над собой, если я вообще ни над чем не могу поработать? Здоровому человеку не понять, как это, когда нихрена не хочется и не можется, так же как молодому не понять, как хреново быть старым и дряхлым (я тоже могу только догадываться).

А потом я поймал себя на том, что за два месяца написал ровно 0 строк кода, при этом практически живя в офисе, сидя за компом по 12 часов и отвлекаясь только на сон (много сна!) и жратву.

И решил, что надо что-то с этим делать. Сначала думал сходить к психологу, а потом позвонил по телефону 67080147, и мне сказали не выдуриваться и идти сразу к психиатру. Срочно.

Поэтому через несколько дней я сел на пятый трамвай, приехал на ул. Твайка, зашел на второй этаж к доктору Страутзеле и рассказал все как есть. И мне прописали сначала флуоксетин (всем известный, как Прозак, а у нас Флюкс), и мне стало хотеться просыпаться. А потом мне прописали страшную и, надо признать, неимоверно дорогую таблетку Абилифай, и мне захотелось работать.

И вот, значит, через год и два месяца после всего этого я, конечно, еще не миллионер, и у меня еще есть долги (и денежные, и обещанные дела), но мне, черт возьми, чего-то хочется, и обычно даже можется. И хрен я скажу, что есть какие-то неприятные последствия у всего этого. Их нет.

Так что сходите к психиатру. В худшем случае вам скажут поработать над собой.

Link | Leave a comment {5} | Share

Optimizing Coastline, part 2

Nov. 23rd, 2014 | 03:40 am

At last I had done what I should have done from the start.

node --prof examples/benchmark.js
node-tick-processor | less


I tried profiling before but in this case I ran it on my Arch laptop and the [C++] was suddenly present. Oh what an idiot I am. So, tl;dw:


  • now setting "running" only if coastline.trace is on

  • now updating "coastline.active" array only if coastline.trace is on

  • array shifting actually looks quite optimized so I brought it back in processQueue, at least the garbage will be collected faster



Read more...Collapse )

Still not that good, but at this point it looks like most of the time is spent on allocation and garbage-collection. It would be great if I could reuse context objects somehow, but it doesn't seem to be possible with how coastline works right now. The profile also shows that while most of the time the functions are optimized, sometimes they aren't. Unfortunately there is little useful info in --trace-opt or --trace-deopt.

One day I'll just rewrite the bloody thing in C++.

Link | Leave a comment | Share

Optimizing Coastline

Nov. 22nd, 2014 | 11:45 am

As you may or may not know, I've written a weird JavaScript library called Coastline. It started as an attempt to not go crazy with all the JavaScript callbacks and promises, and slowly evolved into something you might consider a language of it's own. The basic message is - wrap every line of your code in some Coastline construct and never worry about callbacks or race conditions again. Sounds good, right? And with the right macros it's not that much work either.

As you may or may not know, it's also slow as fuck. I knew from the very beginning it couldn't be too fast with its "an object per operation" model, but I never bothered to check how slow it was. Then today I bothered.

And look where it got meCollapse )

Link | Leave a comment | Share

Конец эпохи lol jk who cares

Jan. 10th, 2014 | 02:37 pm

Когда администратор ресурса использует банхаммер вместо даунвоута, это грустно и уныло. Note to self, проследить, чтобы у нас такой херни не было никогда.

Отдельно доставляет коммент про если прибежать просить прощения, то бан снимется, так уж и быть. Нежелание в это играть называется не гордыня, а отсутствие склонности к мазохизму.

Так, ладно, за кедами.

Link | Leave a comment {1} | Share

Пока так

Jan. 7th, 2014 | 08:57 am

В общем. На новый год мы рубились в офисе в настолки с прекрасной выборкой абсолютно непредсказуемо знакомых между собой людей, понаехавших из пяти (или более!) разных стран. И это еще кто-то не доехал. Странно, как нас всех разнесло-то, а, один я тут сижу. Мне тут пока еще нравится, вы уж извините.

Я действительно больше не пью (я пробовал, не понравилось), а кое кто меня обманул и немного опечалил. Зато арипипразол победил. Последние две с копейками недели ни дня без коммитов, и это хорошие коммиты, черт возьми. Даже новый год я чуть не встретил за компом, ну и ок. Жалко, что пришлось довести все до такой задницы, что даже с такой продуктивностью непонятно, как дальше быть. Просто у нас теперь больше нет клиентов, зато есть аж три полусвоих проекта с разными людьми, и мы всё съели пока я тупил. Ну ничего, еще чуть-чуть и все резко станет хорошо.

А в ночь на второе мы с Наташей поехали в Каунас через Вильнюс пообедать и поспать. Ну то есть поспать не планировалось, но когда я понял, что домой мы поедем только через полсуток, а меня уже рубит, пришлось найти милый хостел и снять кроватку на три часа. Зато пообедали. Почему латышской кухни практически нет, а литовская такая крутая? Как так получается?

Когда я проснулся, Наташа написала, чтобы я шел к фуникулеру, но не дождалась, и когда я пришел, написала, что уже наверху. И думала, что раз у меня нет литов, то я за не не поднимусь. И не сказала, что сейчас спустится. А я, само собой, не сказал, что договорился с кассиром и сейчас поднимусь, пока не начал. И, значит, помахали друг другу ручками романтичненько так, потом я спустился обратно и мы поехали, а нет, потом мы пошли в кофейню, Наташа залила йогуртом рюкзак, местные девочки старательно объясняли нам, что такое троллейбус (даже нарисовали!), потом мы бежали на поезд в Вильнюс, потом мы сидели в макдаке два часа, а затем купили шакотис, который в автобусе все равно развалился. Но в целом мне понравилось.

А вчера Гудсофт пытался съездить рухнуть на Рухну, а в результате тусил весь день в Пярну, потому что погода нелётная. Тоже лузер, в общем.

А сегодня Наташа уедет, и я буду опять жить в офисе, писать код, готовиться к первому сезону европейской лиги TagPro и ходить в качалку, если таки дойду до завтра купить абонемент. Дойду же, правда? Обязательно дойду. Я смогу!

Ёлку, что ли, выкинуть...

Link | Leave a comment {3} | Share

У меня все хорошо

Dec. 23rd, 2013 | 11:27 pm

Бложек не хочет писаться. Опять много всего, а рассказывать не то что не хочется - лень.

В общем, с одной стороны, долги и осень-зима. С другой стороны флюоксетин и арипипразол (зачем-то, не уверен, я вроде не псих, хотя психиатру виднее). Кто победит пока непонятно, но побочные эффекты с обоих сторон чувствуются замечательно.

Сначала я пришел и пожаловался, что я ничего полезного не делаю и меня это парит. Мне прописали флюоксетин и через два месяца я пришел жаловаться, что я ничего полезного не делаю и меня это больше не парит. Не то вылечили, в общем. Вот теперь лечим бесполезность. Медикаментами, угу.

Ходите к психиатру, это весело, ребята, вот.

Алсо до сих пор рублюсь в тагпро.

Link | Leave a comment {8} | Share

RSVP

Dec. 22nd, 2013 | 09:49 am

Так как никто не спешит жать Гоинг пока что, то чтобы не оказалось, что кто-то был не в курсе, на всякий случай еще раз напишу, что в офисе опять планируется новогодняя тусня.

pls respond.

Link | Leave a comment {1} | Share

Бдыщ

Nov. 11th, 2013 | 03:54 pm

Будапешт это такое странное месиво из всего. На входе в крутое, современное, продуманное метро небритые чуваки проверяют бумажные билетики.

В Братиславе мокро и совково.

В Вене нам не понравилось. "Места надо знать", скажете вы, но если знать места, то в любом городе хорошо. Я был в Каире с человеком, который знал места, и мне очень понравилось. Это вовсе не значит, что Каир хорош. Встречаются люди, которые утверждают, что в Москве можно жить. Места, говорят, надо знать. Не верю.

На границе с Хорватией два раза проверяют паспорта. Возможно, им никто не сказал, что они теперь в ЕС.

В Загребе подул ветер и теперь здесь всё стоит, транспорт не ходит, дороги перекрыты. Хотя ничего, кроме пары развороченных мусорников, я не видел.

Короче, я явно многого в жизни не понял, но с каждым новым посещенным городом мне все больше нравится Рига.

Link | Leave a comment {7} | Share