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

Привет! Эта статья связана с моей первой статьей «Маленькая ОС на C++ и ассемблере». Сейчас я вам расскажу, что произошло за это время в ОС.Читать полностью »

камень-ножницы-бумага (на ауребеш) В конце прошлого года Google Translate к выходу нового эпизода «Звёздных войн» добавил поддержку «Галактического языка» Ауребеш. Правда оказалось, что при выборе этого языка просто происходит перевод на английский. Если использовать Chrome или Firefox, то появляется шрифт, в котором вместо латиницы подставлены символы ауребеш, ну а в IE без особых хитростей выводится английский текст.

Начал вспоминать другие примеры создания «языков чужаков». Например, язык Клингонов из «Звёздного пути» тоже основан на латинице, но при этом достаточно проработан, имеет свой синтаксис и словарь. Языки народов Средиземья из «Властелина колец» – вообще отдельная история.

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

Одним дождливым питерским днем мой проект в UE4 перестал загружаться, и из-за этого я захотел сделать свой собственный движок. И одна новелла подтолкнула меня сделать движок именно для новелл. Если вам хочется узнать побольше и вы не боитесь goto, gosub и других ужасов, добро пожаловать под кат.
image
Читать полностью »

image

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

Общаться будем в TeamSpeak 3.
Скачать его можно тут.

Для подключения к серверу достаточно ввести IP — speakserver.cloudapp.net и ваш никнейм.

С наступающим, друзья!

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

Если вы разрабатываете на современном javascript, то почти любой ваш модуль содержит простыню таких строк:

import React from 'react'
import $ from 'jquery'
...

Как оказалось, большинство этих строк можно не писать, доверив их генерацию автоматике. И помогает в этом новомодный webpack, в котором, как оказывается, полно приятных сюрпризов. Кроме всем известных require и import для любых файлов и уже описанного на хабре «hot module replacement», webpack может проанализировать ваш исходный код и автоматически включить нужные модули на основании используемых литералов. Под катом — краткое описание как работает эта магия.
Читать полностью »

Привет!

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

Краткое содержание предыдущих серий

Архитектура игрового клиента многопользовательской Tower Defence. Новогодняя история - 1Как-то в конце декабря 2014 года команда из четверых человек решила создать клон одного из самых популярных модов к WarCraft 3 — Legion TD. Читать полностью »

image
Всем привет.

Так получилось, что уже давно мучает вопрос: «Как следить за форумами по интересным тебе темам, но самое главное, как узнавать о появлении новых вопросов в момент их публикации». Конечно, можно сказать, что есть рассылки, RSS, но лично у меня получается так, что до почты я добираюсь, как правило, с мобильного во время передвижения. Вручную серфить ресурсы вообще не вариант. Вот поэтому, если бы я и мог ответить, компьютера под рукой нет. А после приезда голова уже забита совсем другим. Могу смело сформулировать свою проблему. Необходим канал, сообщающий и самое главное, привлекающий мое внимание в момент публикации нового вопроса.

До недавнего времени таким я рассматривал какой-нибудь IM, для работы Telegram я не пользуюсь, а с остальными все что-то не совсем так.
Читать полностью »

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

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

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

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

Есть у нас одно .NET-приложение, которое умеет загружать и использовать плагины. Плагины — дело хорошее. Можно функционал расширять, можно оперативненько обновлять их со своего сайта, можно даже юзерам дать SDK и позволить писать свои плагины. Мы всё это и делали. Наши плагины представляли собой обычные .NET-сборки, которые нужно было подкинуть в определённую папку, откуда основное приложения их загружало и использовало. Ну, вы, наверное представляете как — Assembly.Load(), дальше ищем класс, реализующий необходимый интерфейс, создаём объект этого класса и т.д. Всё это работало давно, стабильно и ничто не предвещало беды. Но вдруг в какой-то момент появилась необходимость создать плагин, состоящий из нескольких файлов. В связи с этим было решено считать плагином не просто .NET-сборку (1 файл), а zip-архив, в котором может быть как одна сборка, так и несколько файлов. В связи с этим пришлось научить билд-сервер паковать плагины в архивы, а основное приложение — разархивировать их в нужное место. В общем-то задача на 10 строк кода. Ничто не предвещало беды. И вот скачиваю я с билд-сервера собранный архив с плагином, разархивирую его в нужную папку, запускаю приложение, и… не работает! Стоп, как не работает? Это ведь тот же плагин!

Дальше — больше. Прошу проделать ту же самую процедуру моего коллегу, на его компьютера. Он пробует — и у него всё работает! Но как же так? Одна версия приложения, один и тот же файл с билд-сервера. Какая-то разница в окружении? Сажусь за компьютер коллеги, пробую ещё раз — не работает! Он в этом время пробует на моём — работает! То есть получается, что файл «помнит», кто его разархивировал! Зовём третьего коллегу понаблюдать этот цирк. Последовательно, на одном и том же компьютере, по очереди делаем одни и те же действия: скачиваем архив с плагином, разархивируем в нужную папку, запускаем приложение. Когда это делаю я — программа не видит плагин, когда это делает коллега — всё работает. На третьем круге этих интересных экспериментов вдруг замечаем разницу в действиях: я разархивировал плагин стандартными средствами Windows, а мой коллега — с помощью 7-Zip. И то и другое вызывалось нами из контекстного меню архива, так что разницу в клик по не тому пункту вначале никто не замечал. Ну ок. Получается, файл, извлечённый из zip-архива с помощью 7-zip, отличается от того же файла из того же архива, извлечённого с помощью стандартного архиватора Windows?

Кстати, пока вы не открыли статью под катом, ответьте-ка сами для себя на вопрос, может ли такое быть, что содержимое файлов валидного zip-архива при разархивации 7-zip и через проводник Windows будет разным?
Читать полностью »


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