Русский
Русский
English
Статистика
Реклама

Юмор

Перевод Юмористичный обзор Rust с перспективы JavaScript

16.06.2021 20:20:54 | Автор: admin

В этой статье я в несколько забавном ключе документирую кое-какие размышления о своем знакомстве с Rust с позиции прожженного энтузиаста JavaScript. Здесь вас ждет импровизированная прогулка по феодам Вестероса, встреча с Ланнистерами и даже замаскированный под остров корабль занятные аналогии, которые можно провести с работой в этом языке.

Я по достоинству оценил Rust в качестве средства для написания небольших инструментов. Мой повседневный рабочий процесс под завязку заполнен JavaScript, а так как Rust во многом его напоминает, то и знакомство с ним стало само собой разумеющимся.

Однако проделывание серьезной работы в Rust требует существенного переосмысления процесса построения кода. Компилятор здесь верен своему призванию и беспощаден. Но, скажу честно, это даже доставляет некоторое удовольствие оттачивать код до состояния, когда он, наконец-таки, компилируется.

Хорошие новости


Современный Rust оказывается весьма схож с JavaScript. Переменные объявляются через let, функции выглядят очень похоже, типы уже не чужды, так как мы привыкли к TypeScript, присутствуют async/await, да и в общем формируется весьма знакомое ощущение.

Плохие новости


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

У каждого из этих подходов есть и достоинства, и недостатки, поэтому они и используются, как правило, каждый для своей области задач. Rust же расположился ровно посередине. Он дает вам доступ ко всем внутренним процессам, попутно предоставляя прозрачность и простоту использования высокоуровневых абстракций. Но всегда есть это но вам, как разработчику, необходимо за это платить. В данном случае мы платим необходимостью научиться по-новому рассматривать построение программы.

Управлению памятью быть!


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

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

Когда речь заходит об управлении памятью, то Rust как бы говорит: Ничего не знаю реальные шеф-повара сами за собой убирают. И на то есть хорошая причина, потому что сборщик мусора несет в себе собственный набор неочевидных проблем, которые могут навредить в самый неожиданный момент. Хотя в то же время, обогащенный опытом других языков, Rust признает, что заставлять программиста управлять памятью столь же разумно, сколь поручить Дугласу Адамсу написать Звездолет Титаник.

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



Как розу ты ни назови, а запах ее столь же сладок


верно сказал Шекспир. Хотя, как быть с не столь ароматными запашками? Сохраняется ли верность его слов в обратном случае? Учитывая многовековую традицию использования людьми эвфемизмов, можно с уверенностью заключить, что нет.


Корабль длиной 55 метров, замаскированный в Тихом океане под вид маленького острова для избежания обнаружения во время Второй мировой войны. Сработало

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

На землях Вестероса (смею я сказать ВестеRust?) есть крохотные, небольшие, а также крупные феоды. Загвоздка в том, что все они оккупированы Ланнистерами. Внутренне феоды занимаются своими собственными делами, а когда им требуются товары извне, то они берут на себя долг, чтобы эти товары получить. В последствии долг необходимо возвращать Богам Вестероса. Rust подобен королеве драконов этого мира он узрит свысока все нюансы и проследит, чтобы все долги перед Богами были уплачены.

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

Может ли возникнуть кризис?


Посмотрим, как это работает.



Здесь у нас две области: внешняя main и внутренняя, будем звать ее inner scope, для демонстрации. В этом случае владение работает так:

  1. main владеет a и b
  2. a хочет поработать в inner scope, поэтому main передает a во владение inner scope
  3. inner scope делает свои дела с a и завершается
  4. Скрытый код Rust отбрасывает a
  5. main делает свои дела с b и тоже завершается
  6. Rust отбрасывает b

Обратите внимание, что долг, обусловленный владением, возвращается системе, а не области, из которой возник. Владение a не возвращается в область main. Так, подождите звучит очень опасно.

Что, если у нас будет такой код?



Здесь область main хочет снова использовать a, но мы сказали, что Rust уже ее отбросил по завершении inner scope.

Не даст ли программа сбой и не сгорит ли, когда достигнет этой точки выполнения?



Да, так и будет. Но, как спартанцы ответили отцу Александра, королю Филиппу II Македонскому: если она этой точки достигнет.

Абсолютный бюрократ


Компилятор Rust является гордым послушником традиции Легизма, настолько верным, что Хан Фей-цзы с восторгом бы объявил вне закона все остальные языки. Ничто не происходит в землях Rust, пока компилятор не скрепит это действие печатью Утверждаю. Он будет тщательно проверять каждую мелочь, оценивая, насколько безопасен запуск программы, и только при удовлетворении всех требований выдаст-таки исполняемый файл.



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

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

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

Rust RPG


В землях Rust переменные это игроки. Игроки обязаны принадлежать некоторому классу маги, священники, структуры. Более того, каждый игрок может иметь индивидуальное снаряжение. И в этом есть смысл. Ведь у вас может быть два священника один с посохом, а второй с жезлом не так ли?

Помните пример с dbg!()? Это макрос, представляющий грубый эквивалент console.log из JS. Давайте создадим собственную типизированную переменную и выведем ее в консоль.



Мы создали struct, которая, по сути, является типом. Затем мы создали объект этого типа. В завершении мы запросили вывод созданного объекта.



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

Ключевой момент здесь в том, что ваши рукотворные переменные все начинают в пешках без всякого снаряжения. А вот где вступает в игру и само снаряжение (на языке Rust называемое типажи (Trait)).

Нажмем F.



На этот раз работает. Единственное отличие в появившейся сверху строке. Здесь мы снаряжаем Noob типажом Debug. Теперь наш игрок готов к выходу в консоль какое достижение!

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

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

Типажи являются глубинным принципом работы фабрики Rust. Вернемся еще раз к примеру с владением. Если внимательно прочесть сообщение об ошибке, то мы заметим в нем компилятор объясняет, что владение переменной пришлось переместить, потому что String не реализует типаж Copy. В противном случае компилятор не стал бы ее перемещать, а сделал копию.

Типаж Copy означает, что вы берете раздел памяти и memcpy его в другое место, работая непосредственно с байтами. Хорошо, значит String не имеет типажа Copy, нужно ли нам просто сообщить компилятору, чтобы он его присвоил? К сожалению, нет. В целях безопасного использования Copy является слишком низкоуровневой для применения к String.

Конечно же, Rust бы не был полезен, если бы история на этом завершалась. Есть более явный типаж, который проделывает практически то же самое Clone. String обладает типажом Clone, значит нам просто нужно использовать его вместо Copy.

В качестве примера немного подправим код:



Здесь компилятор видит, что нам нужно использовать a внутри inner scope, но теперь он также видит, что мы научились все делать правильно, задействовав вместо фактической a ее клона. Итак, получается следующее:

  1. a принадлежит main
  2. Создается a.clone и одалживается в inner scope
  3. inner scope делает свои дела и завершается
  4. Rust отбрасывает a.clone
  5. main без проблем использует a, потому что a всегда оставалась в ее владении

Красота. Естественно, это не единственный способ решить конкретно данную проблему, но он четко вписывается в наше небольшое исследование принципа владения и типажей.

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

Конец?


Однозначно нет! Если сравнить Rust с айсбергом, то это даже не его вершина. Если сравнить его с тортом, то это даже не его глазировка. Если же представить Rust как криптовалюту, то это даже не сатоши. Но сегодня я явно не фонтанирую вдохновенными метафорами, так что давайте на этом закончим.

Лично мой опыт использования Rust оказался увлекателен. Кривая его изучения определенно крута, но в то же время пропорции сложности выверены удачно в сравнении с ценностью, получаемой от затраченных на это усилий. Для себя я решил, что без сомнения продолжу свое путешествие по захватывающим ландшафтам этого языка.


Подробнее..

Хождения по собеседованиям, или Как полтора года искать работу в ИТ самоучке

14.06.2021 14:06:00 | Автор: admin

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

Знаете, есть такие особые признаки, известные всем, когда точно понимаешь, что надо линять с текущей работы, ибо уже вилы. Как раз такое приключилось у меня с прошлой работой. В совсем уж подробности вдаваться не буду, но немного все же порефлексирую на тему своих скитаний по рынку труда. Опустим, что происходило уже на прошлой работе (спойлер: новое место работы я нашел), так как меня смело можно укорить в том, что я точно задержался, постоянно откладывая уход, и что все то, что происходило там, вымысел и быть не может. Но, к сожалению, происходило. В общем не будем о плохом. Как написал А. С. Пушкин в стихотворении "Если жизнь тебя обманет", "Что пройдет, то будет мило".


Предыстория

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

Но сразу поступило предложение от ребят из отдела IT от другой ветки бизнеса, которых я знал много лет. У них стала вакантно место сисадмина (или что-то в этом роде, так как по сути ИТ там и не было никогда). Решив все поставить на кон, я согласился по сути сменить профессию на 180 градусов.

Проработав там предостаточно лет (сейчас уже звучит дико), понял, что надо покупать весла и грести оттуда, так как местный "совок" был уже в печенке, и ощущалась постоянная депрессия от нереализованного моего потенциала. На дворе был ноябрь 2019 года, ни про "какой-то там вирус в Китае" никто не был в курсе, и, если бы мне тогда сказали, что поиски новой работы по тем или иным причинам растянутся на полтора года, я нет, не рассмеялся бы, а, подняв бровь, удивился: я настолько никчемен?

Вояж, вояж

Высунув язык, состряпал первое резюме и стал ждать. Вскоре со мной связалась какая-то финансовая контора, которая искала что-то среднее между менеджером, техподдержкой и системным администратором. Даже понимая, что это не мое, решил поглядеть, как же они проводят собеседование. Вся странность данного собеседования заключалась в том, что по телефону сказали, что командировок не будет, но по приезду в их офис в "Москва Сити" (+100500 к пафосу рекрутера), выяснилось, что командировки еще как будут (каждые три недели), и не по Золотому Кольцу, а во Владивосток!

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

Подозрительные запросы

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

В начале 2020 уже вовсю началась пандемия, многие компании закрыли набор и погрузились в тотальный перевод всего и вся на удаленку. Рынок труда ушел в спячку до сентября 2020. И я понял, что попал! Очень скоро я уже нисколько не удивлялся тому, что топовые и небольшие конторы на отклики вообще не реагировали, даже не заходя (а иногда и заходя) в учетки на сайтах типа хаха.ру, а рекрутеры не стучались в Telegram.

Изгнание бесов

Так как у меня свободный английский, то еще я искал возможность работы с экспатами. И тут позвонили из знаменитой антивирусной компании, основанной выходцем из школы КГБ, пригласив меня на должность "младший системный администратор". Я весь такой в волнении, на кураже нельзя же ударить в грязь лицом.

Но после стандартных вопросов и проверки знания английского начинался какой-то цирк. В видео-конференции было 3 человека, а один из них надел наушники только через 10 минут после начала, сказав: "Ой, а вы уже начали?". Все вопросы задавались с таким пренебрежением, как будто они делали мне одолжение. Вы мол вообще никто, и звать вас никак. Например был задан вопрос о неработающем видеопроекторе:

Что будете делать, если проектор сломался, а Евгений Валентинович спешит к нам в офис?

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

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

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

Я уже плохо понимал, что происходит, и где технические вопросы. Под конец тот субъект, который не мог отличить начавшееся собрание от статичной картинки, задал очередной тупой вопрос про монитор, который я уже и не помню, и все с кислыми лицами попрощались со мной. После этого всего, в голове еще долго крутился вопрос "Что это было?". А на следующий день пришел отказ. Наверное, они искали экзорцистов-админов со знанием английского.

Фэшн нот май профэшн

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

Чего умеешь?

Ну, например, автоматизировать люблю на PowerShell.

И чего же ты автоматизировал, дружок-пирожок?

<Пытаюсь рассказать о Windows 10 Sophia Script, и на кой ляд там 12 000+ строк кода>

Нет, а на работе, что конкретно автоматизировал?

Могу показать пример (сейчас уже в разы лучше выглядит) автоматизации выкачивания Adobe Acrobat Pro DC с патчем с FTP-сервера Adobe и распаковки. Просто с FTP-сервера у них маленькая скорость скачивания, ляпнул я зачем-то (это была фатальная ошибка).

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

На этом моменте у меня в голове уже началась предзагрузка экрана смертииз Dark Souls.

Дальше собеседование кубарем покатилось под откос. Мне, конечно же, отказали, хоть до этого на всех 5 собесах их все абсолютно устраивало. Зачем они меня тестировали вдоль и поперек, завалив по сути на 6 собеседовании, которое ничего уже и не решало, остается тайной. Ах, да, открыта ли та вакансия от ноября 2020 года? Да, она все еще открыта.

У нас такой офис!

Поступает звонок от "дочки" зеленого банка. Мило побеседовали, обсудив приблизительно, что я хочу от нового места работы. Дальше хантер начинает рассуждать вслух, что их офис на Кутузовском будет удобен для меня, так как не так далеко ехать. Я еще поддакнул, что видел обзор их офиса на YouTube. На том и порешили, что местоположение офиса мне подходит.

Тут мы переходим к непосредственным обязанностям...

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

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

<сопит, открывая вакансию>
Да, и правда нет ни слова. Ну, и что?
Как что? Ничего, я откликнулся на вакансию, которую бы, зная такие подробности, даже бы не открыл. Разве это не так работает?
Вообще-то вы первый, кто обратил внимание, что описание не точное. Всех все устраивало.
Да позвольте! Вы неточное описание даете и завлекаете людей. Вы можете исправить, дополнив пункт о разъездах, чтобы будущих соискателей не вводить в заблуждение?
Не считаю нужным.
Почему?
Потому что.
Посыл понял. Всего хорошего.

Отдельно хочется вспомнить забавный момент собеседования в офисе одного модного строительного девелопера в Москве. Я не мог попасть в их собственном центральном офис 7 (семь) минут, стоя под дверью на этаже. Никто ко мне просто не шел, а HR заверяла по телефону, что вот-вот кто-то да и откроет мне. Собеседование прошло нормально, но HR не посчитал нужным, не только впускать соискателя в офис, но и уведомлять его при отказе.

Собеседований было достаточно много, в сумме около 25. На некоторых мне откровенно хамили и оскорбляли (до сих пор не понимаю, какие цели они этим преследовали), на других предлагали работать, выполняя ресурсоемкие задачи на ПК года эдак 2010 даже без SSD-накопителя. На что я только ни насмотрелся. И все это были крупные организации, считающие себя чуть не ИТ-гигантами.

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

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

Подробнее..

Звонил сотрудник банка. Действовал уверенно и по алгоритму

15.12.2020 02:07:06 | Автор: admin
История эта про телефонное мошенничество, когда вам звонит сотрудник банка. Возможно кому-то будет полезно узнать, как они действуют, кого-то развлечет.

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

Звонок раздался вечером, когда большинство людей возвращаются после работы уставшие, а значит их сознание не столь ясное. Услышать подобного сотрудника банка для меня было не впервой, однако в прежние разы удавалось послать на первых минутах, а тут степень напора и убедительности была достаточно высока, что не было шанса. Да и проснулась я недавно тянуло поговорить. ФИО и названия компаний изменены, что пропустила мимо ушей, не поняла мути, забито троеточием.

Здравствуйте, это Ивана Ивановна? послышился в трубке голос несколько издалёка.
Ну гм да.
Я сотрудник ВсемИзвестногоБанка Петров Петр Петрович. Наш разговор записывается. По вине бывшего сотрудника произошла утечка данных. С вашей карты был совершен перевод на имя Сидорова Сидора Сидоровича. Наша служба безопасности посчитала его мошенническим и заблокировала средства. Мы хотим Вы можете посмотреть, когда последний раз совершали перевод с вашей карты?
Да.

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

Знаете, вот я сейчас смотрю и не вижу никаких переводов.
Это значит, что наша служба безопасности хорошо работает. Когда вы последний раз совершали платеж с карты?
А какой, если их несколько?
Вы не теряли карты? Петр уводит разговор в сторону, видимо пытаясь добавить больше стресса в мозг Иване.
Нет, вроде все при мне. ответила она, фантазируя на предмет потери виртуалки.
Когда вы совершали последний платеж?
Неделю назад?
Какой баланс на карте.
Триста рублей.
Так, записываю: триста рублей.
У вас есть еще карта?
Есть.
Сколько на ней средств?
А какая карта, какую вы имеете в виду? Ивана Ивановна начинает агрессировать. Она ждет, когда мошенник начнет спрашивать номер карты, и вот тут-то она ему покажет номер. Но развод пошел в разрез ее ожиданиям.
Карта типа Виза.
Ну 3 тысячи.
У вас есть лицевой счет?
Какой? спросила любительница разводить зоопарк счетов.
Ваш лицевой счет. Обязательно должен быть лицевой счет, он заводится когда выдают карту.
Ну есть.
Сколько на нем средств?
Ну 5 тысяч. А зачем вы спрашиваете суммы, я же их говорю не точно?
Так вы говорите точно, это нужно чтобы застраховать ваши средства

Ивана просит перезвонить ей через 5 минут, объясняя Петру, что ей надо пробить номер, с которого он звонит, с целью узнать, действительно ли он принадлежит ВсемИзвестномуБанку. На что Петр нивелирует, дескать, у него сейчас открыта эта заявка, и если он ее закроет, то перейдет к следующей, связаться с ним уже не будет возможности. Опять напоминает, что разговор записывается.

Однако я вам могу прислать смс с номера Цифра00. Вы знаете номер Цифра00?
Знаю, это номер ВсемИзвестногоБанка.
Вот. Сейчас придет смс. Там будет написано, что сообщение не от службы безопасности. Я сотрудник технического отдела. На службу безопасности вы будете переведены после разговора со мной.

Действительно, приходит смс с номера банка:
Это сообщение не от службы безопасности. Вы указали этот телефон при оформлении страхового полиса в ХатаЩелк. Подтвердите оформление и согласие с обработкой персональных данных и условиями страхования. Код: xxxxxx. Никому его не сообщайте.

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

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

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

У вас есть кредитные карты?
Нет.
Дело в том, что с вашего единого лицевого счета был совершен платеж в ДругойБанк в размере 9 тысяч на имя ...?
Какого такого единого лицевого счета? Нет никакого единого лицевого счета.
Есть. Вы просто никогда не пользовались им. Там отражена совокупность всех ваших средств. Именно с него был совершен платеж в ДругойБанк. Наша служба безопасности сработала так, что вам надо зайти в личный кабинет и совершить обратный платеж, ..., чтобы отменить платеж. Вы зашли?
Ага.
Видите вкладку Кредиты? Нажмите. Что у вас там написано.
Ничего не написано.
Нажмите взять кредит.

Тут неустойчивая нервная система Ивановой вышла из себя в конец. Дальнейший перебрех запомнился невнятно. Она поставила в известность сотрудника банка, что номер, на который он звонит, не используется ею для ВсемИзвестногоБанка, что данные у него устаревшие. Спросила, знает ли он ее фамилию и место проживания. Да, он знал фамилию и область проживания.

Мы с вами разговариваем почти 30 минут! вдруг раздраженно заявил Петр. Вы отказываетесь от фиксации ваших средств?!
Ага!

Итак, что же делал сотрудник банка? Вероятно, проверив мою платежеспособность, попытался взять кредит на сумму побольше, с которого я совершила бы перевод. С одной стороны, сложно представить, что на это можно повестись. Если мне и звонил сотрудник банка, то только с предложением кредита, карты или открытия депозита.

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

Как взломать систему безопасности с помощью датчика температуры DHT11, а все произошло из-за птичек и вышек 5G

01.04.2021 22:22:46 | Автор: admin
фильм Робот 2.0

Кинематограф стал неотъемлемой частью нашей жизни. Сопереживая героям, мы слово проживаем вторую жизнь, смотрим на мир глазами героев, начинаем смотреть на некоторые вещи иначе. Иногда для упрощения или достижения некоторых сюжетных сцен, режиссеры и сценаристы идут на допущения, которые в нашей жизни невозможны. Но во вселенной фильма, нет ничего невозможного. Могли ли Вы себе представить, что с помощью температурного датчика DH11, который подключается к Arduino, можно в легкую взломать систему безопасности? А вот во вселенной индийского фильма Робот 2.0, 2018 года это возможно.

Фильм Робот 2.0 повествует о душераздирающей истории о пагубном влияние вышек 5G на птичек. Когда давным давно, во время отсутствия мобильной связи и Интернета, в Индии была идиллия, люди жили в гармонии с природой. Но все изменилось с приходом мобильной связи. Пакши Раджана, орнитолог, большой любитель птичек, выяснил, что оказывается вышки 5G в мозгу птичек ломают систему навигации, и они дезориентированные, камнем летят в сторону земли и разбиваются в лепешку. Очень печальная история. Орнитолог попытался призвать людей прекратить пользоваться мобильными телефонами, но кто его послушает, людям гораздо важнее поставить лайки, сделать репосты, селфи. А птички, да кому они нужны. В общем, для защиты природы Пакши Раджан решил избавить мир от телефонов и заодно и от людишек.

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

Увидев таких прекрасных роботов, власти тут же отдали госконтракт профессору Васигарану. Но госконтракт рассчитывал получить другой ученый Дхинедра. Он проник в научный центр, в котором хранилась пирамидка с запакованным орнитологом, отключил видеокамеры наблюдений, и с помощью температурного датчика DHT11 подобрал секретный ключ для открытия хранилища.

Датчик DHT11 прикрепленный в терминалу ввода пин-кода:
фильм Робот 2.0

Идет напряженный взлом:
фильм Робот 2.0

Все, подобрали пароль, а красная лампочка даже и не моргнула:
фильм Робот 2.0

Датчик скорее всего был куплен в известном китайском магазине.
Идентифицируется по признакам: голубому цвету пластикового корпуса, трем контактам, и наличию красной лампочки.

Страничка покупки датчика:
DHT11

Датчик DHT11:
фильм Робот 2.0 DHT11

DHT11 цифровой датчик замера влажности и температуры, второй по популярности после DS18B20, состоящий из термистора и емкостного датчика влажности. Также датчик содержит в себе АЦП для преобразования аналоговых значений влажности и температуры. Датчик DHT11 не обладают высоким быстродействием и точностью, но зато прост, недорог и отлично подходят для обучения и контроля влажности в помещении.

Фрагмент взлома системы безопасности из фильма можно посмотреть на 0:58 минуте (Youtube не дает залить ролик).

Вот и все!

А какие сцены с компьютерными приколюхами, Вам больше всего запомнились в фильмах?
Подробнее..

Как я создал лучший colorpicker

18.01.2021 18:09:31 | Автор: admin

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

Начнём с самого начала. Создаём базовую HTML-разметку:

<!doctype html><html lang="en"><head>    <meta charset="UTF-8">    <meta name="viewport"          content="width=device-width, user-scalable=no, initial-scale=1.0, maximum-scale=1.0, minimum-scale=1.0">    <meta http-equiv="X-UA-Compatible" content="ie=edge">    <title>Document</title></head><body>    <div id="app">        <header>            <h1 id="title">Color Picker</h1>        </header>    </div>    <div id="colors-block"></div></body></html>

Далее надо вывести все цвета. Я решил выводить их на PHP, чтобы пользователь после открытия страницы уже видел палитру, а не ждал, пока это отрендерится у него на клиенте. Выводить решил в шестнадцатеричном варианте. Для этого делаем 6 вложенных циклов for и выводим блоки 1x1 px.

Код
<?php$color = '';        for($i=0;$i<15;$i++) {            $a = $i;            switch($i) {                case 10:                    $a = 'A';                    break;                case 11:                    $a = 'B';                    break;                case 12:                    $a = 'C';                    break;                case 13:                    $a = 'D';                    break;                case 14:                    $a = 'E';                    break;                case 15:                    $a = 'F';                    break;            }            for($j=0;$j<15;$j++) {                $b = $j;                switch($j) {                    case 10:                        $b = 'A';                        break;                    case 11:                        $b = 'B';                        break;                    case 12:                        $b = 'C';                        break;                    case 13:                        $b = 'D';                        break;                    case 14:                        $b = 'E';                        break;                    case 15:                        $b = 'F';                        break;                }                for($k=0;$k<15;$k++) {                    $c = $k;                    switch($k) {                        case 10:                            $c = 'A';                            break;                        case 11:                            $c = 'B';                            break;                        case 12:                            $c = 'C';                            break;                        case 13:                            $c = 'D';                            break;                        case 14:                            $c = 'E';                            break;                        case 15:                            $c = 'F';                            break;                    }                    for($l=0;$l<15;$l++) {                        $d = $l;                        switch($l) {                            case 10:                                $d = 'A';                                break;                            case 11:                                $d = 'B';                                break;                            case 12:                                $d = 'C';                                break;                            case 13:                                $d = 'D';                                break;                            case 14:                                $d = 'E';                                break;                            case 15:                                $d = 'F';                                break;                        }                        for($m=0;$m<15;$m++) {                            $e = $m;                            switch($m) {                                case 10:                                    $e = 'A';                                    break;                                case 11:                                    $e = 'B';                                    break;                                case 12:                                    $e = 'C';                                    break;                                case 13:                                    $e = 'D';                                    break;                                case 14:                                    $e = 'E';                                    break;                                case 15:                                    $e = 'F';                                    break;                            }                            for($n=0;$n<15;$n++) {                                $f = $n;                                switch($n) {                                    case 10:                                        $f = 'A';                                        break;                                    case 11:                                        $f = 'B';                                        break;                                    case 12:                                        $f = 'C';                                        break;                                    case 13:                                        $f = 'D';                                        break;                                    case 14:                                        $f = 'E';                                        break;                                    case 15:                                        $f = 'F';                                        break;                                }                                $color = "#{$a}{$b}{$c}{$d}{$e}{$f}";                                                                echo '<div class="color__item" style="width:1px; height:1px;background:'.$color.';"></div>';                                $color = '';                                                            }                        }                    }                }            }        }

Если i>=10 то заменяем на символ из шестнадцатеричной кодировки.

В итоге через пару минут ожидания я решил выключить пылесос, который почему-то лежал включенный. Но оказалось, что это не он, а кулер моего ноутбука. Я понял, что, видимо, вывожу сразу слишком много цветов, поэтому решил выводить только первые 10 000 цветов для тестирования. Получилась такая красота:

Неплохо, но попадать по цветам, слишком неудобно. Поэтому увеличим размеры "пикселей"

Отлично! Но есть одна проблема: здесь только синий цвет, но хотелось бы получить побольше. К сожалению, мой слабенький ноут не может отобразить всю палитру сразу, несмотря на то, что я не использую даже сторонних плагинов. Поэтому я решил выводить различные палитры для основных цветов в зависимости от GET-параметра. Для этого создаем меню:

<header>  <h1 id="title">Color Picker</h1>  <nav>    <ul>      <li><a href="?x=blue">Blue colors</a></li>      <li><a href="?x=green">Green colors</a></li>      <li><a href="?x=red">Red colors</a></li>    </ul>  </nav></header>

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

<?php$x = $_GET['x'];if ($x == 'red') {$color = "#{$e}{$f}{$c}{$d}{$a}{$b}";} elseif ($x == 'green') {$color = "#{$a}{$b}{$e}{$f}{$c}{$d}";} else {$color = "#{$a}{$b}{$c}{$d}{$e}{$f}";}$q++;if ($q <=10000) {  echo '<div class="color__item" style="width:2px; height:2px;background:'.$color.';"></div>';  $color = '';}

Что получилось:

Остальные палитры доработаю чуть позже или можете доработать их сами!)

Теперь нам нужно непосредственно сделать выбор цвета и сохранение его в элемент формы. В HTML добавляем такой код:

<h3>Selected Color:</h3><div id="selected-color"></div><input type="hidden" id="color" name="color" value="rgb(255,255,255)">

А вот так выглядит JS:

document.querySelectorAll('.color__item').forEach((item, i, arr) => item.onclick = (e) => {document.querySelector('#selected-color').style.background = e.target.style.background; document.querySelector('#color').value = e.target.style.background});

Отлично! Теперь на все цвета вешается обработчик клика и выбранный цвет записывается в наш input[type='hidden'], который можно будет передать с остальной формой. Также мы показываем выбранный цвет пользователю

Безопасность

Не забудем и о безопасности. Так как название палитры передается как GET-параметр и обрабатывается нашим PHP, то есть вероятность XSS-инъекции! Чтобы защититься от инъекции, я позаимствовал код из этой статьи: http://personeltest.ru/aways/habr.com/ru/post/470193/ Автор показал очень простой и эффективный способ защиты, так что не будем городить костыли и воспользуемся им. Код вставлять сюда не буду, т.к. он идентичен коду в той статье, поэтому не буду дублироваться.

Теперь при открытии страницы появляется ошибка: <b>Call to undefined function mysql_real_escape_string()</b>. Я сначала хотел просто удалить эту строку, но подумал, что если кто-то из вас будет пользоваться моим кодом, то наверняка у вас будет работа с базой данных, поэтому проблему нужно решить.

Я вспомнил, что mysql в PHP устарел, и надо использовать mysqli. Поэтому соответствующим образом исправил вызов функции.

Умная IDE подсказывает, что не хватает обязательного параметра. Поэтому вторым аргументом я просто добавил true. Я нередко видел, как вторым аргументом передают булево значение. Например, в json_decode()

Однако, это не сработало, появился warning, говорящий, что аргумент должен быть строкой. Пришлось обернуть true в кавычки, и это, конечно же, помогло.

$v = mysqli_real_escape_string( $v, 'true' );

Однако, теперь ругается на первый аргумент, говоря, что аргумент должен быть объектом mysqli(), поэтому вместо "$v" я передал "new mysqli()". Он опять начал ругаться на что-то, но у меня плохо с английским, и я не понял суть. Поэтому решил забить и просто закомментировать строку. Скорее всего это баг из-за того, что PHP8 вышел лишь недавно, и многое работает криво.

Зато от XSS мы теперь защищены!

Запоминание цветов

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

<div id="save-color-block"><button id="save-color__button">Запомнить мой цвет</button></div>

Как и говорил, у меня плохо с английский языком, и я не знаю как переводится "запоминать". Поэтому, написал по-русски (приношу извинения перед англоязычными пользователями моего кода (I am sorry)).

Теперь будем сохранять данные на сервере по клику на кнопку. Для этого пользователь должен будет ввести любой ключ по которому можно будет в будущем извлечь его цвет. Для ввода ключа воспользуемся функцией prompt(), т.к. самописные модальные окна - зло, и они пользователей бесят. Затем, для отправки на сервер будем использовать fetch - никаких jQuery, axios и т.п. Ведь наша задача сделать код простым и производительным, который поддерживать и использовать будет приятно.

Код получился вот таким:

document.querySelector('#save-color__button').onclick = () => {  const color = document.querySelector('#color').value;  const key = prompt('Write your key:');  const formData = new FormData();  formData.append('key', key);  formData.append('color', color);  fetch('save-color.php', {    method: 'POST',    body: formData  }).then((response) => {    if (response.status === 200) {      alert('success!');    } else {      alert('error!');    }  })

Теперь нам нужно создать файл "save-color.php". Код его будет крайне простым

<?php$key = $_POST['key'];$value = $_POST['color'];file_put_contents($key.'.txt', $value);

Вот и всё! Теперь мы можем просто вбить в адресную строку mydomain.ru/{key}.txt и увидеть цвет, который мы выбирали!

Заключение

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

Ну и напоследок

/sarcasm

Подробнее..

Однобитный компьютер

01.04.2021 02:05:37 | Автор: admin

Картинка для привлечения внимания:

Внимание! Под катом много картинок!

В этой статье будет краткое описание проектирования и создания однобитного компьютера. Всем кто заинтересовался, добро пожаловать под кат:

Нудная предыстория

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

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

https://ru.wikipedia.org/wiki/Радио-86РК

Это все перевернуло в моей голове, повлияло на всю мою дальнейшую жизнь. Из устройства, которое работает на какой то магии, оно превратилось в устройство, очень сложное, но, теоретически реализуемое. К тому времени я уже паял вырванные провода из стационарных телефонов, и периодически натыкался на микросхемы серии К155. Мой неокрепший мозг, рисовал иллюзию того, что стоит побольше найти разных микросхем, поднабрать опыта и я исполню свою мечту и соберу себе компьютер. Движимый этим я начал изучать литературу по работе логических схем, работу ассемблера, записался в кружок - радиолюбитель, а позже, поступил в ПТУ на радиомонтажника.

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

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

Переломный момент

С самого начала у меня была какая то тактика и я ее придерживался. Но все изменило одно видео:

Процессор 6502! реализованный дискретными компонентами! Этот легендарный процессор использовался не только в NES (Денди), но и в роботах модели Bender "Сгибатель":

https://ru.wikipedia.org/wiki/MOS_Technology_6502

Меня настолько задело это видео, и реальность создания процессора и компьютера, пусть и в более простом варианте, что я начал изучать эту тему, и наткнулся на следующий вариант:

http://www.megaprocessor.com/

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

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

Это одно из видео, на самом канале все остальное:

Проектирование

Для реализации проекта я выбрал самый простой вариант компьютера : 1-битный. Ввод данных с помощью выключателей, отображение результатов с помощью светодиодов. Из операций, решено сделать только сложение. Чтобы сложить два числа, необходимо 2 регистра для операндов. Чтобы результат не затирал исходные данные, необходимо еще 1 или 2 регистра для результатов. В первый регистр заносится результат сложения, во второй флаг переноса (переполнения), если результат оказался больше 1 бита. Чтобы уменьшить размер компьютера, я выбрал один регистр для результата сложения, а вот что в него заносится, результат или флаг переноса, будет определяться данными инструкции. Чтобы результат не затерся, его необходимо перенести в основную память. Основная память у нас будет из 2 ячеек, т.е. ширина шины адреса - 1 бит.

Теперь посчитаем команды:

  • Занести данные в первый регистр

  • Занести данные во второй регистр

  • Сложить и результат (или перенос) в третий регистр

  • Перенести из третьего регистра в память

В принципе мы укладываемся в 2 бита команды + 1 бит данных. Но после этого данные невозможно никуда перенести. Наша оперативная память становится только для записи. Поэтому я решил сделать 3 битные команды + 1 бит данных, добавив дополнительные инструкции для перемещения из памяти в регистры и обратно.

В итоге наш компьютер имеет следующий характеристики:

  • 1-разрядный процессор

  • Ширина шины данных : 1 бит

  • Ширина шины адреса : 1 бит (адресация до 2 бит)

  • 3 регистра общего назначения (A, B, C)

  • Размер инструкции : 4 бита (3 бита команда + 1 бит данных)

  • Время выполнения инструкций - 1 такт

  • Тактовая частота ограничена скоростью нажатия оператора

  • Питание : +5 вольт

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

Вот общая схема:

Компьютер состоит из функциональных блоков:

  • DecodeUnit - Это блок, который расшифровывает команду, и в зависимости от нее, включает или отключает какой либо блок или переводит его в какой либо режим, например чтение или запись

  • Ram - Контроллер памяти, он включает нужную ячейку памяти, в зависимости от шины адреса

  • Bus - Контроллер шины данных. Активные блоки просто пишут туда или читают оттуда данные

  • Alu - Арифметико-логическое устройство. Блок, который может складывает два числа

  • Cell 0, 1 - Ячейки памяти

  • Register A, B, C - Регистры процессора

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

DecoderUnit внутри выглядит вот так:

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

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

https://pastraiser.com/technology/nmos/basicnmosgates.html

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

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

Кстати, вот так выглядит наш регистр:

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

Совершенно случайно мне попался под руку сервис https://easyeda.com.

Это полный цикл проектирования печатных плат, и заказ их в сервисах, например в https://jlcpcb.com. Но, позже оказалось, что бесплатная доставка там только для первого заказа, а потом полная и цена ее, ну, точно не для прототипирования своих маленьких проектов, мне кажется заказать у нас будет дешевле.

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

Размеры плат при заказе кратны 100 на 100 мм, и цена соответственно увеличивается скачками, поэтому все блоки спроектировал в рамках этого квадрата.

Минимальное количество плат одного типа - 5 штук, а у меня как раз 5 регистров, поэтому плату регистров сделал универсальную, с перемычками.

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

Схема регистра:

Разводка регистра:

Ну и плата которая ко мне приехала:

А вот и первые попытки спаять это все:

За качество извиняюсь, фоткал на свой предыдущий проект.

Еще картинок

Послесловие

Теперь можно подвести итоги, что было сделано, что потрачено, сколько это стоило:

  • Сбывшаяся мечта - 1 штука

  • Потраченное время - 1 месяц

  • Инструменты и расходники, приблизительно - 6832 руб 12 копеек

  • Электронные компоненты - 2140 руб

  • Заказ плат - 1600 руб

  • Доставка плат - 1601 руб

  • Рекламная компания - 0 руб

Всем спасибо за внимание!

Подробнее..
Категории: Diy или сделай сам , Diy , Юмор

Очень трудно искать чёрную кошку в тёмной комнате, особенно, если там её нет

20.04.2021 16:13:49 | Автор: admin


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

После уточнения всех её хотелок и нескольких экспериментов были сформированы примерные требования к проекту видеосъемка для интернета:
  1. Съемка видео должна выполняться с использованием штатива (в противном случае на видео заметны движения оператора)
  2. Требуется поворотный стол для экспозиции небольших предметов (так как камера располагается на штативе, а необходимо показать изделия со всех сторон).
  3. Съемка должна вестись на камеру мобильного телефона, т.к. одно из мест для публикации, это Instagram, в котором опубликовать видео можно только с мобильника

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

Внимание, дальше картинки и видео!

Первый подход


У меня давно пылится на полке без дела старый циклоп 3D сканер, который уже имеет круглый поворотный стол подходящего размера.



Изначальная конструкция сканера рассчитана на ручную сборку, поэтому за пару вечеров он превратился вот в такой компактный вращающейся предметный столик.



В моей версии сканера используется кастомная плата, аналогичная плате Ардуино Nano, но на ней дополнительно установлен драйвер шагового двигателя и ключи для управления лазерами.

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

За исходник сейчас не ручаюсь, может быть там были и другие таймауты, но суть в том, что это простейший код, в котором нет ничего интересного
#include <Arduino.h>#define DIR 13#define STEP 12#define ENABLE 9void setup() {  pinMode(DIR, OUTPUT);  pinMode(STEP, OUTPUT);  pinMode(ENABLE, OUTPUT);    digitalWrite(ENABLE, LOW);  digitalWrite(DIR, LOW);}void loop() {    digitalWrite(STEP, LOW);    delayMicroseconds(1);    digitalWrite(STEP, HIGH);    delayMicroseconds(3000);}



Интересное началось после съемок первых видеороликов. На видео видно неравномерное вращение предметного стола, которые создают неприятные дергающие эффекты.



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

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

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

Второй подход


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

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


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

Получилось вот такая конструкция:





Правда в итоге, толку от такого решения тоже оказалось не много.

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

В результате от вариант с самодельным редуктором пришлось отказаться.

Тут у меня уже включился азарт, и захотелось сделать вращающийся стол во что бы то ни стало. И если не рассматривать замену шагового двигателя или покупку редуктора, то выбор остался не велик, или попробовать доработать ПО с принципиальной схемой привода, в надежде, что удастся сделать ход шагового движка на низких оборотах более плавным (например, за счет коммутации нескольких обмоток одновременно или использования ШИМ), или установить какой нибудь демпфер для сглаживания возникающих колебаний.

Третий подход


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



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

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

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



Такая конструкция с одной стороны допускает небольшой люфт и не дает предметному столу заметно дергаться, а большая масса шарикоподшипника гасит небольшие колебания.

Эпик фейл


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

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



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

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


Эпилог


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

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

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

Причуды обратной совместимости

01.01.2021 14:13:32 | Автор: admin

Вряд ли кто-нибудь слышал об операционной системе DOS-777. А такая реально существовала. Правда, в действительности это была самая обычная MS DOS с незначительными изменениями, предназначенная для работы на единственном компьютере и выполнения одной единственной программы. Своим появлением этот клон в некотором роде обязан проблеме обратной совместимости. Но обо всем по порядку.

Новая и важная программа вдруг повела себя совершенно загадочным образом. Это настолько взбесило ее авторов, что было решено дисассемблировать MS DOS, разобраться в нюансах ее работы и найти причины странных ошибок. Сейчас, даже в запальчивости, вряд ли кто-то решится дисассемблировать, например, Windows-10 и разобраться во всех ее особенностях. Но тогда, в начале 90-х, когда ОС представляла собой три сравнительно небольших файла, их дисассемблирование и анализ заняли недели две.

Было обнаружено множество мелких особенностей, которые вряд ли кому-то сейчас интересны. Но в те времена по результатам этого анализа можно было даже заполнить недостающими названиями поля внутренних таблиц MS DOS, которые в одной из книжек серии Библиотека системного программиста под редакцией Фроловых (издательство Диалог МИФИ) были обозначены как зарезервированные.

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

Нюанс первый. Самые ранние резидентные программы, например, SideKick, прямо по контексту команд внутри MS DOS искали адрес внутреннего флага занятости ОС. В следующих версиях этот контекст изменился, да и появилась документированная функция запроса флага, но несколько старых команд были специально перенесены в сегмент данных (на них управление не попадало), чтобы древние программы по-прежнему находили нужный контекст. На ум приходит аналогия со спуском нового корабля, получающего имя легендарного предшественника. Тогда по традиции из старого корпуса вырезается плита и крепится как мемориальная доска на новом корабле. Так вот, все версии MS DOS несли на борту маленький кусочек самой первой версии 1981 года.

Следующий нюанс был любопытнее. Оказалось, что перед запуском любого EXE-файла MS DOS проверяет среди его команд определенный контекст в определенном месте. Если он там находится ОС слегка раздвигает соседние команды и добавляет команды PUSH CX и POP CX.
Поскольку в контексте присутствовала команда LOOP, очевидно, это исправление ляпа какого-то разини из MicroSoft, забывшего, что цикл портит этот регистр. Рекламный слоган: в новой версии MS DOS даже старые программы работают лучше! заиграл неожиданными красками. Мы не пробовали искать, какая поделка MicroSoft исправляется таким образом, зато были предложения написать свою программу с ассемблерной вставкой так, чтобы нужный код попал в нужное место. По мысли автора предложения, далее нужно всего лишь иметь зависимость от содержимого CX. Когда MS DOS вставит ненужную POP CX, поведение программы изменится, можно тащить MicroSoft в суд за вредоносные действия и трясти с нее миллионы. Но поскольку предлагавший это по судам никогда не ходил и адвокатов (тем более, американских) не нанимал, дальше трепа в курилке дело не пошло.

И, наконец, третий нюанс, который, как выяснилось, и был причиной ошибок. Это работа с двадцатой адресной линией. Для молодого поколения, которое, к счастью для себя, не сталкивалось с подобными вещами, вероятно, потребуется объяснение. Первоначальный вариант персонального компьютера с процессором 8086 имел соединение с оперативной памятью двадцатью адресными линиями. Сам адрес вычислялся в команде сложением двух частей: т.н. сегмента (16 старших бит из 20) и т.н. смещения (16 младших бит из 20). Таким образом, формально можно задать две части, сумма которых больше, чем два в двадцатой степени (максимального адреса). Но ничего страшного не происходило. Перенос из последней 19-ой линии (они нумеруются с нуля) просто пропадал и получался адрес в первых 64 килобайтах.
Когда примерно в 1986 году появились 32-х разрядные процессоры и компьютеры, число адресных линий увеличились до 30 (а не до 32, поскольку нулевая и первая линии стали внутренними). Короче, появилась нормальная двадцатая адресная линия и никакого заворота в младшие адреса уже не получалось.
Лично я никогда не видел в программах использования трюка с заворотом. Если такие и были, это уж совсем какая-то седая древность и дурной стиль. Но в Америке неизвестно кто для совместимости с неизвестно чем, вдруг так озаботился надуманной проблемой, что для 20-ой линии в компьютеры была добавлена электрическая схема, позволяющая ее обнулять! Прямо так и говорилось: включить и выключить двадцатую линию.

А это было время, когда дурость одного деятеля, заявившего, что 640 Кбайт хватит на все задачи становилась все яснее и яснее. Появились всякие памяти expanded, а как раз из-за двадцатой линии появился 64-х килобайтный уютный чуланчик в памяти выше мегабайта, на который первой лапу наложила сама MicroSoft и поместила туда MS DOS, немного освобождая, тем самым, пресловутые 640 Кбайт.

При этом работа с двадцатой линией внутри MS DOS заставила вспоминать поговорку про дурака и писаную торбу. При обращении к функции DOS эта адресная линия, естественно, включалась самой ОС, чтобы получить управление выше мегабайта. А при выходе из функции DOS эта линия Думаете, восстанавливала исходное состояние? Выключалась? Включалась? Мы тоже так думали и не угадали. Оказалось, что при первом обращении к DOS и возврате в программу двадцатая линия отключалась, а при последующих обращениях (т.е. обращениях из программы с тем же PSP) оставалась включенной. Это и сбило всех с толку и при отладке (а отладчик сам обращался к функциям DOS) осталось незамеченным. А поскольку важная программа требовала много памяти для команд и данных и сама располагалась выше мегабайта, то неожиданное отключение у нее одного бита в адресе приводило к самым разнообразным эффектам.
Выход был простой: при старте один раз обратиться к DOS, например, запросить номер версии, затем включить двадцатую линию и забыть о ней как о страшном сне.

Поэтому никакой специально исправленной DOS, как мы сначала опасались, создавать не потребовалось. Но поскольку было жаль уже потраченных двух недель, вместо штатной DOS все же был использован ее клон, который вообще не дергал эту чертову двадцатую линию и имел еще несколько мелких улучшений. Этот клон и получил название DOS-777 по номеру отдела, где все это происходило.
На мой взгляд, есть и еще худшее решение о совместимости, чем фокусы с двадцатой линией. Это регистры команд MMX, совмещенные с регистрами FPU. Я читал такое объяснение этому архитектурному решению: при переключении задач, ОС запоминает контекст остановленной задачи, в том числе регистры FPU. При использовании MMX, они автоматически также будут запоминаться и восстанавливаться.

По-моему, это решение не выдерживает никакой критики: к моменту, когда реально появились программы с MMX, сменилось несколько версий (чуть не поколений) ОС, например, той же Windows. Проще было объявить, что до такого-то номера версии одновременно несколько задач с MMX работать не будут. Вместо этого теперь на веки-вечные MMX и FPU мешают друг другу. И всего лишь из-за попытки совместимости с какими-то старыми Windows времен, когда еще не было MMX, и про которые все уже давно забыли.

Таким образом, проблема обратной совместимости объективно существует, и решать ее иногда приходится. Но если в первых двух приведенных примерах решение было остроумным, и главное, скрытым для пользователей, которым эта совместимость ни к чему, то в двух последних примерах попытка совместимости (на мой взгляд, надуманная!) привела к вычурным аппаратным решениям и породила проблемы. Причем совместимость уже тогда гораздо лучше и проще обеспечивалась специально разработанным режимом виртуального 8086.

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

Подробнее..

Программистское везение

08.01.2021 14:08:13 | Автор: admin

Более двух десятков лет назад мы разрабатывали устройство, передающее и принимающее данные, используя телевизионный сигнал. Это сейчас все избалованы гигагерцами и гигабайтами, а тогда, имея компьютер типа IBM/PC-AT, на таких скоростях можно было работать только с помощью встроенного контроллера прямого доступа к памяти (ПДП), реализованного в виде микросхем 8237А-5. Это устройство позволяло писать или читать данные, не привлекая центральный процессор.

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

И вот, при заключительном просмотре текста, я вдруг увидел глупую описку в программировании ПДП. Адрес в 16-разрядной 8237А-5 приходилось задавать по частям и при задании номера станицы (т.е. номера куска памяти в 128 Кбайт) вместо команды

OUT DX,AL

было написано

OUT DX,AX

что совершенно бессмысленно, поскольку все используемые в ПДП порты 8-разрядные.
Исправил ляпсус, перетранслировал НЕ работает! Вернул опять бессмысленный AX вместо AL работает. Не может быть!

Начинаю рассуждать. Команда OUT выполняется ведь подобно обычной записи в память, только специальный сигнал INOUT на шине выставляется. Следовательно, если вместо AL я выдаю AX, то это равнозначно тому, что я в один порт (в данном случае 83H) выдаю значение из AL, а в соседний, т.е. получается в 84H значение из AH, а там в этот момент просто ноль.
А что это за порт такой? Вот же таблица всех портов из тогда единственной имевшейся у нас книги Фроловых Аппаратное обеспечение IBM PC:

Назначение и адреса регистров страниц контроллера для IBM AT:
81h Регистр страниц канала 2
82h Регистр страниц канала 3
83h Регистр страниц канала 1
87h Регистр страниц канала 0
89h Регистр страниц канала 6
8Bh Регистр страниц канала 5
8Ah Регистр страниц канала 7
8Fh Регенерация динамической памяти

Нет вообще здесь никакого порта 84H!

Честно говоря, я и сейчас не знаю, что это такое. Может быть, разрешение на работу данного ПДП из всего каскада, а может какая-то особенность конкретной материнской платы или еще одна часть адреса, позволяющая задать его больше чем 16 Мбайт.
Теперь, в эпоху Интернета, доступа к электронным библиотекам и компьютерным форумам, наверное, несложно докопаться, что именно делала запись нуля в неведомый мне порт 84Н. Но это уже неинтересно, поскольку все эти ПДП (DMA) давно ушли в прошлое вместе с шиной ISA и другими древними интерфейсами.

Однако речь о другом. Какое невероятное, прямо волшебное везение для программиста! Кто толкнул меня под руку написать AX вместо AL и именно в этом месте? Ведь ни в одном примере этого не было. Напиши я как положено AL, и мы провозились бы месяцы, подозревая, конечно, неправильную работу нового устройства, а не настройку ПДП. Да и как догадаться, что нужно обратиться к порту, которого даже нет в документации! А сроки были жесткие и не уложись мы в них, проект вообще был бы закрыт с наклеиванием на нас ярлыка неумех и неудачников.

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

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

Подробнее..

Перевод Дао программирования

08.01.2021 18:05:33 | Автор: admin


Книга 1: Безмолвная пустота


Сказано мастером-программистом: "Уходи, когда поймёшь как найти код ошибки в трап фрейме"


1.1


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


 Если Дао прекрасно  операционная система прекрасна. Если операционная система прекрасна  компилятор прекрасен. Если компилятор прекрасен  приложение прекрасно. Пользователь доволен и в мире царит гармония.

Дао программирования уносится вдаль и возвращается с утренним ветром


1.2


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


Каждый язык имеет свою, порой скромную, цель. Каждый выражает Инь и Ян программного обеспечения. Каждый язык имеет своё место в Дао.
Но, если можете, избегайте писать на КОБОЛе.


1.3


В начале было Дао. Дао дало жизнь месту и врмени. Место и время это Инь и Ян программирования.
Программистам не постигшим Дао, никогда не хватает места и времени для своих программ. Программистам постигшим Дао, всегда хватает места и времени для достижения своих целей.
Разве может быть иначе?


1.4


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


Книга 2: Древние мастера


Сказано мастером-программистом: "После трёх дней без программирования, жизнь становится бессмысленной"


2.1


Программисты прошлого были мудры и непостижимы. Мы не можем понять их мыслей, поэтому мы лишь опишем их.


Внимательные, как лиса переходящая реку.Настороженные, как генерал на поле битвы.Добрые, как хозяйка, принимающая гостей.Простые, как дубовое полено.Непроницаемые, как тёмные пещерные озёра.

Кто знает секреты их сердец и умов?


Ответ есть только в Дао.


2.2


Гроссмейстеру Тьюрингу снилось, что он был машиной. Он проснулся и воскликнул: "Я не знаю, Тьюринг ли я, которому снится что он машина, или машина, которой снится, что она Тьюринг"


2.3


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


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


Они живы в Дао"


2.4


Однажды, ученик спросил мастера: "Вот программист, который никогда не проектирует, не документирует и не тестирует своих програм. Тем не менее, все кто знают его, считают, что он один из лучших программистов в мире. Почему так?"


Мастер ответил: "Этот программист постиг Дао. Он переступил через необходимость проектирования: он не злится, когда система падает, но спокойно принимает вселенную, такой какая она есть. Он переступил через необходимость документирования: он больше не волнуется, что кто-то увидит его код. Он переступил через необходимость тестирования: его программы идеальны сами по себе, простые и изящные, их цели самоочевидны. Воистину он постиг таинство Дао."


Книга 3: Проектирование


Сказано мастером-программистом: "Поздно менять проект на этапе тестирования"


3.1


Один человек пошёл на компьютерную выставку. Каждый день, при входе, он встречал охранника и говорил ему: "Я великий вор, известный своими дерзкими кражами. Будь на чеку: этой выставке не избежать потерь."
Эти слова очень испугали охранника, так как внутри было оборудование на миллионы долларов. Охранник следил за человеком, но тот просто бродил между стендами, тихо бурча что-то себе под нос.
Когда человек вышел, охранник отвёл его в сторону и обыскал. Но ничего не нашёл.


На следующий день, человек пришёл снова и насмехался над охранником: "Вчера я унёс много, но сегодня унесу ещё больше!" Охранник следил за ним ещё пристальней, но опять ничего не заметил.
В последний день, охранник больше не мог сдерживать своего любопытства: "Господин вор! Я весь издёргался. Пожалуйста, просветите меня. Что же вы крадёте?"
Человек ответил с улыбкой: "Я краду идеи."


3.2


Когда-то жил мастер-программист, который писал неструктуированные программы. Ученик, пытаясь подражать ему, тоже стал писать неструктуированные программы. Когда ученик просил мастера оценить его труд, тот раскритиковал его за написание неструктуированных программ: "Что подходит мастеру, не подходит ученику. Ты должен постичь Дао, прежде чем переступить через структуру"


3.3


Жил, при дворе князя Ву, программист. Князь спросил программиста: "Что проще спроектировать: бухгалтерский пакет или операционную систему?"
Программист ответил: "Операционную систему."
Князь удивлённо воскликнул: "Но, ведь, бухгалтерский пакет, очевидно, куда проще операционной системы!"
"Не совсем так, ответил программист, разработчик, проектирующий бухгалтерский пакет, служит посредником между людьми, имеющими разные мнения о том, как этот пакет должен работать, как должны выглядеть отчёты и как всё это соотносится с налоговым законодательством. Операционная система же, напротив, не ограничена внешними проявлениями. Проектируя операционную систему, программист ищет простейшей гармонии между машиной и идеями. Вот поэтому, проще проектировать операционную систему"
Князь Ву усмехнулся: "Это всё очень хорошо, но что из них проще отладить?"
Программист не ответил.


3.4


Начальник принёс документ с требованиями к новому приложению мастеру-программисту и спросил: "Сколько времени займёт проектирование этой системы, если я назначу на проект пять программистов?"
"Это займёт год", не задумываясь, ответил мастер.
"Но, система нужна вчера! Сколько это займёт, если я назначу десять программистов?"
Мастер-программист нахмурился: "В этом случае, проектирование займёт два года."
"А если я назначу 100 программистов?"
Мастер-программист пожал плечами: "Тогда проект никогда не будет закончен".


Книга 4: Кодирование


Сказано мастером-программистом: "Хорошо написанная программа это райское наслаждение. Плохо написанная программа это адские муки"


4.1


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


Программа должна следовать "закону наименьшего удивления". Что это за закон? Просто, программа должна всегда отвечать пользователю так, чтобы удивлять его наименьшим образом.


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


Программа, которая не следует этим правилам, находится в состоянии дисгармонии и хаоса. Единственный способ исправить такую программу, это переписать её.


4.2


Ученик спросил мастера: "У меня есть программа которая иногда работает хорошо, а иногда падает. Я следовал всем правилам программирования и теперь я в тупике. Почему так?"
Мастер ответил: "Ты сбит с толку потому, что ты не понимаешь Дао. Только глупец ожидает рационального поведения от людей. Почему же ты ожидаешь его от машин построенных людьми? Компьютеры лишь симулируют детерменизм. Только Дао совершенно.
Правила программирования преходящи. Только Дао вечно. Так что, ты должен созерцать Дао, пока не достигнешь Просветления."
"Но как я пойму, что достиг его?" спросил ученик.


"Твоя программа перестанет падать," ответил мастер.


4.3


Мастер объяснял природу Дао одному ученику.
"Дао присутствует в любом ПО, даже самом маленьком", сказал он.
"Если ли Дао в карманном калькуляторе?" спросил ученик.
"Есть", был ответ.
"Есть ли Дао в компьютерной игре?" спросил ученик.
"Да, даже в компьютерной игре", сказал мастер.
"Есть ли Дао в ОС DOS для персональных компьютеров?" спросил ученик.
Мастер закашлялся и немного поменял своё мнение. "На сегодня, всё", сказал он.


4.4


Программист царевича Вана писал программу. Его пальцы порхали над клавиатурой. Программа скомпилировалась без единой ошибки и работала как лёгкий ветерок.
"Великолепно! воскликнул царевич. Твоя техника безупречна!"


"Техника? сказал программист, отварачиваясь от терминала. Я следую Дао, которое выше всякой техники. Когда я только начинал программировать, я видел всю проблему целиком. Через три года, я больше не видел её целиком: я стал использовать подпрограммы. Но теперь, я не вижу ничего. Всё моё существо погруженов в бесформенное ничто. Мои чувства спокойны. Мой дух свободно работает без какого-либо плана, следуя только инстинктам. Короче говоря, программа пишет себя сама. Да, иногда встречаются сложные проблемы. Я вижу их приближение, приостанавливаюсь и молча смотрю. Потом, я меняю одну строчку кода и сложности тают, как утренний туман. Затем, я компилирую программу. Я спокойно сижу и позволяю наслаждению от работы наполнить всё моё существо. Прикрыв глаза на мгновение, я завершаю сессию."


Царевич Ван воскликнул: "Если бы только, все мои программисты были бы столь же мудры!"


Книга 5: Сопровождение


Сказано мастером-программистом: "Даже если программа состоит из трёх строчек, рано или поздно, её придётся сопровождать"


5.1


Часто используемая дверь, не нуждается в смазке.Быстрый поток не зарастёт тиной.Олень незаментен в лесу.Программы гниют если их не используют.

Это великие тайны.


5.2


Начальник спросил программиста, когда будет готова программа, над которой тот сейчас работает. "Завтра будет готово", ответил программист.
"Мне кажется, что ты не реалистичен, сказал начальник, Серьёзно, когда будет готово?"
Программист задумался на секунду. "Я бы хотел добавить пару фич. Это займёт не меньше двух недель", заключил он.
"Даже это звучит слишком оптимистично, настаивал начальник, я буду вполне доволен, если ты просто сообщишь мне когда программа будет готова."
Программист согласился.


Через несколько лет, начальник ушёл на пенсию. По дороге на прощальный ужин, он увидел того программиста, спящим за своим терминалом. Он программировал всю ночь.


5.3


Однажды, программисту-ученику поручили написать простой финансовый пакет.


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


Когда мастер спросил об этом, новичок грубо ответил: "Не будьте столь нетерпеливы! Со временем, я добавлю финансовую часть."


5.4


Разве хороший крестьянин не ухаживает за посевами?Разве хороший учитель не замечает даже самого скромного ученика?Разве хороший отец позволяет ребёнку голодать?Разве хороший программст отказывается сопровождать свой код?

Книга 6: Начальство


Сказано мастером-программистом: "Пусть будет много программистов и мало начальников. Тогда все будут продуктивны"


6.1


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

Истинно, это не Дао программирования.


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

Истинно, это Дао программирования.


6.2


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

6.3


Начальник был на гране увольнения, но программист, работавший на него, написал новую программу, которая стала популярной и хорошо продавалась. В результате начальник сохранил работу.
Начальник хотел дать программисту премию, но тот отказался со словами: "Я написал эту программу, потому что я подумал, что это интересная концепция и мне не нужна награда."
Услышав это, начальник заметил: "Не смотря на то, что этот разработчик, занимает маленькую позицию, он понимает настоящие обязанности работника. Надо бы продвинуть его на более высокую должность помощника руководителя!"


Но, услышав это предложение, программист снова отказался: "Я существую чтобы программировать. Если меня повысить в должности, я лишь буду тратить чьё-то время. Можно я пойду? Я там работаю над одной программой."


6.4


Начальник пришёл к программистам и сказал: "По поводу вашего рабочего времени: вам придётся приходит в 9 утра и уходить в 5 вечера." Услышав это, они разозлились, а некоторые, даже собрались тут же уволится.


Тогда начальник сказал: "Ладно, в таком случае, вы можете работать, как вам удобно, но проекты должны быть окончены в срок." Удовлетворённые программисты стали приходить в обед и работать до раннего утра.


Книга 7: Корпоративная мудрость


Сказано мастером-программистом: "Ты можешь показать программу директору, но ты не можешь сделать его компьютерно грамотным"


7.1


Однажды, ученик спросил мастера: "На Востоке, есть огромная древовидная структура. Люди зовут её "Штаб-квартира корпорации". Её форма пухнет от вице-президентов и бухгалтеров. Она издаёт сотни указов, типа "Иди туда!" или "Иди сюда!" и никто не понимает, что имеется ввиду. Ежегодно новые имена появляются на её ветвях без всякой пользы. Как может существовать столь противоестественная сущность?"


Мастер ответил: "Ты видишь эту необъятную структуру и раздражён отсутствием у неё рационального предназначения. Но, разве ты не восхищён её бесконечным вращением? Разве ты не наслаждаешься лёгкостью программирования под её ветвями? Почему же тебя волнует её бесполезность?"


7.2


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


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


7.3


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


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


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


"Знаю, ответил мастер, все распечатки сложены на платформе в вычислительном центре."


7.4


Мастер-программист движется от программы к программе без страха. Никакие изменения в руководстве не могут навредить ему. Его не уволят, даже если проект закроют. Почему так? Он наполнен Дао.


Книга 8: Железо и программа


Сказано мастером-программистом: "Трава не шевелится без ветра. Железо бесполезно без программы"


8.1


Ученик спросил мастера: "Я вижу, что одна компьютерная компания намного больше других. Она возвышается над конкурентами как великан среди лилипутов. Любое из её подразделений легко может быть независимой компанией. Почему так?"


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


8.2


Однажды, мастер-программист шёл мимо ученика. Мастер заметил, что ученик играет в портативную приставку. "Прошу прощения, сказал он, можно мне посмотреть?"


Ученик передал устройство мастеру и приготовился внимать. "Я вижу, тут есть три уровня сложности: лёгкий, средний и тяжёлый, сказал мастер, однако, в каждом таком устройстве есть ещё один уровень, когда устройство не пытается победить человека, но и не позволяет человеку победить себя."
"О, великий мастер! взмолился ученик, Как же мне найти эти таинственные настройки?"


Мастер бросил консоль на пол и растоптал её. Внезапно, ученик обрёл Просветление.


8.3


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


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


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


8.4


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


Программа и Железо, посрамлённые, вернулись домой.


Книга 9: Эпилог


Сказано мастером-программистом: "Пора тебе уходить"

Подробнее..

Если у вас нашли SCRUM

03.06.2021 00:16:55 | Автор: admin

Сразу хочу успокоить. Сегодня SCRUM это уже не так страшно как десять лет назад. Современная медицина достигла невероятных высот. Люди со SCRUM живут полноценной жизнью. Остаются активными членами общества. Главное - своевременно подобрать адекватное лечение.

Шутки шутками, а широкий опыт внедрения данной методологии в России насчитывает (на моей памяти) около 10 лет. Может даже больше. Но до сих пор не стихают споры об опасности SCRUM.

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

Почему SCRUM так заразен?

Большинство внедрений SCRUM начинаются с того, что кто-то по нему где-то работал. Чуть меньше потому, что он слышал о нем что-то. Далее следует экспресс-анализ, в ходе которого человек узнает о спринтах. Смысл видится примерно таким:

  • Берется кучка фич из бэклога и пилится неделю.

  • Программиста никто не дергает.

  • Релиз.

Собственно все. SCRUM продан! Куда уж проще и понятнее?

Ну не PMBoK же внедрять с этими всякими непонятными группами процессов и артефактами к ним. А там еще подъедут ганты, майлстоны и все бизнес загнулся.

Таким образом, крайняя простота базовой механики SCRUM настолько понятна, что практически очевидна. Уже через час появляется тимлид, он же SCRUM-мастер. Тут же нарушая принцип SCRUM о разделении ролей. Но сейчас не об этом.

Именно эта простота проникновения в сознание и есть секрет высокой заразности SCRUM.

Острый SCRUM

Фаза острого SCRUM это первые спринты. Обычно первые три-четыре. Течение болезни можно разделить на два сценария:

  • Есть носитель SCRUM, который пытается забрызгать всех слюной и причинить SCRUM каждому;

  • Инфекция поразила группу лиц. Они объединяются в команду и болеют палатой.

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

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

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

Второй вариант обречен на успех. Острый SCRUM переходит в хронический. Все испытывают эйфорию. Болеть приятно. Родственники приносят апельсины, которыми больные в палате делятся.

Обратите внимание, что успешная пандемия SCRUM в компании начинается при наличии критической массы носителей инфекции. Это крайне важный фактор для профилактики SCRUM.

Хронический SCRUM

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

Обычно, за этим следует лечение народными средствами. Ставится Jira, confluence, gitlab. В периоды помутнения, внезапно завозится Kanban Кто-то начинает гуглить в Ответы mail.ru и оттуда узнает о покер-планировании. Покер но планирование! Игра увлекает всю палату на следующие пару спринтов.

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

Это очередная критическая фаза инфекции. Больные уже не могут иначе. Их жизнь наполнена смыслом страдания от SCRUM. Часто именно в этот момент инфекция вырывается на свободу покидая организм компании. Больные проникают в здоровые организмы новых компаний и цикл инфицирования повторяется.

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

Системный SCRUM

Особый класс прогрессирующего заболевания. Прогноз крайне неутешительный. Пациенты обречены на счастье.

Системный SCRUM, это внедрение концепции в культуру компании. Все процессы компании оказываются поражены. Руководство не просто тоже болеет, а еще и утверждает, что оно самое больное на свете существо!

Симптомы системного SCRUM:

  1. Вы знаете ради чего болеете;

  2. Не отделяете себя от команды;

  3. Вы читали методологию. Неожиданно, да? И регулярно к ней возвращаетесь;

  4. HR при собеседованиях проводит анализ совместимости ценностей компании с ценностями кандидата, где команда - ключевая ценность;

  5. Компания акцентирует внимание на командообразование;

  6. Есть методология интеграции новых сотрудников в команды.

  7. У вас все получается и вас прет от этого.

Заключение врача

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

К счастью, это не сложно. Близким нужно просто слушать этот бред и кивать одобрительно головой.

И прикладывать холодное.

Подробнее..

Перевод Мы всё переписали на HOTLANG, но стартап всё равно провалился

02.12.2020 20:12:10 | Автор: admin
Сегодня завершается наше невероятное путешествие. Но не всё так плохо. После нашего стартапа осталась отличное технологическое наследие и команда, готовая к следующему вызову. По хорошей стартаперской традиции, я публикую этот отчёт, дабы остальные могли научиться на наших ошибках.

Начало


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

Мы говорили с сотнями разработчиков, анализировали тенденции и одержимо читали Hacker News, пока не определили идеальный стек для проекта. Сказать, что мы провели исследование, будет преуменьшением.

Получив достаточное финансирование, мы приступили к работе. Найм персонала фундаментальная часть успеха. Поэтому мы установили высокую планку: на собеседования приглашали только разработчиков с популярными опенсорсными проектами. Главная метрика количество звёзд на GitHub работала замечательно.

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

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

Но на этом мы не остановились. Мы переписали наши микросервисы с Node на Go, потом на C++, а затем обратно на Node. На каждом этапе мы наблюдали 20-процентное улучшение производительности. Просто дух захватывало, на что способна наша команда.

Мы отложили запуск на два месяца, чтобы довести до совершенства систему сборки. Теперь мы использовали Github Actions, конвейеры Bitbucket, GitLab CI и кластер AWS на инстансах Jenkins. Мы разработали собственную распределённую систему управления, чтобы всё идеально скоординировать. Сама система управления базировалась на той же инфраструктуре, что и сборка. Это было поистине волшебно.

Технические задачи были невероятные, но команда справилась с задачей. За несколько недель до старта мы поднажали. Все работали по 10 часов в день без выходных, пока не довели систему до ума. Итак, день запуска.

Признаки проблемы


Мы открыли все шлюзы. Опубликовали ссылку в Twitter и Instagram, разместили на HN, написали статью на Medium. Но как ни старались, ни один пользователь так и не зарегистрировался.

Настроение было подавленным большой запуск, над которым мы так упорно работали, так и не состоялся. Экстренные совещания. Трудные разговоры. И было принято решение.

Нам пришлось всё переписать на $HOTLANG.

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

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

Мы запустили вторую версию с большими фанфарами. Шумная кампания в социальных сетях, прямые трансляции, платное спонсорство. Мы бросили на раскрутку все имеющиеся ресурсы.

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

Извлечённые уроки


Со времени этих роковых событий прошло несколько месяцев. Теперь мы знаем, в чём была критическая ошибка. Дело в том, что идеальный технический стек не остаётся таким долго. К тому времени, как вы выйдете на рынок, идеальный стек изменится а вместе с ним и ваши шансы на успех!

Мы просто опоздали с выходом. К моменту запуска второй версии $HOTLANG уже вышел из моды. Если найти дополнительное финансирование, то мы перепишем приложение на $ELITELANG. И вот тогда наш стартап может стать единорогом.
Подробнее..

Новогоднее обращение GPT-2

31.12.2020 18:20:33 | Автор: admin

Уважаемые граждане России! Дорогие друзья!


Родившись в России, мы с детства воспитывались в идеологических рамках демократической системы. Мы не прошли многие страны Европы, они также сформировали систему. Мы были дети элиты, а в России, как и везде, царило разложение всего и вся. Но это нам удалось выдержать.

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

Все это мы поняли, когда стали взрослыми. Ведь не зря же наш народ так любил наш народ! И если мы верно воспитывались в России, нам это удалось.

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

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

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

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

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

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

Поздравляю вас с праздником! С Новым, 2021 годом!

Редактировался ли текст?

Текст генерировался абзацами начиная с нескольких фраз типа "Уважаемые граждане России! Дорогие друзья!" и "В новом/уходящем году", а эти абзацы уже были вручную склеены в "обращение"

Credits

От идеи до реализации прошло примерно полтора часа и во многом благодаря https://github.com/mgrankin/ru_transformers - это легко тюнящиеся gpt-2 модели, обученные на русских текстах

А отсюда https://kremlin.ru/events/president/transcripts я выкачал обращения президентов (да, Медведев там тоже был) за последние 20 лет. Вообще по ссылке можно найти очень много кремлёвских текстовых данных и обучить что-нибудь поинтереснее)

Ну и упомяну свой проект "нейроссия" https://vk.com/neurussia в контексте которого эта идея и возникла, а также картинка из которого использована в обложке статьи

Подробнее..

Тестирование псевдослучайной последовательностью

14.01.2021 20:16:39 | Автор: admin

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

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

Поэтому надо было подготовить простую программу (в смысле ПО) для испытаний. И встал вопрос, что выдавать в качестве информации? Решили все-таки не тривиальную решетку AA55, а псевдослучайную последовательность с помощью примитивного полинома Галуа.

Алгоритм там действительно очень простой:

;---- ВДАЧА ПСЕВДОСЛУЧАЙНОЙ ПОСЛЕДОВАТЕЛЬНОСТИ ----ПСП:  MOV       EBX,ЗНАЧЕНИЕ   ;ПЕРВОНАЧАЛЬНО ВСЕ ЕДИНИЦ      MOV       CX,ДЛИНА_ПСП   ;НОМЕРА ОТВОДОВ ОБРАТНОЙ СВЯЗИ;---- ВСТАВЛЯЕМ ПОЗИЦИЮ ОТВОДА ОБРАТНОЙ СВЯЗИ ----M1:   MOV       EAX,1      XCHG      CH,CL      SHL       EAX,CL      XCHG      CH,CL;---- ОБРАБАТВАЕМ ОЧЕРЕДНОЙ БИТ ----      ROR       EBX,1      JNB       M2;---- ОЧЕРЕДНОЙ БИТ - ЕДИНИЦА ----      AND       EAX,EBX ;ВДЕЛЯЕМ СИГНАЛ ОБРАТНОЙ СВЯЗИ      MOV       EAX,1      JNZ       @      SHL       EAX,CL      OR        EBX,EAX ;ЕСЛИ ОБРАТНАЯ СВЯЗЬ=0, ДОПИСВАЕМ 1      JMPS      M4@:    SHL       EAX,CL      NOT       EAX      AND       EBX,EAX ;ЕСЛИ ОБРАТНАЯ СВЯЗЬ=1, ДОПИСВАЕМ 0      JMPS      M4;---- ОЧЕРЕДНОЙ БИТ - НОЛЬ ----M2:   AND       EAX,EBX ;ВДЕЛЯЕМ СИГНАЛ ОБРАТНОЙ СВЯЗИ      MOV       EAX,1      JZ        @      SHL       EAX,CL      OR        EBX,EAX ;ЕСЛИ ОБРАТНАЯ СВЯЗЬ=1, ДОПИСВАЕМ 1      JMPS      M3@:    SHL       EAX,CL      NOT       EAX      AND       EBX,EAX ;ЕСЛИ ОБРАТНАЯ СВЯЗЬ=0, ДОПИСВАЕМ 0;---- ВДАЧА НУЛЯ ----M3:  CLC     RCR       БАЙТ,1     JMPS      @;---- ВДАЧА ЕДИНИЦ ----M4:  STC     RCR       БАЙТ,1;---- ВДАЧА ОЧЕРЕДНОГО БАЙТА ПСП ----@:   DEC       БИТ    ;БАЙТ ЕЩЕ НЕ КОНЧИЛСЯ ?     JNZ       M1     MOV       БИТ,8  ;ОПЯТЬ 8 БИТ     MOV       ЗНАЧЕНИЕ,EBX ;ДЛЯ ПРОДОЛЖЕНИЯ ПСП     MOV       AL,БАЙТ ;ВДАЛИ ОЧЕРЕДНОЙ БАЙТ ПСП     RET

Эта подпрограмма выдает все возможные комбинации нулей и единиц (кроме комбинации из одних нулей) заданной длины в псевдослучайном порядке. В нашем случае для длины 32 бит получается полмиллиарда псевдослучайных байт до повторения данной последовательности заново. Очень просто и красиво.

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

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

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

Все повторяется: при включении компьютера аппаратная заявляет, что видит несущую (а это что? Нет у нас никакой несущей!), затем запускаем собственно программу и сигнал опять пропадает. Вдруг через час в переговоры с аппаратной вмешивается телеметрист: да нет никакого пропадания сигнала! Я все нормально принимаю, как и вчера.

Фу-ты, ну-ты. Вчера же действительно все было нормально!

Начинаем разбираться.

Оказывается, вчера в аппаратной дежурил молодой специалист. Его спросили, есть сигнал полезной нагрузки? Он глянул на осциллограф а там бежит наша шумоподобная псевдослучайная последовательность. Он же не знает, как должен выглядеть сигнал, поэтому спокойно докладывает: да, есть.

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

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

Это заставило задуматься о математике вообще и о необычных людях, двигавших ее (а, заодно, и развитие всей науки) вперед. Мы использовали полином Галуа. Всего 20 лет жизни Эвариста Галуа и 4 года его занятие математикой оставили такое наследие, которым мы, не задумываясь, пользуемся до сих пор.

Конечно, работы Галуа появились не на пустом месте. Можно сказать, что он принял знамя из рук Нильса Абеля, тоже обидно рано ушедшего из жизни. И после нелепой смерти Галуа, на дуэли, да еще при мутных обстоятельствах, развитие математики, конечно, не остановилось. Например, уже через двадцать лет появились полиномы Чебышева, которыми мы пользуемся каждый раз, когда с помощью FPU считаем триногометрические функции.

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

Если бы Галуа не погиб в юном возрасте, сколько бы еще открытий мог бы сделать. А если бы он с Чарльзом Бэббиджем бы встретился, ну или бы с Адой Лавлейс, возможно, жили бы мы сейчас совсем в другом компьютерном мире

Подробнее..

Первое IT-шоу, которым рулишь ты, или как объединить знания и юмор в пяти тезисах

17.11.2020 10:12:56 | Автор: admin

Привет, Хабр! У нас намечается классная тусовка. Уверены, что за время пандемии и изоляции ты успел посетить несколько онлайн-конференций (или нет). Мы тоже. Чаще всего это выглядит как-то так: слева на экране спикер, справа слайды доклад на 40 минут и ответы на вопросы из чата.

Многие искали рецепт идеального онлайна, но не многие нашли. Нам тоже пришлось подумать, что делать с конференцией IT Nights, суть которой ночная образовательная тусовка в Иннополисе. Город в онлайн не засунешь, а вот если сделать шоу с трансляцией из города, подумали мы на встрече оргкомитета.

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

Для справки

IT Nights первая ежегодная ночная конференция города Иннополис. В 2019 году к нам в гости приехали более 800 айтишников и провели с небольшими перерывами на сон 3 дня и 2 ночи. В этот раз вынужденно мигрируем в онлайн, чтобы устроить первое ночное IT-шоу.

Тезис первый: перевернуть все с ног на голову

IT-сообщество буквально помешано на знаниях и прокачке скилов. В воздухе витает культ пользы. Если смотреть Ютуб, то обязательно полезный контент, а не развлекательные видосы. Иначе поймаешь негласное порицание товарищей по цеху. Но все мы знаем, что веселые видосы нужны не меньше образовательных. И все их смотрим, иногда тайком и никому про это не рассказываем, своеобразный гилти плеже.

И тут мы подумали: а что если объединить образовательный и развлекательный ютуб-форматы? Так появилась формула IT Nights:

Мы сделаем то, чего все боятся: объединим знания и юмор

Тезис второй: эксперименты и только эксперименты

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

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

Посмотрев на собранную программу, мы сделали второй вывод:

Для обычных докладов есть десятки конференций, для экспериментов IT Nights

Ночной дожор

Готовим бутерброды вместе со спикерами по их фирменному рецепту и слушаем факап-сторис, заедая стресс.

ASMR-новости индустрии

В интимной обстановке ведущие зачитывают новости индустрии. Особенно оценят аудиофилы и любители ASMR.

Не будь, а будь!

Эксперт из Skillbox и айтишник спорят о необходимости soft skills и делятся рабочими инсайтами.

Лига айти шуток

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

Кто хочет стать аитишником?

Опытные айтишники поделятся с джунами секретами: пилить свой стартап или работать в корпорации, профессиональные тренды в США и России, почему HR-мир так жесток к джунам.

Рукодел

Спикеры повторяют известные лаифхаки. Тем, кто не смог выполнить лаифхак, назначается наказание, которое придумают зрители.

Шокирующая лекция

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

Твоя лекция наши правила

Модныи приговор прямо во время лекции. Ты решишь, какие сценические образы примерит спикер.

Было/не было

Спикеры по очереди зачитывают факты и отвечают на вопрос было или не было? Необходимо обосновать свою точку зрения или рассказать историю, связанную с этим фактом.

Тест на аитишника

Обсуждаем со спикером и зрителями стереотипы про аитишников. По ответам зрителеи устроим игру 100 к 1.

Тезис третий: оставим вялые онлайны для других

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

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

Наш план поместить в большом доме 20 спикеров-авантюристов, где у них останется только один выход устроить шоу. Представьте себе, как Барух Садогурский вместе со зрителями проходит тест на айтишника, а потом устраивает игру 100 к 1. Или как Паша Финкельштейн и Антон Черноусов собираются на кухне, чтобы приготовить бутерброды по фирменным рецептам и обсудить свои и чужие факапы на работе и за ее пределами. Проще говоря, где еще можно увидеть знакомые лица в неожиданных амплуа.

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

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

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

Говорим нет трансляциям на вебку из разных квартир. Собираем спикеров в одном месте, делаем идеальную картинку, захватывающий сценарий и добавляем интерактивности

Спикеры

Александр Ларьяновский

Skyeng

Управляющий партнер и сооснователь Skyeng, гуру онлайн-образования в России. До Skyeng шесть лет работал в Яндексе, три из которых директором по международному развитию.

Дарья Пушкарская

Программист и предприниматель, основательница Web Hero Schoo

Работала Frontend-разработчиком на React в 2GIS, Mail.ru и Tinkoff.tu. Организовала внутренние конференции Tinkoff.js. Основала онлайн-школу с последующим трудоустройством Web Hero School более 2 лет назад. Ищет баланс между личной жизнью и захватом мира.

Барух Садогурский (a.k.a. JBaruch)

Head of Developer Relations и Developer Advocate в компании JFrog

Больше всего любит рассказывать о технологиях. Превратил выступления на IT-конференциях в настоящие перформансы. За что получает от нас звание одного из лучших спикеров индустрии.

Барух соавтор книги Liquid Software, CNCF ambassador и профессиональный спикер по темам: DevOps, DevSecOps, Go, Java и др. Он регулярно выступает на таких известных конференциях, как Joker, JPoint, DevOops, Heisenbug, DockerCon, GopherCon, Devoxx, DevOps Days, OSCON, Qcon, JavaOne и др.

Антон Черноусов

Developer Advocate в Яндекс.Облаке

До Yandex.Cloud занимался разработкой, внедрял Agile-процессы, стартапил, хакатонил. Успел запилить классный подкаст и телеграм-канал The Art Of Programming.

Алексей АйТиБорода Картынник

Автор ютуб-канала АйТиБорода

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

Паша Финкельштейн

Разработчик в JetBrains

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

Егор Малькевич

Frontend-разработчик и СЕО стартапа SolidBridge

Уже 13 лет увлекается IT. Ведет небольшой канал на Youtube, преподает курсы. В свободное от отдыха время работает FullStack разработчиком и менеджером стартапаВеселый, голодный Смотрит KVN, шутит шутки

Саша Ермоленко

Руководитель команды дизайна сервисов в Mail.ru Group

В прошлом директор департамента дизайна Рамблера, арт-директор внешних коммуникаций Яндекса и арт-директор BBDO. Сегодня она работает руководителем команды дизайна в Mail.ru Group. А ещё Саша преподает в Британской высшей школе дизайна и Bang-Bang Education.

Артур Хачуян

Руководитель компании TAZEROS

Генеральный директор и основатель Tazeros Global Systems, создатель главного россииского BigData-алгоритма. Знает все твои секреты #DataDaddy.

Зар Захаров

Frontend Developer Evangelist, основатель React Марафона и JS Марафона

Мечтал стать музыкантом. Разработка позволяла заниматься любимым делом и иметь доход. В итоге затянуло, и вот уже 14 лет Зар не может оторваться от Frontend. Активный спикер, выступал на HolyJS, ReactDayBerlin. Работал в двух лучших банках России. Создатель первого марафона по разработке на вылет, по ReactJs и основам JavaScript. Работает в GridDynamics. Мечтает, чтобы комьюнити разработчиков было большим, дружным и как одна семья.

Дмитрий Кузюбердин

Создатель youtube-канала IT-KAMASUTRA, школы IT-INCUBATOR.BY и музыкального аудиостока BEATMAKER.TV

Программирует уже более 10 лет. Немного кодер, немного преподаватель, немного стартапер, немного ютубер, немного инфоцыган. Меняет судьбы людей, помогая войтивайти.

Максим Михеенко

5518 Studios

Сооснователь и генеральный директор компании 5518 Studios. Создатель компьютерной графики для знаковых игр Apex Legends, Star Trek и Call of Duty. Написал об игровой индустрии и как туда попасть в книге Миллионы МиллиардовСооснователь и генеральный директор компании 5518 Studios. Создатель компьютерной графики для знаковых игр Apex Legends, Star Trek и Call of Duty. Написал об игровой индустрии и как туда попасть в книге Миллионы Миллиардов.

Всеволод Брекелов

JUG Ru Group

Разработчик и PMM в JUG Ru Group. До этого работал в Grid Dynamics, которая дала возможность поработать по контракту в Google в Калифорнии, с Nike в Портленде и крупным банком во Флориде. Ex-участник программного комитета HeisenBug, JPoint, Joker. Ведет инженерный канал Engineer Readings и пишет про тестирование в своем твиттере.

Артём Ерошенко

Qameta Software

Автор инструмента Allure/Allure 2, эксперт по автоматизации тестирования. Артем работал в разных командах и в разных ролях: автоматизатор тестирования, менеджер команды разработки инструментов тестирования, руководитель группы автоматизации тестирования. Сейчас сооснователь компании Qameta Software. Ведущий шоу Ошибка Выжившего.

Глеб Михеев

Skillbox/FrontendConf/Beta

Занимается веб-разработкой почти всю сознательную жизнь. Затянуло еще в детстве: компьютерные игры, кланы, сайты. Потом фриланс, агентства, проекты для брендов, работа в Nvidia, несколько стартапов и, наконец, собственное агентство Beta. Последние несколько лет активно участвует в образовательных проектах: руководит программным комитетом конференции FrontendConf и продвигает профессию Frontend-разработчик в Skillbox.

Григорий Коченов

AGIMA

Креативный директор AGIMA, UX-визионер. В digital c 1998 года. Под его руководством был разработан и запущен первый адаптивный сайт в России, а также десятки масштабных высокотехнологичных интернет-проектов для таких компаний, как: Росбанк, МегаФон, Райффайзенбанк, Связной Банк, АльфаСтрахование и многие другие.

Александр Раихин

ВТБ Онлайн

Лидер стрима Мессенджеры и чат-боты в ВТБ Онлайн. В 2019 запустил лучшего чат-бота по версии CСGuru Awards.

Джанкарло Суччи

Innopolis University

Профессор, декан Факультета компьютерных и инженерных наук, начальник Лаборатории промышленной разработки ПО, Институт разработки ПО и программной инженерии. Джанкарло Суччи присвоены учёные степени высших ступеней в Италии и Канаде. Он автор 5 книг и редактор еще 12, опубликовал 370 работ.

Мануэль Маццара

Innopolis University

PhD, University of Bologna, Италия, Профессор, Директор Института разработки ПО и программной инженерии, руководитель отдела международного и академического сотрудничества. Разрабатывал программное обеспечение в компании Майкрософт и работал в Университете Ньюкасла над проектом Deploy.

Тезис четвертый: расслабиться и получать удовольствие

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

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

Авантюризм вместо погони за метриками

Тезис пятый: не бояться показаться белой вороной на общем фоне

Раз мы хотим сделать весело, то самим думать серые мысли и сомневаться на каждом шагу не положено. Есть понятный формат, следуя которому, получаются крепкие конференции и сглаживаются многие углы. Мы под эти стандарты не попадаем. У нас неофициальная подача и мы не обещаем доклады, заряженные на просветление. Вместо этого предлагаем много юмора и возможность посмеяться над IT-сферой и ее представителями (и над собой, конечно же).

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

Будущее не спит, и мы не планируем

Вместо заключения: 5 причин не пропускать IT Nights

  • Увидеть известных спикеров в новых и неожиданных ролях

  • Собрать внеплановый корпоратив и посмотреть шоу вместе с коллегами

  • Заценить новый формат, чтобы рассказывать внукам про первое IT-шоу (записи не будет)

  • Убедиться, что айтишники умеют устраивать классные тусовки

  • Поверить в онлайн (и чувство юмора технарей)


Увидимся на IT Nights

20 ноября, 20:00

Промокод для читателей Хабра на скидку 50% habr


Подробнее..

Эффективные менеджеры, или как я ходил до тех. поддержки

01.04.2021 08:15:50 | Автор: admin

Так получилось, что я оказался в некой группе лиц с некими общими идеями и желаниями. Так получилось, что живем мы в 21-ом веке и учитывая наше географическое положение мы обзавелись какими-то серверами, на них какие-то сайтики, ну скажем так, все для личного пользования. Время не стоит на месте и современные браузеры (там всякие хромы, эджи и с логотипом в виде жопы в стрингах) как-то очень критично относятся к сертификатам SSL выпущенными центром сертификации AD. И тут, как назло, при продлении DNS мне впарили SSL сертификат от известного бренда, и в какой-то день я решил его прикрутить

Как я докатился до тех.поддержки.

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

Ну дальше по инструкции:

Консоль IIS -> Сертификаты-> Импорт-> Тыкаем в файлик-> Сертификат в списке-> Привязки сайтика-> Выбор сертификата

Твою мышь а где сертификат??? Ну был же возвращаемся в раздел сертификатов web-сервера А нету Хорошо Повторяем процесс:

Консоль IIS -> Сертификаты-> Импорт-> Тыкаем в файлик-> Сертификат в списке-> Привязки сайтика-> Выбор сертификата

...

<% Длинная, нецензурная, не переводимая на другие языки, брань, включая угрозы сексуального насилия в извращенной форме в сторону прабабушки Била %>

Да где ОН??? Хорошо, пойдем другим путем :

mmc-> Добавляем оснастку Сертификаты -> Локальный компьютер -> Раздел Личные

Ох ты-ж!!!! вот и наш сертификатик Опять консоль IIS ну нету в списке этого сертификата НЕТУ!!!!

Ладно пропустим период принятия что я все-таки дебил, и руки не совсем ровные и не из того места

ОК, пойдем в гугл, он же вумный, подскажет че ни будь спустя минут 15-20 приходит осознание что писать запросы гуглу я тоже не научился

Шо делать???? О!!! я же за это деньгу платил, там целый сайт, там вумные, там же поддержка есть, прям кнопочка с вопросиком на каждой странице

Экшен

В общем тыкаем кнопочку с вопросиком, да матерь божья!!! там целое меню о чатик!!! тыкаем и тут же заходим в атаку:

Тук тук, это мы... тупые парни... есть кто живой?

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

Ну в общем, через пару минут, девица заряжает

это не в моей компетенции, обратитесь к старшим товарищам, через заявку помощи

Ну ОК, ага, значит вопрос не тупой, значит я не совсем дебил радует

Кнопочка с вопросиком -> кнопочка Написать заявку -> Излагаем проблему, прилепляем скриншотики -> ждем 

Через пару литров кофе приходит ответ:

Вы производите установку SSL-сертификата на сторонний хостинг. К сожалению, нам неизвестно, как работают сервера в других компаниях, и у нас нет доступа к их системам.

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

Ну в общем как-то ниже эмоции, но читать их можно только лицам 18+

Какого хрена??? Это вы называете ответом??? Вы пытаетесь мне впарить говно белок за звонкую монету!!! @@@@, ;;;;;;@@@@, вы не можете ответить на достаточно простой вопрос и вы имеете право утверждать что сможете тянуть хостинг? Где гарантии вонючие у@ки??? Т.е. я вам должен заплатить денюжку за хостинг, а потом вы так же разведете руки а не получилось, а давайте вы еще заплатите мы вам с нуля все зафигачим!!!, потом опять разведете ручки со словами а не получилось, я буду ругаться но деньги то заплачены и вам станет пофигу, как там говорят в таких случаях не нравится наш сервис валите в перуанскую деревню, там таких много Вы реально решили, что я решил прикрутить SSL к гавно сайтику визитке, нонеймовской конторки с посещаемостью полтора бота в год??? Вы реально издеваетесь у@ки???

Подтягиваем тяжелую артиллерию

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

Тук тук это мы тупые парни, есть минутка?

Получаем отклик установки соединения че надо?, дальше копипастю описание ситуации, добрасываю скриншотики Спустя 30 секунд надписи *** печатает получаю сообщение:

Ты @лан!!! Ты прикручиваешь *.crt в котором нет приватного ключа, как ты надеешься работать??? Учи мат.часть, ключевое слово OpenSSL.exe тебе в помощь.

В общем послал так послал, но путь указан. Открываем яндекс (ну на гугл я еще обижен), вбиваем вопрос OpenSSL.exe как пользоваться, и понимаем что расхожая фраза чем больше в армии дубов тем крепче наша оборона возникла не на пустом месте(судя по яндексу нас тайга) в общем дополняем инструкцию полученную в начале этого пути инфой об OpenSSL радостно получаем файлик *.PFX который прикручиваем до IIS, и О ЧУДО!!!!!!!!!! все заработало.

Заключение

Картинка в начале смешная, а ситуация страшная Да и аффтор картинок молодец, я хрен знает кто это, но жгет от души

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

Подробнее..

Аккумуляторная лампа Gauss 8w или неразорвавшийся боеприпас

27.04.2021 22:20:31 | Автор: admin

Не судите строго, это моя первая статья в формате сатиры на хабре.

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

Специально для вас - я нашел лампу, на которую обязательно стоит взглянуть.

Компания, выпускающая эту лампу с первого взгляда на упаковку, вызывает доверие :)

*когда я искал звезду на елку, купил новогоднюю лампу, когда пришел домой, обнаружил на коробке надпись Ra>90 (CRI>90)... Я конечно все понимаю, но дизайн коробки видимо рисуют в другом месте :)))

Убедившись в серьезности компании, вернемся к обзору аккумуляторной лампы. Честно, я очень люблю разные гаджеты и конечно не мог пройти мимо такого поделия где ~lipol аккумулятор встроили в корпус A67 (чуть больше стандартной A60 груши) светодиодной лампы. Благо в тот момент на нее была скидка и обошлась она мне в ~230 рублей.

Видеообзор данной лампы (не мой)

По традиции, данной в компании принято писать на коробке: RA(CRI)>90, а срок службы 25 000 часов, и "угол светового пучка" целых 240 градусов. Оставим эту писанину на совести компании, хотя очень хотелось бы посмотреть их сертификат на эту лампу для Российского рынка.

Включаем и заряжаем лампу, да - заряжается она включенной, по другому не умеет :)

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

PF(cosf)~0.63, Мощность 5,6Вт и уменьшается в процессе прогрева и зарядки аккумулятора.

Через полчаса работы, корпус лампы нагрелся до 50 градусов, а рассеиватель до 57, что вызвало массу вопросов.

Видимо прохладный воздух задувает через дырки снизу лампы. Хочу уточнить, лампа находилась в "идеальных" условиях: открытый патрон, расположена основанием к полу.

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

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

Срезаем герметик и извлекаем светодиодный модуль, при замыкании цоколя рукой - лампа периодически начинает светиться :)

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

Лампа постоянно мерцала, намекая "не убивай меня..." XDD

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

Аккуратно, чтобы не замкнуть, извлекаем неразорвавшийся боезаряд, на вид выглядит как 18650, в дополнительной термоусадочной трубке. После получаса работы лампы (*условия работы описаны ранее) его температура была 58 градусов, и это с учетом 5-7 минут времени на разборку лампы.

Снимаем обертку, перед нами классический n/n 18650, весом 28г

Теперь немного информации:

  • Мощность заявлено 8Вт, измерено 5,8-5,4Вт, но PF(cosf)~0,6 - так что почти честно :)

  • Маркировка платы GF-A67-7966A (маркировка микросхемы MT7966A)

  • Аккумулятор 18650, но вес 28г, при этом средний вес такого аккумулятора ~45г.

  • Питание от сети: на светодиодном модуле 4,1В

  • Питание от батареи на светодиодном модуле: 2,9В, далее напряжение падает до 2,1 и светодиоды плавно гаснут (как будто батарея разряжается до нуля (но это не так). Стабилизации нет.

  • Максимальное напряжение на батареи после отключения лампы 3,8В. Заряжает до 3,9В, максимальный разряд (светодиоды почти не горят) ~3-2,9В.

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

Подробнее..

Высокие технологии

01.11.2020 20:22:23 | Автор: admin

Директор завода Афанасий Альбертович прямо-таки излучал радость и доброжелательность. Его парадный твидовый пиджак был тщательно вычищен, локти аккуратно зашиты кожаными вставками, а сам директор приятно пах тройным одеколоном.
Здесь вы видите наш чертёжный отдел, обратился он к японской делегации.


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


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


Японец открыл глаза. Было видно, что так его приводят в чувство впервые. Убедившись, что всё в порядке, директор продолжил:
А теперь пройдёмте в головной центр хранения чертежей.


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


Делегация вошла в большой зал, забитый огромными стеллажами с выдвижными ящиками. Афанасий Альбертович направился к женщине, сидящей возле огромных стеллажей с ящиками:
Добрый день, Марфа Васильевна! Будьте добры оформить коммитик.


Женщина незлобно, а скорее шутливо проворчала:
Опять вы, Афанасий Альбертович, со своими листочками! И не надоело вам ходить каждый день туда-сюда?
Вон, остальные по неделе не появляются.


В это время зазвучала сирена. Через некоторое время вдалеке раздался взрыв. Кто-то из японцев снова вскрикнул и упал на пол. Полежав пару секунд, он приоткрыл один глаз, встретился с насмешливым взглядом Афанасия Альбертовича, в смущении встал и скрылся глубоко в толпе коллег.
Что это? спросил один из японцев.
Тестирование в ангаре VM033 завершено, поэтому его взорвали, ответил директор.
Зачем взрывать? Разве нельзя было просто там прибраться?
Раньше так и делали, но уборщицы жаловались, что не могут всё прибрать, как ни стараются. Теперь стало проще ангар сноcят под ноль, и быстро расчищают место для следующего.




Далее путь делегации лежал через склад. Там ловко орудовал оператор SQL крана грузил контейнеры на железнодорожный состав. Заполнившись, состав тут же уезжал, а его место тут же занимал новый, пустой.


Рядом суетился щуплый дедок местный старожил. Никто не знал как, но он прекрасно ориентировался среди всех контейнеров и коробок и давал дельные советы оператору.
Последний держал в руке бланк с запросом и ругался:
Совсем охренели! Опять им весь склад нужно выгрузить!
Весь склад? удивились японцы. Зачем весь? Неужели нельзя попросить только то, что нужно?
Можно, но этот отдел аналитики не может разобраться, как правильно для этого составить запрос. А всего лишь надо сделать селект пиво...
Дальше дедок заговорил четырёжэтажным матом, и делегация поспешила на выход.




На выходе возле проходной японцы горячо благодарили директора за экскурсию по заводу.
Охранник заметил среди них совсем молодого паренька, который явно японцем не был, но из-за небольшого роста сливался с группой.
Ты с ними? спросил охранник.
Да, я приехал в Японию по обмену, а потом с делегацией попал на завод, паренёк поправил очки. Завтра едём обратно в Японию.
По Транссибирской магистрали?
Да, голос паренька чуть дрогнул.
Мда, путь неблизкий охранник задумался. Погоди, у меня для тебя кое-что есть.


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

Подробнее..

Время, деньги и фасттекст (и причем здесь бытие)

17.02.2021 10:06:07 | Автор: admin

Пятиминутка философии на Хабре.

Все знают изречение время деньги. Но если обратиться к корпусу философских текстов, то такое сочетание для философии не самое привычное. Гораздо чаще время у философов ассоциируется, например, с бытием. Есть даже такая книга, Бытие и время. Но вдруг нас заинтересует, как же всё-таки время и деньги связаны в философии? Самое время обратиться к глубокому обучению.

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

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

Начнём с прояснения вопроса о взаимном сходстве двух пар понятий:

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

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

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

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

Подробнее..

Окаменелости

23.11.2020 06:17:59 | Автор: admin

А вы когда-нибудь задумывались про окаменелости? Это же cringe. Если мы находимся в фантастической книге/фильме, то это наверняка самая глупая и дурацкая из конструкций.

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

Например, как в советском фильме "Лиловый шар". Или как совсем уже ленивые сценаристы американского кино "Прометей" сделали, применив этот прием аж три раза за фильм.

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

Вы меня конечно извините за занудство, но эта часть явно сделана на скорую руку.

Подробнее..

Категории

Последние комментарии

  • Имя: Макс
    24.08.2022 | 11:28
    Я разраб в IT компании, работаю на арбитражную команду. Мы работаем с приламы и сайтами, при работе замечаются постоянные баны и лаги. Пацаны посоветовали сервис по анализу исходного кода,https://app Подробнее..
  • Имя: 9055410337
    20.08.2022 | 17:41
    поможем пишите в телеграм Подробнее..
  • Имя: sabbat
    17.08.2022 | 20:42
    Охренеть.. это просто шикарная статья, феноменально круто. Большое спасибо за разбор! Надеюсь как-нибудь с тобой связаться для обсуждений чего-либо) Подробнее..
  • Имя: Мария
    09.08.2022 | 14:44
    Добрый день. Если обладаете такой информацией, то подскажите, пожалуйста, где можно найти много-много материала по Yggdrasil и его уязвимостях для написания диплома? Благодарю. Подробнее..
© 2006-2024, personeltest.ru