.и в продакшен – Telegram
.и в продакшен
2.48K subscribers
9 photos
3 videos
107 links
Фаундер-технарь - канал основателя www.jitbit.com, Alexander Yumashev @jitbit

Как быть CTO/CEO одновременно, как растить bootstrapped-стартапы и прочая айтишечка.
Download Telegram
Прошлой осенью в Бостоне на конференции познакомился с очень интересным чувачком... История у него просто огонь (если не врет конечно).

Давным-давно он админил в какой-то конторе и от безысходности написал драйвер для древнего сканера, который перестал работать с новой виндой. Просто чтобы не покупать новый.

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

Потом какая-то компания попросила драйвер для сканера фотопленок. Потом еще одна. И еще одна.

В конце концов его этими просьбами задолбали (он-то хотел гамать в CS и Diablo 2, а не рассылать людям драйвера), и чувак выложил все свои поделки на сайт - просто чтобы отстали. Сайт показал отцу - тоже программеру - и отец ради интереса прикрутил туда Paypal...

Короче, через 5 лет они обнаружили себя в центре бизнеса с оборотом пару миллионов год, под названием VueScan. Про ребят написали все - от "Washington Post" до "New York Times" и PC/Mac журналов.

Сейчас папа с сыном ревёрсят и пилят дрова для 6000 (шести тысяч) сканеров, факсов, копиров и всего прочего говна, которое давно снято с производства и не поддерживается современными ОС.

Обожаю такие истории. Accidental business, да еще и win-win со всех сторон - и людям помогают, и продлевают жизнь старым устройствам, и сокращают кол-во техномусора, и деньги зарабатывают.
👍3
Извините, не про стартапы.

Заметил за собой, что все чаще юзаю конструкцию do-while(false) - никогда не догадаетесь для чего - для "быстро выйти из нескольких вложенных if сразу"

Это хак из мира C-шников, у них так давно принято.

Меня, идиота, научили совсем недавно.

Работает так

do
{
if (xxx)
{
//громоздкое вычисление yyy
if (yyy)
{
//громоздкое вычисление zz
if (zzz)
//чтото делаем
else
break; //выходим нахуй
}
}
}
while (false)

Вы спросите "НАХЕРА? почему не просто if (xxx && yyy && zzz) ?? Ведь сработает "short circuiting" в операторе &&"

Потому что "громоздкое вычисление".

Я не хочу вычислять следующую переменную (yyy и zzz) анлесс мне реально это надо. А внутрь if()-выражения вычисление может и не поместиться.

Вы опять спросите "НАХЕРА? почему бы тогда не вынести вычисление yyy во внешний метод?" А потому что значение yyy я юзаю много раз и не хочу вычислять его повторно. Ну и вообще - читаемо же? красиво же? не?

Собственно, while (false) опеспечивает, что код выполнится ровно один раз.

"Громоздкое вычисление" не обязательно именно вычисление, это может быть, например, чтение из медленной базы данных - самый частый боттлнек на бекенде.

Такая вот оптимизация. Спасибо вам, Сишники.

P.S. подход ни к коем случае не предлагается в качестве паттерна. while(true) { ранний выход } более читаем, например. Но это отличный костыль к уже написанному коду, решающий задачу "быстро выйти из кучи if"
👍1
Гугл собирается в течении двух лет выпилить из Хрома поддержку сторонних кукисов (спасибо Prenom за наводку в чате Самата)

На первый взгляд это выглядит, как защита интересов пользователей, прайваси-шмайвайси. Ура. Подданным предлагается перейти к торжествам и празднествам.

На второй, более трезвый взгляд - это, конечно, удар по конкурентам. По рекламным-сетям, по Фейсбуку, по всем прочим, кто лишится трекинга пользователей (сам-то Гугл не лишится, он продолжит трекать юзеров через альтернативные каналы - Хром, AMP, карты, Gmail, Андроид и тп).

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

(бизнесмен и маркетолог внутри меня аплодируют стоя - это действительно умный и классный ход :) )

Не будем, короче, заблуждаться. Как там было в знаменитой цитате Джеффри Хамербахера, который уволился из Фейсбука?

"The best minds of my generation are thinking about how to make people click ads."

PS. Проблему трекинга запрет куки, кстати, не решит. Просто трекинг уйдет с фронта на бэк, через трекинг-пиксели <img src>, через DNS-трекинг (добавляем на страницу ссылки на домены со случайным текстом в доменном имени, и браузер уже при парсинге HTML будет слать DNS-запросы куда надо, вы ведь уже включили dns-prefetch, как советуют в Google Page Speed?)

PPS. в комментах на хакер-ньюс пишут, что монополия гугла - это куда более серьезная проблема, чем реклама с ее трекерами. Потому что реклама, в общем, помогает делать Интернет более открытым и свободным. В отличии от монополий а-ля Гугл. Очень интересная параллель - за свободу слова больше всех борются владельцы стрип-клубов, порно-сайтов, магазинов оружия, продавцы марихуаны и прочие. Это очень мутные и странные бизнесы, но именно ОНИ своей борьбой делают экосистему здоровее, это благодаря им (а не Гуглу и Фейсбуку) мы наслаждаемся отсутствием цензуры, свободой слова и прочими благами современного мира.
Всегда как-то неловко писать о себе, но пара человек в личке и в чатах попросили рассказать, с чего начался наш стартап, как он вырос и позволил мне с семьей (и всем сотрудникам) уволиться с нелюбимых работ и даже завести трактор.

Обещаю скоро написать большой пост на русском, а пока вот вот тут есть мое большое интервью на английском, где все это есть.

#shamelessplug
👍2
Удаленная работа - это сложно. Внешние constraints отсутствуют, вся дисциплина - на тебе самом. Я бы сравнил это с переездом от родителей в общагу или квартиру - надо вдруг самому убираться, готовить и планировать бюджет.

Качество командной работы пострадает. Ваши социальные скиллы деградируют. Вам будет одиноко и вас будет куча всего отвлекать.

Как устроено у нас (далее бессистемный список в формате "вспомнил - написал")

1) Happy hour - час или два в сутки, когда все в онлайне. Это для тех команд, которые сильно размазаны по таймзонам. Я в Сиэттле, ты в Стамбуле, но в 5 по гринвичу - все в Слэк плз.

2) интро-видосы - все сотрудники записывают простенькое видео на телефон «вот мой комп, вот мой стол, вот так я работаю, вот пробежала моя собака, а вот Слэк, где я вам пишу!». Мой младший партнер Макс - вродебы стеснительный задрот - к концу ролика разошёлся и 10 минут рассказывал про свою коллекцию Лего. Видосы - сложить кудато во внутреннюю Вики, давать почитать всем новым сотрудникам.

Это самый важный хак из всех. Человек перестаёт быть аватаркой в Слэке и становится собой. Себя снимать, кстати, не обязательно (ремарка для тех, кто стесняется). У нас все ролики как раз в формате "голос за кадром". Но рабочее место желательно показать. Сразу живо представляешь себе, как человек там трудится и это очень сближает.

3) Ежемесячные (или еженедельные) видео-тусы: берем 2, 3, 4, 5 рандомных работников и в пятницу сажаем в видео-конференцию без какой-либо повестки. Просто разговор. О чем угодно. "Какое же говно последние Звездные войны" - "Ну зато Мандалориан неплох" - "А я пошел на курсы готовки".

Из этой же серии - обязательный чат "не про работу" в Слэке. Можно даже выпилить из него начальство, если оно нудное.

4) Умение письменно излагать свои мысли - сделать критерием для приема на работу. Уже на этапе удаленного собеса смотреть, насколько лаконично, читаемо и, главное, БЫСТРО человек общается.

После найма - объяснять принятый в компании формат общения. Например: если случилось что-то срочное - скажем, наебнулся сервер - и тебе задали вопрос, то не надо долго строчить большой и подробный ответ (или еще хуже - молча лезть рабираться с сервером и писать ответ уже после), сначала напиши "я тут, смотрю" потом уже занимайся, и только потом подробный ответ.

Все это надо объяснять, учить. Вообще, недосказаность - это первый источник нервов при удаленке. Человека никто не научил "как надо", а потом злятся, что он что-то делает не так. Это же не офис, в курилке не подскажут.

Поэтому - always overcommunicate. Лучше избыток коммуникации, чем недостаток.

5) Workstation allowance - бюджет на технику (ноуты, наушники).

Есть, кстати, один хак, который мы пока не пробовали: любой сотрудник может заказать себе домой такое же рабочее место, как в офисе. Такое же хорошее кресло, например. Или такое же растение в горшке. Или "стоячий" стол с электрорегулировкой. Или лампу. Это с одной стороны удобно, с другой повышает "общность" через одинаковые предметы на рабочем месте. Пускай это всего лишь коврик для мышки или лампа, но все знают, что у остальных стоит точно такая же.

Ну и вообще бюджет лучше не жать. Кто-то хочет работать на тренажере для гребли? Ради бога.

6) Coworking allowance - не все могут (и хотят) работать у себя на кухне. Кому-то проще в кофешопе или даже арендовать постоянное место в коворкинге. У нас выделен на это бюджет.

7) Company retreats - раз в год (а лучше чаще) все сотрудники вывозятся КУДА-ТО и тусят вместе. Желательно, чтобы локация провоцировала совместную деятельность - никто не заставляет переться всем вместе на условный скалодром, достаточно плейстейшена и настольных игр в общей гостиной. Хотя скалодром, конечно, веселее. Нас, интровертов лучше организовывать извне, чем ждать инициативы.

Мне кажется, для маленькой компании лучший формат - огромное шале с 8-12 спальнями и большой гостиной и кухней. Мы, кстати, в наш следующий ретрит, наверно, поедем в Россию, в Розу-Хутор!

8) 1-on-1 видео-звонки регулярно. Хотя нормальный менеджер это и в офисе должен делать...

Если вспомню еще чтото - напишу.
Простите, я на минутку. Что-то меня триггернуло...

Apple, как известно, запустила Apple Card (пока только в Штатах). Красивая такая кредитка, интегрирована с Wallet, рисует приятные отчеты, предлагает кешбек, беспроцентный кредит на новый айфон и прочие плюшки.

Ну наконец-то! Кому, как не Эпплу делать свой fintech. Будет "нативный" аналог европейской карты Revolut (охерически удобная, кстати, штука, давно пользуюсь).

"Вжжих!!" сказала пила.
"Ух, бля!!" подумали лесорубы (tm)

Нет, правда. Я такую карту, конечно бы не завел (вендор-лок и все такое) но это же гениальный бизнес ход.

Created by Apple not a bank

Хер там.

Оказалось, Эппл к карте отношения не имеет. Карты выпускает Голдман Сакс. Решения о кредитах выносит тоже он, коллектор долгов тоже он, финансовое "плечо" предоставляет тоже он. Да и, собственно, решение кому эту карту выдавать, а кому отказать - принимают в банке.

А отказов стало подозрительно много видимо, поэтому пиар-служба Goldman Sachs на прошлой неделе вдруг вылезла изо всех дыр и поспешила обо всем вышесказанном сообщить.

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

"Стефан Шер из Голдман Сакс официально подтвердил, что Эппл официально отстранена от принятия любых решений по менеджменту счетов." Даже когда вы звоните в техподдержку Apple Card - вы на самом деле общаетесь с сотрудником GS. Эппл всеголишь сдал в аренду бренд и помог накодить приложение.

"Not a bank" my ass. Ну понятно. Расходимся.

"То-то же, бля" подумали лесорубы (tm)

https://twitter.com/AppleCard/status/1215737537639206912
Юникод крутой.

Вот сделал такой модный сёрчбокс, например - без всяких background-image, без CSS-хаков, без noscript и иконочных шрифтов. И на ретине норм.
Однажды некий чувак (кажется его звали Дрю и он работал в LeadFuse) за 3 минуты рассказал мне, как устроены b2b-продажи софта и это было гениально.

"Знаешь," говорит, "считается что бизнес покупает софт по двум причинам:

1. Make money
2. Save money

Но это полная ебаная херня"

Тут стоит уточнить, что чувак был из Аризоны, с огромной бородой а-ля ZZ-Top и сильно подвыпивший (дело было на вечеринке после одной конференции в Штатах), поэтому так и сказал - total fucking bullshit.

"Make money/save money имеет смысл только если ты продаешь собственнику бизнеса, фаундеру или CEO (хотя даже CEO уже похер). Но ты не продаешь ни собственнику, ни фаундеру. Решение о покупке принимают рядовые нанятые работники. И знаешь, они тоже покупают софт по двум причинам и причины эти:

1. Cover my ass
2. Make me a hero

Продавай ЭТО, а не свои безликие "ускорим", "сэкономим", "повысим эффективноть" и прочее говно. Чем больше компания - тем откровеннее включай это в свой мессадж. Писать на сайте "поможем наебать босса" конечно не стоит, но намекнуть - обязательно."
👍4🔥2😁1
​​#удаленка

Продолжу поток мыслей из предыдущего поста про удаленку

Основной враг на удаленке - прокрастинация. Про нее написано уже столько, что стыдно возвращаться. Тем не менее:

Распорядок

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

Например: "встал - заправь кровать". Сразу +80 к "проснутости" и работоспособности. Да да, я знаю - "кровать, што, ахаха, ты серьезно"

В офисе есть routine. Насаждаемые извне правила и распорядок. В 10 утра все пришли, расселись по галерам и взялись за весла.

Дома всего этого нет, но мозгу надо как-то осознать, что он перешел из режима "сериал на диване" в режим "фигачим бэклог". Мозг надо наебать. Дать ему мелкие внешние сигналы, придумать маркеры, чем работа будет отличаться от неработы.

Лучший способ наебать мозг - начать день с маленькой победы. Закрыть какой-нить простенький баг в гитхабе. Оптимизровать какой-нибудь кусок кода. Ответить на геморный емейл, который "помечен как unread" еще с понедельника.

Еще один хороший хак - включить в стек маленькую модную технологию, и сразу "хочется работать" - замечали? Поэтому если на удаленке сотрудник говорит "а давайте попробуем Х" (например "вместо Гитхаба попробуем Гитлаб" или "перепишем вот это jQuery-говно на Vue") очень важно успокоиться, сделать выдох, подавить в себе матерную тираду и сказать "а давай".

При этом сила воли - полная херня. Сила воли это конечный ресурс, он истощается и запасы приходится пополнять. Если вы силой воли заставляете себя кодить сидя в пижаме, мозг делает двойную работу: во-первых, кодит, во-вторых - "заставляет себя". Поэтому гораздо лучше придумать систему сдержек (кровать) и гормональных вознаграждений (хаки), которая деликатно подтолкнет вас снаружи.

Короче. Наш мозг довольно тупо устроен. ОК, не весь, а та часть, которую принято называть lizard brain, она вырабатывает допамин, серотонин и эндорфины - и надо учиться ей манипулировать.

Недавно на Hackernews пролетала офигенная статья как раз про все это - Procrastination is About Managing Emotions, Not Time. В целом, все понятно из заголовка, можно не читать.

-

Так, я устал писать мотивационную хрень, лучше почитайте книжки Аси Казанцевой.

Теперь скучный хак для компаний (веселые были в прошлый раз).

Как нанимать за границей - что делать, если вы нанимаете иностранца на удаленку, но в этой стране у вас нет юрлица? У вас, в целом, есть три пути:

1."деньги в конверте" - неудобно (где брать кеш?), затратно (как списывать налоги?), да и сотрудники не согласятся.

2. Sole proprietor/self employed - это аналог российского ИП и "самозанятых", есть почти в каждой стране и это для вас, как для работодателя, самое удобное. Просите сотрудника зарегистрироваться в этом статусе, заключаете договор, рисуете инвойсы и шлете деньги. Возмещать ли сотруднику налоги - это уж как договоритесь, в разных странах принято по-разному. Американцы, например, нормально относятся к самостоятельной уплате налогов (у них так принято), а французы и поляки нет.

Минусы: не все согласятся куда-то там идти, регистрироваться и тп. Особенно, если это их первый опыт удаленки. Если не первый - человек уже привычный, у него даже наверняка уже есть свой личный бухгалтер.

Это, кстати, еще одна причина почему на собеседовании обязательно надо спросить "был ли у вас опыт ремоута".

3. Employer of record - новая и очень крутая тема, появилась в последние 3-5 лет. Суть: вы обращаетесь к компании "провайдеру", у которой есть юр.лица по всему миру. Она нанимает человека "к себе", платит за него все налоги и взносы, а вы платите ей. Гениально и просто. Хотите вы, например, нанять дизайнера в Словении - находите такой сервис с локальным юрлицом, человека нанимают туда, берут на себя все местные налоги, медстраховки и отчисления, а вы все это оплачиваете + комиссию. Пример такого сервиса - https://shieldgeo.com/ я даже поверхностно знаком с фаундером, вроде нормальные ребята (не воспринимайте как рекламу).
🔥1
На Hackernews недели три назад прошло голосование "какую технологию стоит учить в 2020?"

И больше всего апвоутов набрал такой ответ:

Learn how to really use a relational database, relational data modeling, and SQL

Ну неужели, наконец-то кто-то это сказал.

Нене, я все понимаю про редис-кластеры, про веб-скейл Монгу и прочий рок-стар эджайл некст-ген, но реляционные базы данных (первое упоминание - в научной работе Эда Кодда аж 1970го года) никто не отменял. Мало того, думаю, SQL ожидает даже некий камбэк и всплеск популярности на волне ML.

Ну и вообще - скучные unsexy технологии это круто. Они, если постараться, умеют делать волшебные штуки.

Мы вот, например, шлем 22 тысячи емейлов в час. Это 5-8 емейлов в секунду.

Мы не юзаем ни Mailgun, ни SES, ни - что там еще есть? Sendgrid? Мы юзаем тупой postfix запущенный на копеечном убунтосервере

(shameless plug: я писал об этом пост, который даже залетел в топ Hackernews)

Или вот вернемся к SQL... В прошлом месяце мы перевалили за тысячу клиентов только в SaaS-версии нашего продукта. Это значит, что 1000 компаний ломятся в нашу софтину - одновременно. В каждой компании десятки, сотни, иногда тысячи сотрудников. Это сотни тысяч юзеров "DAU", то есть каждый день.

В базе 50 миллионов тикетов и к каждому еще переписка на 10-20 сообщений, получается полмиллиарда записей только в таблице сообщений. От этих цифр волосы шевелятся, но вся эта машинерия, включая полнотекстовый поиск, живет в одной базе на SQL Server, который крутится на средненькой двухъядерной машине - в разы слабее моего игрового ноутбука.

Because SQL.

А еще тюнинг индексов, правильный partitioning, анализ "планов" и их кеша и тд...

Перечитал - какой-то хвастливый пост получился... Но, в общем, учите, братцы, SQL. Как верно подметили там же в комментах:

"SQL seems to be the most long-lasting skill in the IT industry"
👍1
За 14 лет ковыряния в собственном бизнесе я, кажется, уяснил главное качество успешного предпринимателя.

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

Надо быть "компилятором".

Спиздил тут, подглядел там, подсмотрел то, скопипастил это... И быстро (!) сговнякал весь этот Лего в общую кучку.

Увидел у конкурента крутой прием в UI-дизайне - быстро накодил что-то похожее. Подсмотрел тренд в индустрии - включил в маркетинговый мессадж на сайте. Заметил потенциал у человека - быстренько его схантил к себе в команду (как вариант - купил интересную компанию целиком). Подглядел у конкурентов маркетинговый хак - забрал его себе. Прочитал мега-успешный вирусный пост - скопировал стиль, слог и лексический портрет - и вот ты в топе реддит.

(важно тащить не все, а только самое ценное)

Good artists copy, great artists steal.

Это цитату часто приписывают Стиву Джобсу, но он ее, конечно, тоже спиздил - у Пикассо.

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

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

"Нам надо гуй и мышку!! Как у Ксерокса!!" или "Для айпода нужно тач-колесико!! Как у Synaptics!!"

Пару лет назад я, кстати, поделился этой мыслью с кем-то умным на каком-то митапе. И собеседник сказал, "dude, there's a whole book about this!" Названия я не запомнил, автора тоже. Эх.

В общем, ADHD наше все.


UPD: в личке и в чатике Самата напомнили книжку, это Austin Kleon “Steal like an artist”
Ко вчерашнему посту про компиляторство и умное воровство...

Моя любимая шведская авиакомпания SAS выпустила скандальную рекламу, которую им тут же пришлось отовсюду снять.

Ролик начинается с фразы "Что в мире есть по-настоящему Скандинавского? АБСЛЮТНО НИЧЕГО".

И далее рассказ о том, что все знаковые скандинавские фишки - на самом деле заимствованы. Фрикадельки - из Турции, лакричные конфеты - из Китая, булочки с корицей - из Австрии...

Мы просто берем все самое лучшее - и делаем это еще круче.

Отличная мысль. И классная трогательная реклама.

С фактологией я бы поспорил, правда... В Скандинавии ведь изобрели кучу крутых штук. Шкалу Андерса Цельсия, застежку "молния", разводной ключ, телефонную трубку, а также лучшие в мире детские книжки, обалденные рождественские традиции с адвент-календарями, ну и конечно мою любимую скандинавскую кухню - из свеклы, брюквы, мха и селедки :)

(кстати, британцы до сих пор называют брюкву "swede")

В общем, на авиакомпанию набросились примерно все. Политики, журналисты, sjw в соцсетях, правые, левые и городские сумасшедшие. И чтобы не раздражать охуевших патриотов ролик пришлось отовсюду выпилить.

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

https://www.youtube.com/watch?v=ShfsBPrNcTI
Джоел Спольски когда-то сказал великую фразу "программиста легко обучить бизнес-штукам, но обучить бизнес-людей программированию - почти нереально".

Я, кстати, стоял в этот момент рядом. Дело было на одной из первых конференций "Business of Software" и Джоел как раз объяснял какому-то журналисту, зачем они эту конференцию запускали - чтобы учить программистов основам бизнеса.

Джоела я тогда видел первый раз в жизни и поэтому не смог оценить всю эпичность этой фразы, т.к. был очень занят - ждал своей очереди сделать с ним селфи. Я потел, краснел, репетировал про себя фразу "I'm a huge fan" и старался не выронить телефон.

Как-то вдруг вышло, что я сейчас с разной степенью вовлеченности менторю аж пять стартапов. Да и в почту все чаще залетают просьбы обосрать ту или иную идею (и вы тоже пишите, обосру). Так вот, всем этим людям - запускающим свой продукт, сервис, приложение или порно-сайт - я с важным видом повторяю Мысль Джоела (tm) : у нас, у программеров, по сравнению с "обычными" запускающими бизнес людьми, УЖЕ есть огромное преимущество. Настолько огромное, что даже как-то неловко. Писать код - это superpower, все остальное можно быстренько подучить - маркетинг, воронки, конверсии, LTV, CAC и прочий ROI.

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

Все мы любим тринарный оператор x ? y : z и часто юзаем его для конкатенации строк, например, вот так

var sql = "SELECT x FROM y WHERE z " + (condition ? " AND xyz" : "");

Но чаще вот так - это в разметке, во вьюхах:

<div class='someclass @(condition ? "anotherclass" : "")'>

(так делают не только дотнетчики, а вообще все)

Вот эта дурацкая часть : "" меня бесила много лет.

И не только меня, Майкрософту даже в гитхаб поставили issue - "сделайте в C# 9 тернарный оператор без правой части" (не уверен, кстати, что стоит). Да и в гугле вот такой поиск ternary operator without else site:stackoverflow.com выдает аж 62 тысячи результатов только со Stackoverflow, народ жалуется на всех языках - от джаваскрипта до питона.

Как решать эту проблему в сишарпе - запиливаем вот такой экстеншен для bool под названием Then

 public static T Then<T>(this bool value, T result)
{
return value ? result : default(T);
}

(можно, кстати, не выпендриваться с дженериком, а просто сделать string. но так красивее)

И жить сразу намного проще. Смотрите, какой охуенный код:

<div class='someclass @condition.Then("anotherclass")'>
Когда у тебя маленький стартап, рук на все не хватает. Ни у тебя, ни у команды. Мало того, мозг старается избегать нудных задач, предпочитая заниматься прикольными и интересными - благо дел дохрена и всегда есть из чего выбрать.

Проблема в том, что стартапы только на четверть состоят из "прикольного и интересного", а 75% - это ебаная рутина. AKA "the boring shit".

Я вот обожаю кодить. При первой же возможности запрыгиваю в VSCode, клац-клац-клац, лишь бы не видеть эти чертовы бизнес-метрики, конверсии, SEO-позиции сайта, аналитику, лишь бы не писать скучный контент и не придумывать новый емейл-онбординг... Если есть хоть малейший шанс покодить - программисты сразу бросаются кодить. Забывая, что стартап состоит из кода всего на 25%.

Кодинг - это такая прокрастинация для фаундеров. Все, как с соц.сетями - instant gratification + доза допамина + спрятаться от реальности.

Между тем, Ренд Фишкин (фаундер moz.com) на Лондонском митапе хакерньюс высказал отличную мысль: сейчас в мире столько классных, удобных инструментов и фреймворков, что техническая задача "создать некий продукт" довольно тривиальна. Миллионы программеров в мире смогут сделать то же самое и даже лучше вас. Создать продукт просто, сложно - рассказать о нем людям, попасть в нишу, продать.

Есть много хаков для борьбы со всем этим, один из них называется "Marketing Mondays".

Научил меня этому Майк Тэйбер, кофаундер конференции "Microconf", фаундер Bluetick.io, со-ведущий эпичного подкаста "Startups for the rest of us" (сейчас он, правда, взял паузу и в подкасте не появляется) и вообще умнейший чел.

Суть проста - каждый понедельник вся команда занимается только маркетингом. Всё.

Все - фаундеры, разрабы, саппортеры... Unless что-то упало или клиенты просят срочной поддержки - все откладывают свои дела, садятся и фигачат. Знаете, есть такой термин "all hands support" - это когда любой сотрудник должен хоть раз в месяц поработать в саппорте - не важно, эйчар ты или CEO - иди и отвечай на гребаные тикеты... Ну а это - "all hands marketing". Особенно рулит на раннем этапе. Особенно если маленькая команда. Особенно если ты вообще один-одинешенек, как я когда-то.

В общем, весь день смотрим на метрики, придумываем АБ-тесты для лендинга, штурмим идеи, ругаемся, соображаем, как встроить в продукт viral loop, придумываем какойнибудь PR stunt, интервьюируем клиентов, собираем фидбек и тд. Понедельник, а значит отвертеться не получится.

Суть таких "weekly tolls" на неприятные задачи - в очередном способе поманипулировать нашим тупым мозгом. У тебя теперь как-будто есть внешнее ограничение, а значит больше не надо тратить силы на идиотскую "силу воли".

"Но Карл, я не сраный маркетолог!"

Я тоже. Придется учиться. Начните с hn.algolia.com и вбейте там в поиск "marketing" (я, кстати, не знаю, что там, взял с потолка, но наверняка есть что-то полезное).

"Но Карл, что конкретно делать-то?"

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

Сходите, например, и посмотрите, как ваш сайт выглядит в Page Speed insights. Зайдите в Google Search Console проверьте, по каким ключевым словам вас находят, возможно есть easy wins. Посмотрите гугл-аналитику и goals, придумайте тему для блог-поста, попалите сайт конкурента в ahrefs, может можно спереть какие-нибудь тактики? А может перезапустить продукт на Producthunt? А может показать юзерам в админке тултип "приведи клиента и мы ЛИЧНО ТЕБЕ (а не твоей компании) пошлем 100 баксов на пейпал"? (конкретных тактик я еще как-нибудь накидаю)

Еще раз - у стартапов почти не бывает проблем с созданием продукта. У стартапов почти не бывает проблем с решением инженерных челленджей. У стартапов ВСЕГДА есть проблемы с маркетингом. Главное продержаться первый понедельник, дальше будет легче.
​​Щас будет сумбурный технопост, ибо несколько дней мы с командой решаем проблему абьюза API...

Началось все с того, что наши базы данных стали все чаще кидать таймауты. Быстрый анализ "самых жручих запросов" показал, что пара десятков клиентов насели на API, раз в час вытягивая "вообще все". Видимо, чтобы пихнуть данные в какой-то свой дашборд...

Знаете, сейчас появилось куча этих долбаных "Business Intelligence" сервисов, которым даешь url/пароль/swagger, а они рисуют красивые графики и циферки для менеджеров, до капли высасывая ваш бедный endpoint.

Раз, сука, в 10 секунд.

(пользуясь случаем отмечу богическое удобство SQL Server в решении задач типа "ааа, все тормозит, ааа, что же делать". Там есть охреническая тулза Query Store, которая появилась в SQL 2016 и собирает статистику запросов. Очень жаль, что для Postgres ниче такого нет... кажется @antonrevyako пилит что-то такое и как раз ищет бета-тестеров)

Ну, в общем, да, все тупит и надо что-то делать.

Вопрос абьюза API обычно решается четырьмя способами:

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

2. Кеширование (опционально - на CDN/лоадбалансере, тогда вообще красота)

3. "Хард" рейт-лимит, после превышения возвращаем http-статус "а рожа не треснет?" более известный как 429.

4. Лимит на кол-во данных - заставляем клиента запрашивать длинные списки "постранично"

Алгоритмов для рейт-лимитов (пункты 1 и 3) много - Leaky bucket, Fixed window, Sliding window - за этим пжлста в Гугл. Лучше обсудим недостатки всех 4-х способов...

Я - дибил, поэтому выбрал 4ый способ - "постраничные запросы". Это было много лет назад, еще на стадии MVP. Мы задумчиво поплевали в потолок, махнули рукой и решили "сделаем как у Джиры". Пусть запрашивают постранично, а там посмотрим.

Дело, конечно, кончилось тем, что клиенты начали дергать АПИшку 1000 раз в минуту, вытягивая страницы друг за другом. По пути выяснилось, что в реляционных базах "постраничный" запрос вида "SELECT x OFFSET m" по производительности НИЧЕМ не лучше "обычного". Execution plan будет такой же, все индексы, сканы, сортировки и хеш-джойны отработают так же. Разве что i/o будет получше - с диска придется прочитать чуть меньше данных.

Кажется, пейджинг - это просто хитрый способ "раздеть" клиента на расходование лимитов.

Минусы 3-го способа (хард-лимит) очевидны. Лимиты всех бесят. Но они хотя бы прозрачны и понятны. Главное все четко описать в доках, а в теле http-response возвращать объяснение "а что, собственно, случилось"

Минусы 2-го способа (кеширование) - не везде применим и надо следить за целостностью. Например, если через АПИ создана новая запись - ее как правило надо сразу показать в "списках", без всяких кешей.

Хорошо, когда есть способы "инвалидировать" кеш, но их чаще всего нет (а пытаясь их сделать легко свалиться в спагетти-код).

Ах да, и кешировать наверняка придется "per-user" (такие факапы у нас тоже были - людям отдавались данные, на которые у них нет прав). Короче, сложно и гемор.

Минусы 1-го способа (троттлинг) - это удивительно, но их почти нет. Подумаешь, в мобильном приложении экран 3 секунды потормозит на десятый раз... Зато и бэк разгрузим, и целостность данных не поедет. Да и накодить такое легко.

P.S. Бонус-тип. Что делать, если вы взяли пример с нас - идиотов - и ввели постраничное ограничение и получили миллионы запросов подряд? Поднять ограничение можно, но придется уведомлять клиентов - и не факт, что они почешутся переписывать код. Мы в итоге сделали комбинацию троттлинга и long tail caching - это когда кешируется только "хвост списка", начиная с N-ой страницы. Т.к. данные обычно отсортированы по "дате последнего изменения", ясен пень что после N-ой страницы люди вытягивают годами не менявшееся старье... В общем врубили лонг-тейл-кеш на 12 часов.
Трой Хант - человек, сделавший для безопасности больше, чем... впрочем, все вы знаете, кто такой Трой Хант.

Так вот, Трой передумал продавать свой сервис Have I Been Pwned https://haveibeenpwned.com/ - который давно перерос из прикольного сайта для сисадминов и их семей - в огромный сервис, к которому официально подключены правительства десятков стран.

Я как-то даже пропустил, что он собирался его продать, а он, оказывается, уже 11 месяцев погружен в этот процесс. Трой набрал пул из 141 компаний - потенциальных покупателей, отобрал из них 43 лучших и поехал из своей Австралии в Сан-Франциско со всеми ними встречаться.

После чего, во-первых, офигел, насколько Долина карикатурна, нелепа и похожа на одноименный сериал, в котором он вдруг оказался в роли Ричарда Хендрикса.

Во-вторых, офигел от 11-ти месячного процесса due dilligence, аудитов, проверок, оценок и бесконечного питчинга.

Но больше всего он офигел от вопроса, который ему задали на одной из встреч - "как вы видите свой идеальный день в офисе?"

Штобля?!

(ну конечно, компанию ведь покупают вместе с фаундером, особенно если фаундер - такая рок-звезда, как Трой... Его известность просто зашкаливает - он выступает экспертом на слушаниях в конгрессе, консультирует по безопасности Евросоюз (!) и т.д. А значит первые N лет покупатель, конечно, захочет, чтобы Трой оставался в команде)

В общем, HIBP больше не продается. Молодец Трой. Наш идеальный офисный день выглядит так: "get on my jet ski then do whatever the fuck I want".

Это, собственно, цитата из его блога, где он рассказывает обо всем произошедшем, читать здесь https://www.troyhunt.com/project-svalbard-have-i-been-pwned-and-its-ongoing-independence/
👍1
Наткнулся на довольно здравую, вроде, статью про коронавирус.

https://slate.com/technology/2020/03/coronavirus-mortality-rate-lower-than-we-think.html

TL;DR - оценка смертности в 2-3% сильно преувеличена. Математика простая: у берегов Японии сейчас на карантине припаркован круизный лайнер с 4тыс пассажирами, где разразилась локальная эпидемия. И обнаружена интересная штука: примерно у половины зараженных пассажиров вирус протекает асимптоматично (!) т.е. болезнь не проявила себя вообще никак.

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

А значит смертность можно уменьшать практически вдвое (экстраполируя круизную модель "половина зараженных не болеют").

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

Люди пишут в личку. И вопросы не продвинутые - типа "в какой тулзе устроить удаленный хакатон" или "где заказать смузи на завтрак". А самые базовые: "КУДА БЕЧЬ? С ЧЕГО НАЧАТЬ? КАК ВЫ, СУКА ЭТО ДЕЛАЕТЕ" - от олдскульных компаний, которые всю жизнь сидели в офисе.

Этот пост - для них, остальным просьба отвернуться.

Для начала поднимите в офисе VPN и напишите инструкцию, как к нему подключиться. Инструкцию простую и тупую, чтобы понял даже HR (зачеркнуто) даже люди гуманитарных профессий. Лучше (не ржать) сделайте ее в виде картинки, которую они смогут пересылать друг другу в вотсапп. Не выебывайтесь с протоколами, начните с чего-нибудь простого, что встроено в винду. Тогда создание VPN-соединения сведется к двум строкам на powershell

Варианты тулинга есть разные. "Чат + видео + джира + gsuite". Или "чат + видео + трелло". Или "чат + видео + конфлюенс + issues в битбакете" и тд.

Везде, как видите, есть "чат + видео".

Чат - это Slack, MS Teams, HipChat, Discord, да хоть ту же Телегу или Скайп. Почти все они поддерживают Single Sign On (через SAML и тп), поэтому заводить новые пароли не придется, люди будут юзать имеющиеся корпоративные аккаунты.

Ставить не только на компы, но и на телефоны. Чтобы в случае даунтайма (как вчера у Самата) можно было срочно написать человеку "mention" (прямое обращение через @-юзернейм) "ало, ты где?" и у него зажужжит телефон в кармане.

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

(на вопрос "почему-бы просто не позвонить" - тру удаленщики не пользуются телефоном. Вы только что уехали из офиса, зачем тащить за собой офисные атавизмы? Давайте еще факс с ксероксом поставьте. Я, кстати, вообще не знаю ни одного телефона своих сотрудников, да и находимся мы все в разных странах - я дольше буду разбираться, как из Латвии набирать код какой-нибудь Турции)

Попросите людей ставить в чате актуальный статус - "онлайн/away/afk" и тп. В Слеке удобно ставить статус на определенное время, чтобы через полчаса/час/два он сбросился сам собой. Мы, кстати, обходимся без статусов, народ просто пишет прямо в чат "отойду с собакой погулять". Правда у нас и команда небольшая...

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

Помните, фичи в софте существуют не потому, что компания "знает как надо". А потому, что ее попросил какой-нибудь дибил (либо клиент, либо начальник).

Начните с малого. Start small - stay small

Мы внутри команды почти не пользуемся емейлом. Для синхронной коммуникации - Слэк, для асихронной - багтрекер и "вики" (АКА внутренней центр знаний).

В качестве вики отлично подходит Notion, просто супер-инструмент, но для начала можно не выпендриваться и тупо создать репо с кучкой Маркдаун-файлов на Гитхабе (помним про принцип "start small").

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

Это, конечно, полный ужас и с программистами не работает, но если вы ищете что-то такое для HR-ов (зачеркнуто) для людей гуманитарных профессий - можно заюзать Hubstaff, она делает все вышеописанное и даже автоматом трекает время в джиро-задачу.

Для видеочатов - Zoom или BlueJeans (я за первый).

Хардкорный хак, которым мы раньше часто пользовались (спасибо, опять же, Самату, что напомнил): заведите Zoom, создайте групповой звонок со всеми сразу и включите "gallery mode". И пусть все зажмут "mute".

Первое время это даст (а) отличное "чувство локтя" (б) простой и привычный способ коммуникации. Если надо сказать что-то важное - выключаем "mute" и говорим. Но лучше написать :)
Нефликс на 30 дней принудительно ограничивает качество видео-потока в Европе, чтобы разгрузить интернет-провайдеров.

Вы заметили, как замедлился интернет?

Все сидят дома, звонят по voip, чатятся в зумах, смотрят порнуху, играют в игры и качают торренты. Vodafone плачет, что их траффик в Евросоюзе вырос в полтора раза, оборудование на пределе

Обсуждение на HN https://news.ycombinator.com/item?id=22630665
​​Как отвечать баг-баунти хантерам?

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

Начиная с какого-то уровня вашему стартапу начнут приходить вот такие письма (орфография сохранена).

Hallo dear frend! I'm an independant security researcher and found a really very critical vulnerability on your website. Please get back to me!

Я, сука, даже сквозь экран слышу индийский акцент.

Алгоритм взаимодействия такой:

1. Половина этих ребят, скорее всего, просто погоняли на вашем сайте какой-нибудь XSS сканер. Их познаний едва хватает, чтобы вбить в URL "or 1=1; drop database" и с этой уловкой они уже 10 лет ломятся на все сайты мира, не разбирая версий.

Одна группа дебилов из Алжира уже третий год долбит нас каким-то древним нюкером для phpMyAdmin, периодически утомляя нас шантажирующими "репортами".

Таких можно посылать даже не отвечая.

Ну или забанить Алжир, например.

2. Из оставшихся - у 90% будет одноразовый ящик на gmail, нежный возраст и кривой английский. Таких тоже можно посылать, даже если уязвимость более менее трушная, но вы про нее давно знаете и ее тупо лень чинить (это, кстати, тоже способ отмахаться от школьников - оставить им такой honeypot, чтобы не засирали логи, а поскорее отвалили хвастаться "взломом" перед одноклассниками).

Как послать их быстро и безболезненно - спросить у них полное имя и адрес "для инвойса". 90% обиженно сольются в туман.

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

Если человек нормальный и действительно ресерчер, а не школьник с ломаной виндой, он, конечно, все пришлет.

Вообще, это тонкий лед. Пока уязвимость не разглашена - вы у хантера в заложниках и это неприятно. Ваш единственный leverage - осторожно узнать их персональные данные.

После разглашения уязвимости - в заложниках уже они у вас. И именно этим меня весь этот бизнес раздражает - обе стороны вынуждены лавировать в шаге от банального шантажа :(

3. С оставшимися персонажами уже можно работать. Скажите, что баг-баунти программы у вас нет, но вы с удовольствием заплатите за найденную уязвимость. Перед выплатой попросите подписать NDA (это важно), где они обещают не пользоваться уязвимостью в личных целях и не разглашать ее третьим лицам. По крайней мере, пока вы ее не пофиксите, хотя мы обычно просим не публиковать вообще никогда, ибо у нас есть клиенты с "self-hosted" версиями, которые постоянно забывают пропатчиться. Шаблоны договоров, кажется, были на hackerone

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

А вообще, если вас ломают - поздравляю, это признание
👍1