Рубрика «ненормальное программирование» - 25

Недавно попалась на глаза новость, что вышел очередной релиз Flutter (1.9), который обещает разные вкусности и, в том числе, раннюю поддержку веб-приложений.

На работе я занимаюсь разработкой мобильных приложений на React Native, но с любопытством поглядываю на Flutter. Для тех, кто не в курсе: на Flutter уже сейчас можно создавать приложения для Android и iOS, готовится к релизу поддержка веб-приложений, а ещё в планах поддержка десктопа.

Такое вот «одно кольцо, чтобы править всеми».

Покрутив пару дней в голове мысли о том, какое приложение можно попробовать сделать, я решил выбрать задачу со звёздочкой — что нам эти проторенные дорожки? Замахнёмся на десктоп и будем героически преодолевать трудности! Забегая вперёд, скажу, что трудностей почти не возникло.

Под катом — рассказ о том как я решал привычные для React Native программиста задачи средствами Flutter, плюс общее впечатление от технологии.

Как я делал desktop-приложение на Flutter (+ bonus) - 1
Читать полностью »

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

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

Памятка начинающему разработчику компьютерных игр - 1

Данная статья ориентирована на школьников, студентов, и тех, кто постарше, кто никогда не пробовал, но очень хочет начать писать компьютерные игры. Кто в детстве не играл в компьютерные игры, и не хотел написать свою игру, которая будет лучше, чем GTA или Crysis? И я хотел, и, как ни странно, всё ещё хочу. И за несколько лет практики обучения таких же программированию, набралось несколько заметок, куда двигаться и что делать.
Читать полностью »

Привет.

Эта статья будет в немного «пятничном» формате, сегодня мы займемся NLP. Не тем NLP, про который продают книжки в подземных переходах, а тем, который Natural Language Processing — обработка естественных языков. В качестве примера такой обработки будет использоваться генерация текста с помощью нейронной сети. Создавать тексты мы сможем на любом языке, от русского или английского, до С++. Результаты получаются весьма интересными, по картинке уже наверно можно догадаться.

Бредогенератор: создаем тексты на любом языке с помощью нейронной сети - 1

Для тех, кому интересно что получается, результаты и исходники под катом.
Читать полностью »

Реверс-инжиниринг неизвестного процессора по единственной программе - 1

TL;DR: мы выполнили обратную разработку программы, написанной для полностью неизвестной архитектуры ЦП без какой-либо документации на ЦП (без эмулятора, без ISA, без всего) всего за десять часов. Из статьи вы узнаете, как нам это удалось…

В прошлые выходные мы с командой CMU PPP поучаствовали Teaser CTF 2019 команды Dragon Sector, чтобы расслабиться и отойти от жёсткого дедлайна CHI 2020. Dragon Sector — это уважаемая польская команда, имеющая историю интересных CTF, поэтому мне было интересно, что у них есть в запасе.

Решив “ummmfpu”, — задачу, в которую входил реверс-инжиниринг байткода для сопроцессора с плавающей запятой Micromega uM-FPU, я решил поучаствовать в соревновании по решению задачи CPU Adventure, которая на тот момент не была решена ни одной из команд (в результате мы оказались единственными, кто справился с заданием).

Вот описание задачи CPU Adventure:

Мой дедушка в 60-х годах занимался разработкой компьютеров. Наводя порядок на его чердаке, я нашёл странную машину. Рядом с машиной лежала стопка перфокарт с пометкой “Dragon Adventure Game”. Спустя какое-то время мне удалось подключить её к современному оборудованию, но игра слишком сложная и я не могу добраться до конца без читерства. Сможете мне помочь? Прилагаю транскрипцию перфокарт, используемых в машине. Утверждается, что машина имеет 4 регистра общего назначения, 1 кибибайт памяти данных и 32 кибибайта памяти команд. Чтобы сыграть в игру, подключитесь к серверу следующим образом: socat tcp4-connect:cpuadventure.hackable.software:1234 fd:0,rawer Подсказка: процессор машины уникален, не пытайтесь гуглить информацию по нему.

game.bin

Читать полностью »

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

Бизнес-компьютер IBM 1401 представили в 1959 году, и он стал самым продаваемым компьютером середины 1960-х – было поставлено более 10 000 таких систем. Ключевым конкурентным преимуществом IBM 1401 был высокоскоростной линейный принтер IBM 1403. Быстро вращавшаяся цепь с символами позволяла принтеру печатать по 10 строк в секунду с отличным качеством – считается, что это было наилучшее качество до появления лазерных принтеров в 1970-х.
Читать полностью »

PHP, почём абстракции для народа? - 1
Joy: What is going on?
Sadness: We’re abstracting! There are four stages. This is the first. Non-objective fragmentation!
Bing Bong: Alright, do not panic. What is important is that we all stay together. [suddenly his abstract arm falls off]
Joy: Oh! [Sadness and Joy start falling apart too]
Sadness: We’re in the second stage. We’re deconstructing! [as Bing Bong falls to pieces]
Bing Bong: I can’t feel my legs! [picks one leg up] Oh, there they are.
© мультфильм Inside Out

Все любят писать красивый код. Чтобы абстракции, лямбды, SOLID, DRY, DI и т.д. и т.п. В этой статье я хочу исследовать, во сколько обходится это всё с точки зрения производительности и почему.
Для этого возьмём простую, оторванную от реальности, задачу и будем постепенно привносить в неё красоту, замеряя производительность и заглядывая под капот.

Читать полностью »

A few days ago 0xd34df00d has published the translation of the article, describing the possible information about some function if we use it as a "black box", not trying to read its implementation. Of course, this information is quite different from language to language; in the original article, four cases were considered:

  • Python — dynamic typing, almost no information from signature, some hints are gained by the tests;
  • C — weak static typing, a little more information;
  • Haskell — strong static typing, with pure functions by default, a lot more information;
  • Idris — dependent typing, compiler can prove the function correctness.

"Here's C and there's Haskell, and what about Rust?" — this was the first question in the following discussion. The reply is here.

Читать полностью »

Пару дней назад 0xd34df00d опубликовал здесь перевод статьи, описывающей, что можно узнать о функции в разных языках, если рассматривать её как "чёрный ящик", не используя информацию о её реализации (но, разумеется, не мешая ей пользоваться компилятору). Разумеется, получаемая информация очень сильно зависит от языка — в исходной статье рассматривались четыре примера:

  • Python — динамически типизированный, информации минимум, какие-то подсказки дают только тесты;
  • C — слабо статически типизированный, информации ненамного больше;
  • Haskell — сильно статически типизированный, с чистыми функциями, информации существенно больше;
  • Idris — язык с зависимыми типами, информации достаточно, чтобы во время компиляции доказать корректность функции.

"Есть C, есть Haskell, а где же Rust?!" — немедленно прозвучал вопрос. Ответ — под катом.

Читать полностью »

«Channel F homebrew would be like programming sprites via hardware jumpers...»
/ chadtower, atariage forum /

Архитектура и программирование Fairchild Channel F - 1

Игровая приставка Fairchild Channel F, также известная как VES, появилась в ноябре 1976 года. В отличии от своих предшественников типа Ping-Pong, Tennis (в том же ряду — советский «Видеоспорт»), у неё было очень существенное отличие — наличие микропроцессора и картриджей с программами. До этого игры в приставках реализовывались на жёсткой логике — программа, в современном понимании, там отсутствовала.

Fairchild Channel F выпускалась вплоть до 1983 года. За это время было продано более четверти миллиона этих приставок и выпущено около 30-40 игр, некоторые из которых — уже в 2000-х годах.

Говоря о первенстве в плане использования микропроцессора стоит отметить, что RCA Studio II, о которой я рассказывал в прошлой статье, опоздала всего на пару месяцев, но оказалась существенно слабее Channel F, ввиду чего и провалилась по продажам. Впрочем, появление, менее чем через год, Atari VCS — вытеснило с рынка и Channel F.

Развития Fairchild_Channel_F, как такового, не было. В System II и нескольких клонах, типа Saba Videoplay 2 (1979), отличия состояли преимущественно в корпусе, джойстиках (кстати, все они понимали кроме обычных положений ещё и поворот ручки) и количестве микросхем. Архитектурно всё было практически идентично.

Что же собой представляет Channel F?
Читать полностью »


https://ajax.googleapis.com/ajax/libs/jquery/3.4.1/jquery.min.js