Thursday, August 15, 2013

Твиттер без интернета



@briztaker: Интересно, сколько бы почтовых голубей потребовалось, чтобы запустить Твиттер без интернета.


Допустим, все станции стационарны. Из статьи [1] имеем следующие данные: средняя скорость голубя 65 км/ч, дальность среднего преодолеваемого им отрезка пути = 300 км. А для гарантии доставки на один пакет с данными в среднем нужно 3 голубя.


По имеющейся информации [2], в 2010 году было 3 × 10⁹ запросов к API в сутки, что составляло 75% трафика твиттера. Обычный размер пакета данных (MTU) в Интернете = 1400 байт, чего должно быть вполне достаточно на передачу 1 API call. Данные взяты отсюда [3], если кто не верит.


А вот эти данные являются моими допущениями:
  1. если предположить, что голуби летают свои 300 км (пять часов) раз в два дня, то аптайм птицы (время нахождения в полёте) составляет 10%;
  2. если расстояние больше 300 км, то следующий голубь со станции вылетает мгновенно после прилёта предыдущего;
  3. коммуникации осуществляются вне зависимости от местонахождения серверов Твиттера, напрямую между адресатами, т.е. голубь вылетает из точки отправителя до точки получателя;
  4. станции голубиной почты работают со 100% аптаймом, и сервисного трафика вроде смены маршрутизации между ними нет;
  5. и отправка, и получение твита совершаются за 1 API call. Запросы считаем совершаемыми по протоколу HTTP over TCP/IP, и на 1 API call нужно 2 пакета (пакет и подтверждение), т.к. условно говоря, TCP-соединения между станциями голубиной почты уже установлены;
  6. в данной калькуляции учитываются только запросы к API, а content delivery network, сервирующий аватарки и картинки, не учитывается;
  7. среднее расстояние до подписчика (судя по моим фолловерам) = 1000 км;
  8. в настоящее время трафик Твиттера в 10 раз больше, чем в 2010 году.


Считаем:
Из среднего расстояния до подписчика, количество голубей на один API call:
1000 км / 300 км = 4 отрезка пути,
(4 отрезка × 3голубя/отрезок) / 2 пакета/call = 24 голубя/call  .


Время, необходимое для передачи одного API call:
1000 км / 65 км/ч=15,4 часа.


Итого, чтобы обслужить все API calls в сутки, с учётом аптайма голубя, нужно:
(15,4 ч / (24 ч/сут  10% аптайма)) × ((3 × 10⁹ calls/сут × 10) / 75%) = 257 миллиардов голубей.


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


Saturday, May 4, 2013

Мой первый бизнес-план



Шёл 199x год, кризис после распада СССР был ярок, как никогда. Мне тогда было 6 лет, и хотя я благодарю своих родителей, что делали всё возможное и от них зависящее, моё детство нельзя назвать сколько-нибудь радужным. И потому первые мысли о том, где взять денег, уже начинали прорастать в моей голове.

Так получилось, что во время визита на отцовскую работу я узнал о нечастом тогда госте на постсоветском пространстве — apparatus xerox. Когда мне сказали, что этот дорогой и сложный прибор делает фотокопию всего, что положишь под крышку, мысль проверить одну гипотезу появилась буквально сама собой.

Первым пунктом было договориться о возможности воспользоваться ксероксом. Разрешение на несколько копий бесплатно было успешно получено у девушки-секретаря. За следующие требовалось бы заплатить. Вторым — попросить чистый лист А4 и ножницы. С этим так же проблем не возникло. Третьим пунктом в моём списке требуемого была вещь, просить которую пришлось у отца. Он, правда, совсем не понимал, зачем она мне нужна буквально на 15 минут.

Соответственно, план был прост и понятен:
Ценность копии − цена бумаги − аренда оборудования − рабочее время = ПРОФИТ

При проверке гипотезы я, как вы начинаете подозревать, потерпел сокрушительное фиаско. Я не ожидал, что двухсторонняя копия однодолларовой купюры будет настолько отличаться от оригинала, даже если её очень аккуратно вырезать одолженными ножницами. Она была чёрно-белой, конечно же, и с полосой, оставляемой старым барабаном, но это уже было не так важно. Ценность этой копии оказалась ничтожной.

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

Такая вот история о человеческих наивности и вере в технологию.

Thursday, April 11, 2013

Советы соискателю



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

Рекрутёр обращает внимание на:
  1. Опыт работы по специальности.
  2. Должность и соответствующий функционал.
  3. Масштабы решаемых задач.
  4. Наличие успехов и достижений в работе.
  5. Частоту смены работы.
  6. Фотографию в деловом стиле.
  7. Логичность развития карьеры.
  8. Наличие профильного образования (MBA, если вы менеджер, например).
  9. Специфические знания (SAP, Navision etc).
  10. Уровень владения английским. «Рашн инглиш» лучше не указывать вообще.

Нормальный срок работы — минимум 2,5 года. Меньше — будет впечатление, что человек часто меняет работу. При работе на разных должностях в разных компаниях, если при этом реально занимался одним и тем же на фактически тех же людей, лучше объединить эти должности в резюме в один блок. Если вы фрилансер с множеством проектов, тоже клейте их в одну «должность», указывая самые крупные проекты или хотя бы области деятельности.

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

Касательно «активных» кандидатов, которые отвечают на сотню вакансий в неделю: их не любят. Одно дело — сидеть за компьютером дома и забрасывать резюме в компании, другое — живой нетворкинг с людьми той сферы, где хотите работать.

Если выстраиваете себе имидж, то публикация себя в непотребном виде категорически запрещена. Нужно наполнять профиль соцсети неформально, но он должен служить подтверждением профессионализма. Фотографии и отчёты с конференций, например, — отличный метод.

Докладчик привёл и список ошибок в резюме, которые раздражают рекрутёров:
  1. Прислано в PDF. Трудно импортируется в базу данных. Неудобно и обновлять.
  2. Составлено в виде таблиц.
  3. Слишком короткое (менее 1 А4) или слишком длинное (более 2 А4).
  4. С ошибками. Любыми — к ним нетерпимы.
  5. Резюме не структурировано — единый блок каши.
  6. В повествовательном стиле, как автобиография.
  7. Разные стили, шрифты, размеры.
  8. Много воды.
  9. Функционал вырван калькой из должностной инструкции.
  10. Цели поиска не соответствуют вакансии.
  11. Нет контактов, например, номера телефона.
  12. Анонимное резюме.
  13. Указаны лишние приватные данные рекомендателей.
  14. Электронный адрес (не ваш, смешной или часто меняющийся). Как выглядит для рекрутёра, например, pusichka1992@example.com, особенно если это вашей дочери, вы представляете.
  15. Длинные пропуски в истории работ без логичных причин.
  16. Есть нестыковки по опыту в сравнении с прошлыми версиями резюме.
  17. Подробно описан старый (старше пяти лет), ныне нерелевантный опыт.
  18. Фото выбрано неудачно, не показывает вас в деловом свете.
  19. Указание очевидных вещей (например, русского языка родным при отсутствии других).
  20. Документ называется неудачно (резюме.docx, Новый документ 1.docx).

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

Tuesday, March 19, 2013

Убийцы желания работать



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

Есть факторы, влияющие на продуктивность работы:

  1. Знания и умения (на постсоветском пространстве обычно присутствует только это).
  2. Психологическая мотивация.
  3. Организационные навыки.

Практика показывает, что реальная продуктивность равна меньшему из слагаемых, привносимых этими факторами. Человек:

  1. не умеющий делать свою работу и не желающий учиться
  2. или не имеющий ни желания работать, ни заинтересованности в работе
  3. или который не может организовать свой рабочий процесс и добиться решения задачи во взаимодействии с коллегами
— плохой работник. Для того, чтобы незаинтересованный в результатах своей деятельности всё-таки их выдавал с завидной регулярностью, его нужно контролировать, причём достаточно жёстко.

Как обеспечивают контроль над человеком? С помощью нагнетания страха лично каждому и с помощью пропаганды индифферентности к окружающим в обществе. «Разделяй и властвуй» в чистом виде. 

Контролируемого человека можно легко определить по тому, что он говорит в отсутствие своих подавителей: он жалуется. Жаловаться — детская привычка, вообще-то. Обсуждать кого-то за спиной в плохом ключе — тоже не относится обычно к человеку, у которого всё хорошо. В нормальной семье, как и в нормальной компании, никому в голову не придёт это делать. Следовательно, человек подавлен настолько, что просит сочувствия у других. Как правило, баланс позитивных и негативных слухов хорошо показывает ситуацию в компании: успешные люди обсуждают успехи и наоборот. Есть страны, где большинство населения говорит о своём плохом начальстве, плохой власти, плохих условиях… Знакомо, не так ли?

В каждой компании есть жертвы начальского контроля. Они оценивают день по тому, сколько времени они не делали ничего по работе и не получили за это по башке. Эти люди знают, чем не хотят заниматься, и боятся наказания. Определить таких можно по избеганию начальства и его прямых вопросов о работе. Есть и те, кто не боится, привык к такому положению вещей, но это часто люди, очень искушённые в прикрывании собственных задниц бумажками и своими сотрудниками.

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

В чём причина плохого качества? В отсутствии желания работать. А почему его нет? Дело в том, что в головах людей главенствуют такие принципы:

  1. «Начальству нет дела до меня и условий, в которых я живу и работаю».
  2. «Эта компания коррумпирована и приносит профит тем, кто не приносит ей ценность».
  3. «Моя работа и поведение никак не влияют на мои доход и репутацию».
  4. «Я не верю, что могу быть успешным в этой компании».

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

Так вот, если хотите, чтобы ваше дело держалось на плаву, искореняйте эти убеждения всеми силами:

  1. Всегда высказывайте критику в разговоре один на один, а не публично.
  2. Всегда начинайте совещания строго вовремя.
  3. Всегда завершайте совещания строго вовремя.
  4. Всегда держите взятые на себя обещания.
  5. Контролируйте телефоны и иные средства отвлечения.
  6. Контролируйте негативные слухи. Сами распространяйте только позитивные.

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

Практически всегда действует правило, что личный успех каждого сотрудника ведёт к общему успеху компании. Очень полезны люди с принципом «сказал — сделал»: это лучшие сотрудники, на них можно и нужно полагаться. Станьте таким человеком сами, ведь лучшие люди хотят работать друг с другом.

По поводу контроля отвлечений. В цивилизованной стране человека, работой которого не является «сидение на телефоне», не могут прервать звонком по любому поводу. Отвлекание считается высказыванием пренебрежения, поэтому «право мгновенного контакта» стараются не использовать. Прервать работающего могут только люди из белого списка, и то исключительно в случае форс-мажора. Система поддерживается на плаву за счёт исключения злоупотребляющих доверием из этого списка.

Производственная культура и методы управления работниками не могут не оставлять свой отпечаток. По состоянию на 2013 год людей можно примерно разделить на следующие группы:

  • > 50 лет: чаще всего закоренели, не перевоспитываются, хоть исключения и бывают.
  • 35 - 45 лет: выросли в аду перестройки. Тогда всё рушилось, они научились быть готовыми урвать кусок и ничего не ждать даром. Прагматики, учиться им трудно.
  • 25 - 35 лет: инноваторы. Учатся быть умнее всех и работать больше всех, иначе не выжить. Не готовы топтаться по головам. Ищут правильных людей.
  • < 25 лет: трудно понять, что вырастет из тех, кому дают незаслуженные ими блага.

К сожалению, нет единого метода общения с представителями этих слоёв, кроме нужного им человеческого отношения.

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

Люди — социальные существа и лучше работают в составе команд (замечу, что докладчик не понимает разницы между сотрудничеством, которое полезно, и принудительной социализацей, которая вредна — прим. kasuparu). Каждый человек — участник нескольких социальных групп: коллектив, семья, и т.д. Большая часть времени проводится на работе. Если она обогащает жизнь, то другим социальным группам это выгодно, и наоборот: человек вынужден забирать энергию у семьи, чтобы прожить следующий рабочий день.

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

Saturday, March 16, 2013

Сон 2013-03-06



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

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

Машинист с силой трогается задним ходом и начинает набирать скорость, кажется, что слишком медленно. Примерно 30 секунд было очень страшно, подумал, что не успею написать родителям прощальную SMS, а если и напишу, то мы в тоннеле, и она не отправится. Ну что ж, простите меня, но вы узнаете обо мне из новостей и приедете опознавать мои останки. Знайте: я вас очень люблю.

Машинист, практически не прекращая, криком общается через рацию с диспетчером, но через переборку слов не понять. В конце концов проезжаем место, где туннель расширяется и колея раздваивается, появляется заборчик между ними, снижаем скорость. Соображаю, что мы проехали стрелку, которую сразу после нас переключили. Тоннель начинает подъём, останавливаемся. Мимо нас медленно проезжает один пустой вагон с включенным светом. Чуть спустя видим, что он откатывается обратно и останавливается в нижней точке перегона вдалеке перед нами.

С чувством облегчения и благодарностью Провидению, что остался жив, я просыпаюсь.

Friday, March 8, 2013

Неделя твиттеромолчания

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

Начал я в пятницу, 1 марта, в 9 утра, с этого момента у меня была удалена аватарка.

Почему я затеял? 1) Проверить на себе эффект боязни пропустить что-то важное; 2) проверить, правда ли, что если я исчезну (из сети), то это останется практически незамеченным (за исключением, возможно, пары человек). Да просто так.

На этот раз накопилось меньше:




















И вот сегодня, 8 марта, неделя эксперимента закончилась. Он получился несколько неудачный, поскольку вместо ленты твиттера я чаще проверял RSS, хотя боязни что-то упустить я не испытывал.

Sunday, March 3, 2013

Реальные задачи на C



Недавно попали ко мне тексты задач по программированию, которые даются реальным студентам одного московского университета в качестве заданий на лабораторные работы. Язык — С, программы консольные.

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

Задача: Сочи-2014

В рамках строительства олимпийских объектов местным чиновникам было поручено предложить план дороги на участке недалеко от Сочи. Участок можно схематично представить как матрицу из NxM подучастков, для каждого из которых выделяется некая сумма на его освоение. Дорогой называется такой набор из M подучастков, что в каждом столбце содержится ровно по одному подучастку и для подучастков с координатами (i1, j) и (i2, j+1) верно, что |i1-i2| ≤ 1. Соответственно, сумма денег, выделяемых на освоение дороги, равна сумме денег выделяемых на каждый из её подучастков. Так как большая сумма несомненно приведёт к лучшему качеству исполнения дороги в целом, чиновники заинтересованы в максимизации осваиваемых средств. Ваша задача в том, чтобы помочь России не упасть в грязь лицом на предстоящих играх.

Задача: Решение системы линейных уравнений

Грустная панда сидит и смотрит на систему линейных алгебраических уравнений Ax = b с целочисленными коэффициентами. С первого взгляда бросается в глаза, что все эти коэффициенты невелики. Для того, чтобы развеселить панду, требуется реализовать программу, которая смогла бы найти точное решение этой системы.

На вход программе подается натуральное число N (N ≤ 500) и последовательность целых чисел a11, a12, ..., a1N, b1, a21, ...., aNN, bN. Требуется вывести последовательность целых чисел x1, ..., xN, являющихся решением данной системы уравнений.
Панда уверена в том, что такое решение существует и единственно.

Задача: Апельсин

К Вам на улице подходит незнакомец и говорит, что всем известно эффективное решение задачи вычисления i-ого члена последовательности Фибоначчи по модулю числа p*. Однако, теперь его интересует более общая задача для произвольной линейной рекуррентной последовательности, заданной формулой
Fn = A1 * Fn-1 + ... + AkFn-k.
Не в силах противостоять ему, Вы решаете помочь. Ваша задача посчитать FN mod p.

Задача: Экстерминатус

Мир наш исполнен войны — целая вечность сражений во имя Императора. Он никогда не прекращает и не отступается от бесконечной вражды, а значит - не должны и мы.

Второй год Похода Мучений. В отдалённой системе войска Императора столкнулись с планетой полной ужасающих человекоподобных зверей, представляющих собой серьёзную угрозу. После ожесточённых боёв связь с ударным отрядом чёрных тамплиеров во главе с братом Герхартом была потеряна, в связи с чем было приятно единственно верное решение в таких ситуациях — ЭКСТЕРМИНАТУС, то есть полное уничтожение всего живого на поверхности. Для запуска орбитальной бомбардировки требуются специальные коды. Обычно они приходят на отдельный канал и с ними не возникает никаких проблем, но в этот раз в связи с оплошностью подчинённого несколько передач принимались по одному каналу и результаты перемешались. Ваша задача состоит в том, чтобы извлечь из полученной информации коды запуска орудий.

Передача состоит из заглавных и строчных латинских букв, цифр, а также 4 основных арифметических действий '+', '-', '*', '/'. Её длина не превосходит 2000 символов. Известно, что кодом является некоторая команда вида A op B, где A и B — целые неотрицательные числа, а op - одно из арифметических действий, результат которой является корректно вычислимым выражением модуль которого не превосходит 120000. При этом выражение "A op B" является подстрокой исходного сообщения. Гарантируется, что числа A,B и результат операции над ними не переполняют 32-х битные целые знаковые числа. Необходимо найти все такие команды и вывести их каждую с новой строки в виде A op B = res, где res — результат вычисления. Всё остальное считается мусором из других передач. Заметим, что для выражения A op1 B op2 C нужно вывести

A op1 B = res1
B op2 C = res2

Examples

Input
rDU+9519+28006-
+45350-80003-7034/14870/50385i-25266-39120*8557

Output
9519 + 28006 = 37525
45350 - 80003 = -34653
80003 - 7034 = 72969
7034 / 14870 = 0
14870 / 50385 = 0
25266 - 39120 = -13854

Задача: Генерал танковых войск

Генерал танковых войск Петя из 8Б класса проснулся в это субботнее утро в приподнятом настроении. Сегодня он и его верные братья по оружию нанесут решительный удар по Берлину, отомстят своим жалким недругам из 9В класса, добудут много золота и покроют себя славой. И в этот раз никакие ничего не понимающие в тактике главнокомандующие-родители не прервут героическую операцию под предлогом того, что ночные наступления совершенно недопустимы. К сожалению, Петя обнаружил, что один из родителей, недовольный тем, что успехи Пети вне поля сражения не дотягивают даже до звания рядового, сменил пароль от компьютера. Рядом Петей была найдена бумажка с длинной строкой. Вспомнив все предыдущие пароли, он понял, что каждый новый является подстрокой данной строки. Прикинув время, необходимое для проверки одного пароля, Петя теперь хочет подсчитать сколько вообще паролей возможно, чтобы понять, успеет ли он к ночному наступлению. Разделите горе Пети и помогите ему.

Задача: Пожалуйста, прочтите: личное обращение родителей Олега

У мальчика Олега редкая болезнь: боязнь условных переходов и команд условной передачи данных. Мальчик очень хочет стать программистом, но для этого необходимо дорогостоящее лечение в Германии. Однако есть и паллиативное решение. Помогите мальчику Олегу написать программу, вычисляющую модуль введённого числа, но не применяя инструкций условных переходов и условной передачи данных. Используя это решение как пример, он сможет писать и другие программы, несмотря на свой недуг.
Update от автора задач: эта  — на ассемблере.