Contribute CouchDB
May. 19th, 2015 04:27 amПоучаствовал в небольшой переделке дизайна заглавной CouchDB в части предложения контрибьютить. Слева – как было, справа – как стало.
|
По-моему, на две головы лучше, чем было.
Поучаствовал в небольшой переделке дизайна заглавной CouchDB в части предложения контрибьютить. Слева – как было, справа – как стало.
|
По-моему, на две головы лучше, чем было.
Мне сегодня на Stackoverflow попался изумительной красоты вопрос про javascript. Я, как обычно, невнимательно его прочитал и ответил немного не в кассу, ну, меня быстро поправили.
Вопрос чисто собеседовательный, хотя я такую задачку по неопытности как-то раз решал в жизни – и крепко в своё время затрахалася.
Задача: нужно сконструировать такую функцию add, которая делает вот так
add(1) >> 1
add(1)(2) >> 3
add(2)(3)(4) >> 9
Цепочка вызовов может быть любой длины, в скобках только числа.
Сначала может показаться, что задачка нерешаема. Потом – что нам нужно локально расширить объект Number какой-то конструкцией, которая позволит вызывать Number как функцию. Это можно сделать – но получается очень громоздко. В самом деле надо идти с другой стороны – делать такую функцию, которая при попытке её с чем нибудь сложить кастится в число.
Любопытно, что если переделывать Number получается практически то-же самое, просто значительно длиннее и от самого намбера там ничего не остаётся.
Сделать функцию, которая при попытке её с чем-нибудь сложить “прикидывается” числом совсем просто.
Дело в том, что любая функция в js – объект. У неё есть метод toString, который и управляет кастингом. Собственно, он и вызывается неявно, когда вычисляемое выражение требует привдения к примитивному типу. Если toString наследуется от прототипа – он вернёт исходный текст функции. Но мы можем его подменить – и он станет возвращать число.
Хак целиком выглядит вот так:
var add = (function() {
var factory = function(value) {
var fn = function(num) { return factory(value + num) };
fn.toString = function() {return value};
return fn;
};
return factory(0);
})();Офигенно, по-моему, с эстетической точки зрения. На каждом вызове функции возвращается новая функция, которая скрыто каррирована значением предыдущего шага и которая прикидывается числом, если её закастить в примитивный тип.
Такой очень хитрый итератор.
Использовать в жизни я бы такое, правда, не посоветовал – оно mind-blowing, медленное и хрупкое. Как и всё, что красивое и бесполезное )
У меня тут в качестве побочного инструмента разработки возникла потребность в нормальном JSON-редакторе. Это то-есть такого, который:
Ещё два важных момента – это должен быть компонент, который можно как контрол инициализировать и он должен уметь показать переменную в памяти – при этом напрямую мутировать-редактировать её, не портя и не разрывая связи.
У меня такой редактор написался внезапно, и такой хорошенький, что я вот его обвесил всякими сэмпл-доками и выложил как online tool. Он умеет доки хранить в локалсторидже есчо, так что всё помнит.
http://cloudwall.me/etc/json-editor.html
Любопытно, что эта штука – “рекурсивное” приложение. Оно при раскрытии веток юзером инстанцирует само себя как дочки. Я сначала думал что это довольно дорого в плане памяти и CPU, но неожиданно оно норм даже на айпаде полетело. Хотя прожорливое, конечно.
Сделали первый проект, который, в каком-то смысле, распространяется на “физический” мир. Для меня это был пробный шар в реализации некоторых технологий того, что нынче называется “интернет вещей”.
Проект – диспетчерская для дорожной организации. Основная задача – распределение техники по участкам на даты и ведение отчётности по фактической занятости. Всего получилось три веб-приложения, естессно jQuery.my.
Вот скриншотик фрагмента одного из приложений – непосредственно перемещение техники между участками. Вместе с техникой “тащится” привязанный к ней поп-ап, это новая фича в jQuery.my.
Ещё в рамках проекта мы впервые попробовали сделать удалённый датчик работы тяжёлой техники. Датчик собирает данные и сливает их на сервер, если есть связь, или сохраняет до тех пор, пока связь не появится, и потом сливает.
Интересно, как мы этот датчик делали.
Сначала я подумал, что для этой цели идеально подойдёт Tessel, и даже уже начал делать первый подход к снаряду. Первый подход породил вот такую конструкцию:
Это, конечно, очень красиво эстетически, но в середине сентября, когда это фото было сделано, я понял, что собрал мобильный телефон без тачскрина и аккумулятора. Даже, если быть точнее, браузер мобильного телефона.
Ну то-есть, это javascript-микроконтроллер с модулями GPRS и GPS, с камерой, акселерометром и SD-ридером.
Эта конструкция требует постоянного питания, корпуса и вообще бубна. Первый подход занял один вечер и на выходе дал существенное переосмысление задачи. В результате вся эта конструкция заменилась мобильным телефоном под Андроидом.
На телефоне – PhoneGap-приложение, написанное на javascript. Для накопления и репликации данных оно использует технологии, на которых работает cloudwall.me – они стали приемлемо надёжными. В общем, отладка этого всего хозяйства, конечно, доставила, и пока всё неидеально, но задачу поставленную мы решили.
Ещё я знаю, как с помощью этого всего существенно улучшить отчётность и эффективность продуктового ритейла, но там огромную работу надо проделать, чтобы создать прототип.
А у меня какая-то дикая по силе депрессия, фак.
6 недель назад я нарисовал вот такую вот черновую схемку высокопроизводительной масштабируемой CMS (Коммент для понимающих: тут хреново названо только. Frontend – это общедоступная часть сайта, Backend – админка. Пользователи – на концах зелёных стрелок, за схемой, есличо).
Так вот, оно взлетело, да ещё как. Результаты по скорости рендера на Амазон EC2 medium (3.8 Gb RAM, проц примерно как Core2 Duo 1.5Ггц и диск как медленный SSD) вот такие:
Это неделю назад, сейчас ещё быстрее. Это случайный рендер по множеству из 112500 урлов. С выборкой из БД. Более 90% страниц предполагают выборку более 50 публикаций перед рендером целиком. С последующей группировкой и фильтрацией по тегам. И с расстановкой переносов )
На реальных условиях (с запросом и ответом в gzip) тоже оттестировано. С учётом пинга до Архангельска любая страница при нагрузке до 50 запросов в секунду в 99% случаев выдаётся менее, чем за 250мс. Если тестировать прямо с ирландского амазона с нагрузкой 100 страниц в секунду, получается “менее, чем за 20мс”.
Фактически на запросы из Архангельска сервер в Ирландии начинает отвечать через 100 мс, то-есть примерно через 120 мс при наличии скриптов/css в кэше браузера начинается рендер страницы.
Если по-русски, оно летает просто )
И это полностью, до последней строчки, javascript (скептики, утритесь). При этом оно чистый, не прошедший даже черновую оптимизацию, говнокод (утритесь снова ггг).
Я знаю, на фленте есть френды, которые прямо сейчас делают что-то подобное. И тоже функциональщина. И тоже nosql, и с прицелом на highload и лёгкую масштабируемость. Присоединяйтесь )
Soviet design bureau was eqipped with computer technology, but relied on it much less than their western counterparts.
There’s a russian term “nakolenke” which means working with a piece of paper on your knee. Its an approach highly respected in Russia, challenging designer’s resourcefulness, often giving outstanding results at a fraction of costs of a similar results in the West.”
Советские КБ были оборудованы вычислительной техникой, но советские инженеры полагались на компьютеры в значительно меньшей степени, чем западные коллеги.
Есть такой русский термин – “на коленке” – который означает “работать с клочком бумаги на коленях”. Такой стимулирующий инженерный потенциал подход к разработке высоко ценится в России. Нередко он позволяет достигать выдающихся результатов существенно более дешевле, чем принято на Западе.”
Отсюда. Это что же, оно уже признано как способ разработки боевой техники по всему миру штоле? о_О
Я сам этот волшебный способ систематически практикую, компьютером, правда, не брезгую )Моё текущее “на коленке” выглядит примерно так:
Вчера ближе уже к утру наткнулся на обсуждение – какое уж по счёту – кривого интерфейса фейсбука. И меня вдруг осенило, где я уже видел такой адЪ до этого. В японских газетах.
Это вот фейсбук на инглише.
Это типичная японская газета, из лучших ещё:
Это вот скриншот газеты пострашнее:
Ну и типичный японский новостной сайт, тоже газеты кста:
Офлайновая бумажная версия делается вот по такой раскладочке, из которой явственно видно, что на сетку ребятам глубоко похуй. Так приусадебные участки нарезают, а не интерфейсы:
Это оказалась не раскладочка нихрена, а типо инфографика аудиторий, мильпардон.
И оно там в Японии такое чуть менее чем всё. Вот вкусняшек ещё. Я даже разобрался откуда эта дикая типографская традиция – но это в другой раз.
В общем, я отчётливо вчера увидел общность подходов между газетами, которые кажутся европейцу кромешной кривотой, и интерфейсом фейсбука. Историю интерфейса можно проследить вот по ссылочке – и там я внезапно пронаблюдал любопытное совпадение.
Черты дачного самостроя фейсбук стал приобретать в середине 2008 – начале 2009. Именно тогда фб предпринял адское усилие по переводу интерфейса фб на японский – за 3 недели – явно с прицелом потеснить расовый японский вконтакт mixi.jp (скриншоты). Я не смог там зарегистрироваться – нужен японский номер мобилы, лень добывать – но и по скриншотам видно, откуда ноги растут.
Тут надо ещё понимать, что переводили фб на японский полторы тыщи добровольцев, и этот разношёрстный хор “дизайнеров” внимательно был выслушан. На японский рынок, видимо, очень фейсбуку хотелось – но не знали, как взяться. Хотелось правильно – mixi.jp тогда зарабатывал $100 млн в год, и это легальный рынок, не то что Россия.
А чтобы не делать разные интерфейсы под разные языки – очень неудобная задачка вообще говоря – эти японские нововведения распространили на всех. И получилась японская газета.
Спасибо Дурову, что пошёл своим путём, чесслово. Тропка хоть и кривовата чуток местами, но наголову лучше, чем азиатский базар фейсбука.
Волшебный яваскрипт. Просто вставьте это в консоль браузера, ну кто знает где она )
(eval((function(){var Y,$,_="\"ПC@H56!LnУ F59y97E395ц K3ш`@ CуE@ C7з3бC^yKXjscrush @ 8K5`^ 5гXqC@F59@FыF K`yE@C@``@цы @ H867HE@ H E3K б5з 383б3гXбуб97.LnJscrush – 8уq5C3бфу8E763C @ 8уq5C3FqC5883C E3K7 7H63C86H7 Aivo Paas. Н5E363CыF K3q@`@H79@5F 5гX`5гEXз7867H@6ь q7E3H^ @ qC386X86C3E@.LnО9 383б599Xх3C3шXC7б36756 97 E3K5 @ K`@99ых json-F788@H7х q3H63Cяющ@х8yK799ых, жFё6 EC7693, E7E zip – 9X3ч59ь F5K`5993. 10EБ H F@9у6у qC@F5C93. ИF599Xэ636 65E86 8ж76 qC@F5C9X97 20%.LnЖ^ 83H85F E3C36E@5 K799ы5, E3C3ч5 83659 б7й6, 95 @F556 8Fы8`7 – overhead 36 8`3H7C5й @ C78E3K@C3Hщ@E7 8ъ5K756 эфф5E6. ПC@ э63F K799ы5 з7qC386XF3гу6 8K5`^8y95ч@675FыF@, F3ж9X@8q3`ьз3H^ K`yэ63г3.LnР78E3K@Cу568yэ6XH8ё 3ч59ь бы86C3, 83q3867H@FX8XHC5F595F qC386XC7зб3C7 @8х3K93гXE3K7.LnС3б86H5993, H36 E3K:LnLn\"+\"function (s0){4var i,B,m,S,c,M,N,e,Z,t,o,x,j,R,Y,s=s0;4B=sG/2,m='';4T;;m=c+m){4 Tc=0,i=122;!c&&--i;!~WQ[i])&&(c=Q[i]));4#if(!c)break;4# To={},M=N=e=Z=t=0;++t<=B;)4##Ti=0;++i<sG-t;)4## if(!o[x=s.substr(j=i,t)])4###if(~(j=Wx,j+t)))4### TZ=t,o[x]=1;~j;o[x]++)Dj=Wx,j+t);DB=Z;DTi in o){D j=encodeURI(i).replace(/%../g,'i')G;D if(j=(R=o[i])*j-R-j-1) if(j>M||j==M&&R>N)M=j,N=R,e=i;D}Dif(!e)break;Ds=sVe).join(c)+c+e4}4c=sV'L\"')G<sVL\"'L\")G?(B='L\"', /L\"/g):(B=L\"'L\", /'/g);4return '(eval((function(){var Y,$,_='+B+s.replace(c,'LLLL'+B)+B+';TY=0;$='+B+m+B+'[Y++];)with(_V$))_=join(pop());return _})()));';Ln }\"# 3о4Ln#5е6т7а8с9н@иCрD4####EкFмG.lengthHвKдL\\Tfor(V.split(Ws.indexOf(X3 ^76ь`лqпyя ";for(Y=0;$="yq`^XWVTLKHGFEDC@9876543#"[Y++];)with(_.split($))_=join(pop());return _})()));
Последний день до ДР – 9 мая – я встретил на квартире в ремонте, за односолодовым виски. Был прекрасный разговор – я утверждал, что добрая воля существует, а мне оппонировали, что это просто форма корысти.
Я до этого слопал вкусный стейк с картошечкой размером с вишенку и вот такой вот десерт (чёто не в фокусе) – и совершенно размяк.
Спорилось как-то вяло – зато потом нашлись всякие интересные музыкальные приложения на айпаде – и пошло-поехало. Музыканты же ж все, чуйство прекрасного, то-сё)
А потом досталась гитара:
И мой кореш Паша спел (ну типа) и сыграл как мне помнится прямо из головы вот так:
Есличо, чувак, это было круто! Я не мог это не выложить.
Днём 9 мая я отправился выполнять важную часть плана пребывания – добывать трусы. В Архангельске нереально купить нормальные трусы, вы не поверите, дорогие лжефренды. Раньше ездили за колбасой в столицу – а теперь вот за трусами, ога. В результате я так и не нашёл ck в Европейском и программу выполнил частично.
Ближе к вечеру 9 мая я попал в офис ЖЖ – там сейчас работают @mark_ilansky, с которым мы когда-то ссорились, но вроде помирились, и olegfreedom (вот был бы нормальный софт чтобы постить с мака с картинками – вставилось бы ссылкой, это намёк есличо).
В ЖЖ мне понравилось, общее пространство, много народу, видимо. Хотя я себе плохо представляю масштаб платформы.
В ЖЖ сразу видно трон – красивый такой 27-инчёвый аймак )) Доски на стенах прикольные – чёрное и по нему разноцветными мелками.
В ЖЖ работает некая Нина, женщина невообразимой грубости. Вот ей надо посмотреть кино про доктора Лектора. Он кушал людей за неучтивость. Жаль, он не работает в ЖЖ.
В ЖЖ вкусный кофе из автомата. Вполне себе.
Ну и Суп-сити, конечно:
Потом мы пошли в Букафе и долго там проговорили, даже просплетничали отчасти, и так это было занимательно, что салют был как-то пофиг.
***
ДР я встретил (вернее, 10 мая наступило), вы не поверите, в Марьино, у ларька с сигаретами. В Марьино я попал случайно, в общем то.
Потом мы выпили – лафройга и мартини в захолустном баре – и долго болтали про будущее. Про бизнес. Про счастье, совесть, жадность, про всякое. Это было круто – я почуйствовал себя старичком бгг )
10 мая я провёл, делая ничего почти весь день. Вкусно поел, сладко поспал, полетал в самолётики. Потом съездил по делам, обломавшись с Яндекс-навигатором, кста – он туповат и неточен.
Потом мы с Пашей опять долго болтали, безо всякого алкоголя причём на этот раз (ну кто понимает). Картинка вот у меня нарисовалась:
На свой юбилей я был одет вот так (фотка перед сном, да-да, ковёр):
Хипстота аццки непатриотичная, надо сказать.
Когда летел домой, на борту подрались два чуркобеса – здец какие они животные некоторые. Дома холодно, низкие тучи, но как-то мне клёво.
У меня вторая половина жизни. Дима ягодка опять, ога
Ни на что не претендую, но…
Фрагмент резинки от трусов, нопремер. Под катом – пример использования. Впечатлительным лучше не ходить – там жопа бгг
( Read more... )Примерно с год назад меня один френд попросил порисовать макетеги для его проекта – и пропал. На письма не откликается, так что выложу я это тут – не пропадать же добру ) Клик на картинки – покрупнее.
Под катом ещё несколько.
( Read more... )Я тут развлёкся и нарисовал работающий прототип выбора дома для портала ЖКХ. В общей сложности это у меня заняло примерно 6 часов.
Выглядит это так (клик перекинет на работающую страничку):
Адреса внизу – это куда я ходил, страничка помнит ваши последние дома.
Вообще, 6 часов для такой штуки – долго, но там такого всякого повылезло по дороге, что не грех рассказать.
( Read more... )Чуть меньше недели назад я тут написал грустный пост про правительственный дезигн. И пообещал в конце нарисовать, как должен на мой взгляд выглядеть портал ЖКХ (его современное состояние можно лицезреть по адресу gkh.dvinaland.ru).
Задача осложняется тем, что вряд-ли кто-то будет вносить серьёзные изменения в серверный код и надо использовать то, что уже есть. То-есть перелицовывать html и недостающий функционал добавлять по преимуществу уже в браузере.
Ну и конечно, смотрел я в первую очередь с точки зрения сценариев пользователя, а не инженера.
Всю неделю думал, порвал два баяна и вот что получилось в черновой итерации (тык на большие картинки – фуллскрин).
Так может выглядеть заглавная для неавторизованного пользователя:
То-есть было понятно, что основная дизайнерская задача – это максимально уменьшить количество кликов при выборе дома.
Вторая задача – стимулировать пользователей регистрироваться и писать самим в разделе дома полезную информацию – потому что очевидно, что УК этого делать никогда не будут, им просто пох всё.
Остальные задачи чисто оформительские и компоновочные. Это типа меню почистить и другие сопли, лишнее выкинуть, ленты причесать, над поиском подумать и над тем, как в такой шаблон остальные страницы вписывать.
Ну и редактура нужна – та имперско-канцелярская велеречивость, что сейчас, ужасна местами до оторопи (например вот премерчег, смотрим на заголовок и breadcrumbs бгг)
Но основное – это стимулирование регистрации и удобный выбор дома. И вот что мне придумалось…
( Read more... )Моя коллекция парфюмерии, раз уж заикнулся – где то в районе 100 наименований. Небольшая часть конца XX века не дома, так что наверняка забыл чёнить.
На память по запаху опознаю примерно половину. Приподнятые картинки – любимые ароматы.
( Read more... )Типа, с годом наступающих металлических зайцев.
Рисовалось просто так есичё, художественной ценности не несёт.
Под катом – центровой крупным планом )
( Read more... )Это для веб-деятелей пост. Остальным будет неинтересно. Веб-деятели будут реально в ахуе.
( Read more... )