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

Компьютер Texas Instruments TI-99/4a почти неизвестен за пределами США, однако он был там весьма популярен (выпущено более двух миллионов машин). Хотя этот компьютер создавался как домашний, существенной особенностью (во многом определившей его архитектуру, а затем и судьбу) было то, что за основу был взяли уже существовавший серьёзный мини-компьютер TI-990, собранный на обычной ТТЛ логике. Фактически, микропроцессор TMS9900 в компьютере TI99/4A является реализацией TI-990, но в виде чипа. TI-990 был выпущен в 1975 году, а TMS9900 в 1976 году.

Архитектура и программирование компьютера Texas Instruments TI-99-4a - 1

Таким образом, TI99/4a (в 1979 был выпущен чуть более простой TI-99/4, а в 1981 уже TI-99/4a) получил в наследство крайне странную, для домашних компьютеров, архитектуру. Во-первых, микропроцессор TMS9900 в нём 16-разрядный — с честной 16-разрядной шиной данных (это в конце 1970-х!). Во-вторых, на чипе нет регистров (кроме PC, флагов и указателя «регистров» WP). То, что можно назвать регистрами, находится в отдельной микросхеме 16-разрядного статического ОЗУ размером 256 байт и может адресоваться одновременно как память и (первые 16 слов) как регистры R0..R15. Называется это «scratchpad».
Аппаратного стека нет, вместо этого сохранение значений при вызове подпрограмм осуществляется изменением указателя начала регистров WP в этом самом ОЗУ (напоминает регистровые окна в Sparc'ах). В предке (TI-990) это также использовалось для переключения контекста при реализации многозадачности.

Хотя тактовая частота TMS9900 — 3 МГц, инструкции занимают довольно много тактов — не менее 8. При этом реализовано даже умножение и деление (124 такта).
Читать полностью »

Javascript-путешествие с шестью символами - 1

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

Если добавить строку к чему-то, то он допустит, что мы хотим получить текст, поэтому сконвертирует все в строку.

Если мы добавляем префикс "плюс" или "минус", то он допустит, что нам нужно числовое представление и сконвертирует строку в число, если сможет.

Если мы отрицаем что-то, то он сконвертирует это в булево значение.

Мы можем использовать эти особенности языка и создать немного магии со всего-лишь шестью символами: [,],(,),! и +. Если вы читаете это на десктопе, то можете открыть консоль в вашем браузере (developer tools, например) и запускать код. Просто копируйте любой код из примеров ниже в консоль, и он должен исполнится и вернуть true.

Давайте начнем с простого. Вот главные правила:

  1. Префикс ! конвертирует в Boolean
  2. Префикс + конвертирует в Number
  3. Добавление [] конвертирует String

Вот они в действии:

![] === false
+[] === 0
[]+[] === ""

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

Текстовые редакторы, основная задача которых — отображение моноширинного шрифта (например, кода), должны, как и следует из названия, показывать символы одной ширины.
invisible symbols in diff

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

Каково оно учить JavaScript в 2016 - 1

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

— Это теперь называется Front-End инженер, но да, я — именно он. Я работаю с вебом в 2016. Визуализации, музыкальные плееры, летающие дроны, которые играют в футбол, все что угодно. Я только что вернулся из JsConf и ReactConf, так что я знаю новейшие технологии для создания веб-приложений.

— Круто. Мне нужно создать страницу, которая отображает последние действия со стороны пользователей, так что мне просто нужно получить данные от REST и отобразить их в какой-то фильтруемой таблице, ну и обновлять её, если что-то изменится на сервере. Я думал, может быть, использовать JQuery для извлечения и отображения данных?

— О, Мой Бог! Нет! Никто больше не использует JQuery. Ты должен попробовать React: это — 2016!
Читать полностью »

Представьте, что есть у нас объект Function<A, B> foo = SomeClass::someMethod; Это лямбда, которая гарантированно является ссылкой на не статический метод. Как можно из объекта foo достать экземпляр класса Method, соответствующий написанному методу?

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

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

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

image

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

Не так давно наткнулся на статью на Хабре о том, как пользоваться Power BI и как проводить с помощью него Простой план-фактный анализ. Автору огромный респект за труд — материал, действительно, полезный. Более чем достаточно для начинающего. Однако, насколько я понял, для многих работа с PQ/PBI так и заканчивается нажатием на кнопочки в интерфейсе.

В принципе, большинству пользователей этого вполне достаточно для решения несложных задач. Тем более, что это самое большинство, что называется, в быту — непрограммистывообщениразу. Да и, как показала практика, далеко не все знают, что в PQ есть режим расширенного редактирования запросов. А между тем, боязнь (нежелание/неумение) копнуть глубже лишает возможности задействовать весь заложенный функционал PQ/PBI в полной мере. Отмечу хотя бы тот факт, что в интерфейсе присутствуют далеко не все кнопочки, для которых есть функции. Думаю, не сильно ошибусь, если скажу, что функций, пожалуй, раза в два больше, чем кнопок.

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

Power Query: как перестать бояться функционального программирования и начать работать в расширенном редакторе запросов - 1
Читать полностью »

Некоторое время назад в московский офис Яндекса приезжал Игорь Пак — ученый с множеством научных работ, выпускник мехмата МГУ и аспирантуры Гарварда. Сейчас Игорь работает в Калифорнийском университете. Его лекция в Яндексе была посвящена различным классам последовательностей и перестановкам. В том числе прямо по ходу лекции он представил выкладки, опровергающие гипотезу Нунана и Зайлбергера — одну из ключевых в области перестановок.

Под катом — подробная текстовая расшифровка и большинство слайдов.
Читать полностью »

История одной одержимости, или как я писал календарный скрипт для Photoshop - 1

Эта статья о том, как я писал скрипт для создания календарей в Photoshop, от самого начала и до самого конца, с багами и пасхалками. Много текста, некоторого кода и чуть-чуть иллюстраций.
Читать полностью »

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

// просто сравните длину строк
this.this.this.this.
var s=this;s.s.s.s.

Я использовал этот и некоторые другие упоротые способы для участия в конкурсе js13kGames, цель которого — написать игру, размер которой не превысит 13 килобайт.

Скриншот ранней версии игры

Игра почти готова, осталось всего-то пару дней не спать...

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


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