Pull to refresh
32
0

Разработчик

Send message

Краткий очерк истории Lisp машин

Reading time5 min
Views17K
Привет, Хабр!

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

Да, на свете было мало машин с аппаратной поддержкой лямбда исчисления — около 7000 штук в мире по состоянию на 1988 год. А сейчас гораздо меньше, конечно же. На самом деле Лисп машины сыграли довольно сильную роль в истории информационных технологий. Благодаря этим странным компьютерам мир получил такие технологии, как лазерная печать и многооконный GUI.

Щелк

За что конкретно я ненавижу некоторых отдельно взятых маркетологов — или как айтишник по магазинам ходил

Reading time5 min
Views617K
Знакомьтесь, это обычный «литровый» пакет молока:

image

  • Проверка на внимательность: там 900 грамм. Рядом несколько по 950. Но пакет может быть воспринят как литровый.
  • Проверка на знание физики. Рядом лежит похожий кефир. Объём измеряется в миллилитрах, масса — в граммах. Плотность кефира трагически выше плотности воды. То есть 900 грамм кефира 3,2% жирности — это примерно 874,5 миллилитров.

Второй пациент:



25 лет гарантии. Круто, правда? Есть одна проблема. Надо сохранять чек. Проверка, опять же, на знание физики. Чек у них печатается на обычной кассовой термоленте (я проверил на месте). У меня в офисе лежит много чеков. Мы их ксерокопируем, потому что через год-два они полностью выцветают. Самый старый чек, который видел коллега, держался 3 года в папке в архиве. UPD: смотрите самый низ топика, Икея ответила.

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

Осторожно, трафик: под катом много находок с фотографиями.
Читать дальше →

Slack. Небольшой обзор отличного сервиса

Reading time3 min
Views372K


Некоторое время назад после волшебного пендаля под названием Tolstoy Summer Camp я начал пилить свой стартап.
Сначала у меня в команде было два разработчика и дизайнер. Потом один разработчик ушёл пилить свой проект. Затем появился другой разработчик. И всё бы ничего, но я сходил с ума от того что не мог найти простых и понятных средств ведения дел в таких маленьких компаниях как моя.
Я перепробовал тучу всяких Basecamp, Asana, Redmine, Trello, Мегаплан и прочих, массу мессенджеров в разных сочетаниях c он-лайн файлопомойками типа Dropbox и GoogleDrive — ничего мне не нравилось. «Ну, не то это всё, не то!».
Но, в конце-концов, решение было найдено.

Dual boot ArchLinux и Windows 8 на UEFI без GRUB c помощью rEFInd

Reading time3 min
Views94K
Инструкция для новичков, о том, как сделать красивый dualboot windows и archlinux (и других ОС) через efi без grub и лишних заморочек.

Фото для привлечения внимания:

asus g46vw rEFInd
Читать дальше →

Обфускация JavaScript

Reading time5 min
Views197K
В статье собраны всем известные методы и предельно извращенные. Эту статью я решил написать после недавнего прочтения поста в блоге Badass JavaScript и решил её дополнить своими находками.

Первый способ


Он всем известен — обфускация минимизаторами такими как JS Packer, JSmin, YUI Compressor, Closure compiler или можно просто пугуглить «JavaScript Obfuscator» и найдется ещё сто штук разных обфускаторов.
Они превращают существующий код
function MyClass(){
    this.foo = function(argument1, argument2){
        var addedArgs = parseInt(argument1)+parseInt(argument2);
        return addedArgs;
    }
    var anonymousInnerFunction = function(){
        // do stuff here!
    }
}

В какой-то такой вид:
function MyClass(){this.foo=function(c,b){var d=parseInt(c)+parseInt(b);return d};var a=function(){}};

Или такой:
var _0xd799=["\x66\x6F\x6F"];function MyClass(){this[_0xd799[0]]=function (_0xefcax2,_0xefcax3){var _0xefcax4=parseInt(_0xefcax2)+parseInt(_0xefcax3);return _0xefcax4;} ;var _0xefcax5=function (){} ;} ;

Или вот такой:
eval(function(p,a,c,k,e,d){e=function(c){return c};if(!''.replace(/^/,String)){while(c--){d[c]=k[c]||c}k=[function(e){return d[e]}];e=function(){return'\\w+'};c=1};while(c--){if(k[c]){p=p.replace(new RegExp('\\b'+e(c)+'\\b','g'),k[c])}}return p}('4 0="3 5!";9 2(1){6(1+"\\7"+0)}2("8");',10,10,'a|msg|MsgBox|Hello|var|World|alert|n|OK|function'.split('|'),0,{}))

Но ничего не стоит его восстановить с помощью jsbeautifier.org либо просто убрать eval и получить исходный код, многое потеряем, но смысл кода восстановим. Ну и с первого взгляда мы видим, что перед нами JavaScript.

Все это были цветочки под катом жесткие методы обфускации.
Читать дальше →

Раздвоение личности или еще раз о MultiseatX

Reading time10 min
Views15K
Хочу рассказать одну историю успеха, произошедшую в моей семье.

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

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

Так что ограничений по линии железа нет(хотя подводные камни есть, их я опишу позже), осталось разобраться какой софт для этого использовать.
Последние 8 лет на моем домашнем компьютере установлена Linux, так что я буду использовать ее, конкретно — kubuntu, но для интереса поискал решения для Windows. Судя по отзывам, программа АСТЕР позволяет это сделать, но я пока не тестировал ее, так что конкретно сказать не могу. Кстати ПО платное — около 2000 руб. Не забыт также Windows MultiPoint Server, но видео там не используешь. Делать это на OS X как минимум нецелесообразно из-за цены, как максимум из-за того что просто нет компьютеров Apple с мощной игровой графикой (даже две самые мощные FirePro последнего Mac Pro проигрывают одной GTX780).
Читать дальше →

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

Reading time4 min
Views167K
«Право налогоплательщика избегать уплаты налогов с использованием всех разрешенных законом способов никем не может быть оспорено. Каждый имеет право вести свои финансовые дела таким образом, чтобы свести соответствующие платежи к минимуму…»
Дж. Сандерленд,
Судья Верховного Суда США


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

Как я написал web-приложение, используя только clojure

Reading time4 min
Views26K


Недавно я познакомился с интересным языком — clojure. Мне сразу понравились ленивые и иммутабельные коллекции, stm, макросы, обилие скобочек и dsl на все случаи жизни.
И я решил попробовать сделать web-приложение, используя только clojure.

Приложение


Было задумано создать простую искалку субтитров, которая:
  • каждые 5 минут индексирует новые субтитры на addicted, notabenoid и других сервисах;
  • имеет одностраничный web-интерфейс с поиском без перезагрузки страницы;
  • показывает в web-интерфейсе количество проиндексированных субтитров и меняет его при появлении новых;
  • имеет простое api для взаимодействия с десктопным клиентом.
Читать дальше →

Сравнение юзабилити современных браузеров со старой Оперой

Reading time6 min
Views129K

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

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

Чуть больше года назад компания Opera объявила, что они делают новый браузер на основе форка Chromium от Google (Blink).

Прошёл год, но от того User Experience, который был раньше, Опера ой как далеко, жалкий младший брат Chrome. Даже относительно молодой Яндекс.Браузер развивается куда стремительнее и имеет своё лицо. Я буду сравнивать старую Opera с Chrome, как представителем браузеров на WebKit и Blink, и Firefox. И прошу учесть, что это, всё-таки, моё личное мнение.

Осторожно, много картинок
Читать дальше →

Linux для профессионалов: видео-монтаж (и немножко композинг)

Reading time9 min
Views85K
Привет коллеги. Думаю, пришло время продолжить начатый некогда цикл «Linux для профессионалов». Сегодня я бы хотел рассказать о монтаже видео на примере ролика, который мы сняли прошлым летом для нашей пражской затеи с электронным GPS аудио-путеводителем.

Собственно ролик (если быть точным, то это демонстрационный мини-фильм).



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

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

Итак, по-порядку.
Читать дальше →

Кросскомпиляция библиотек под iOS, делаем это правильно

Reading time4 min
Views11K
Во время разработки большого проекта наступает такой момент, когда надо встроить в приложение библиотеку из мира open source с подходящей лицензией. Например, вам захотелось ускорить декодирование картинок, или понадобился sqlite3 с fts4, или нужны какие-то плюшки из libicu, которых нету в системной libicucore.

Для этого библиотеку, которая понадобилась, нужно будет собрать для 5 архитектур: armv7, armv7s, arm64, i386, x86_64. С кросскомпиляцией есть много подводных камней, на которые не хотелось бы наткнуться, когда есть уже проверенные решения. В этом коротком посте я расскажу об автоматизации сборки библиотек на примере protobuf и sqlite3.
Читать дальше →

Консенсус в распределенных системах. Paxos

Reading time7 min
Views42K
В последнее время в научных публикациях всё чаще упоминается алгоритм достижения консенсуса в распределенных системах под названием Paxos. Среди таких публикаций ряд работ сотрудников Google (Chubby, Megastore, Spanner) ранее уже частично освещенных на хабре, архитектуры систем WANdisco, Ceph и пр. В то же время, сам алгоритм Paxos считается сложным для понимания, хоть и основывается он на элементарных принципах.

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

XKB: перенастроим клавиши под себя любимого

Reading time8 min
Views101K
В один прекрасный день надоедает нажимать Shift, чтобы вывелся символ ~ вместо `.
Надоедает тянуться до Esc, при этом клавишей CapsLock пользуетесь РЕДКО.
Надоедает смещать кисть вниз и нажимать Ctrl/Cmd/Win слабым мизинчиком, либо, не дай бог, тянуться до них большим пальцем.
Надоедает лезть за PgUp, PgDn, Home и End, двигая руку каждый раз, чтобы всего лишь промотать страницу вниз.
Надоедает каждый раз, когда вы делаете опечатку, со злобой смотреть на клавиатуру в поисках кнопки Backspace.



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

Зачем это всё?


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

Многие раскладки для печати (Dvorak, Colemak и т.п.) сильно улучшают расположение клавиш, ставя их ближе к тем местам, куда нужно меньше тянуться. Но при этом совершенно забывают о модификаторах, спец. символах и командных клавишах (Enter, Backspace, Tab, Esc, Delete). А мы подумаем о том, как улучшить существующее положение вещей.

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

Логика мышления. Часть 1. Нейрон

Reading time10 min
Views320K


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

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

И снова про опасность eval()

Reading time6 min
Views121K
Сколько было сломано копий при обсуждении вопроса «Возможно ли сделать eval безопасным?» — невозможно сосчитать. Всегда находится кто-то, кто утверждает, что нашёл способ оградиться от всех возможных последствий выполнения этой функции.
Когда мне понадобилось найти развёрнутый ответ на этот вопрос, я наткнулся на один пост. Меня приятно удивила глубина исследования, так что я решил, что это стоит перевести.

Коротко о проблеме


В Python есть встроенная функция eval(), которая выполняет строку с кодом и возвращает результат выполнения:
assert eval("2 + 3 * len('hello')") == 17

Это очень мощная, но в то же время и очень опасная инструкция, особенно если строки, которые вы передаёте в eval, получены не из доверенного источника. Что будет, если строкой, которую мы решим скормить eval'у, окажется os.system('rm -rf /')? Интерпретатор честно запустит процесс удаления всех данных с компьютера, и хорошо ещё, если он будет выполняться от имени наименее привилегированного пользователя (в последующих примерах я буду использовать clear (cls, если вы используете Windows) вместо rm -rf /, чтобы никто из читателей случайно не выстрелил себе в ногу).
Читать дальше →

Архитектура сервера онлайн-игры на примере Skyforge

Reading time12 min
Views193K
Привет, Хабр! Я Андрей Фролов, ведущий программист, работаю в Mail.Ru над Next-Gen MMORPG Skyforge. Вы могли читать мою статью про архитектуру баз данных в онлайн-играх. Сегодня я буду раскрывать секреты, касающиеся устройства сервера Skyforge. Постараюсь рассказать максимально подробно, с примерами, а также объясню, почему было принято то или иное архитектурное решение. По нашему серверу без преувеличения можно написать целую книгу, поэтому для того, чтобы уложиться в статью, мне придется пройтись только по основным моментам.

image

Читать дальше →

Заблуждения программистов об именах

Reading time3 min
Views90K
Две недели назад на Хабре публиковался перевод «Заблуждения программистов о времени», который по своей структуре и стилю основан на этом классическом тексте Патрика Макензи, опубликованном два года назад. Поскольку заметка о времени была крайне благоприятно воспринята аудиторией, то, очевидно, имеет смысл перевести и исходную статью об именах и фамилиях.

Джон Грэхем-Камминг (John Graham-Cumming) сегодня жаловался в своём блоге, что компьютерная система, с которой он работал, не приняла его фамилию из-за недопустимых символов. Конечно, там нет недопустимых символов, потому что любой способ, как человек представляет себя, — по определению — является подходящим идентификатором. Джон выразил сильную досаду насчёт данной ситуации, и он имеет полное право, потому что имя — суть нашей индивидуальности, практически по определению.
Читать дальше →

Заблуждения программистов относительно времени

Reading time3 min
Views92K
За последние пару лет я потратил много времени на дебаггинг чужих тестов. Это была интересная работа, иногда расстраивающая, но всегда поучительная. Кто-то может подумать, что в тестах нет багов, но конечно баги есть везде, и тесты не исключение.

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

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

Про компоновку, dependency hell и обратную совместимость

Reading time11 min
Views23K
В данной статье речь пойдёт о высокоуровневом взгляде на компоновку. Где ищутся разделяемые библиотеки на Linux, BSD*, Mac OS X, Windows, от которых зависят приложения? Что делать с обратной совместимостью? Как бороться с адом зависимостей?

Читать дальше →

На электричестве до Крыма

Reading time7 min
Views256K
«Сколько жрёт, сколько прёт и где тут двигатель» — классические вопросы на каждом светофоре. Е-байк, летящий по проспекту со скоростью 80км\ч, рвёт шаблоны соседей по потоку раз и навсегда. Но то сугубо утилитарные поездки, не отличающиеся особой автономией. Сама идея о загородном вояже может показаться абсурдной. В первую очередь мыслью – «А где в пути искать розетки?». Но обо все по порядку. Хотя самые ленивые могут сразу смотреть последний ролик.
Типичная дальнобойность самодельного электровелосипеда не превышает 50км (серийные муляжи со свинцовыми аккумуляторами даже не рассматриваются). Литий и только литий. В среднем надо около 1Квтч электричества на преодоление указанной выше дистанции при 50км\ч. Пословица «тише едешь – дальше будешь» актуальна как никогда. При междугородних перегонах требуется покрывать 100-150км, отсюда вытекает требование к набортной емкости 2.5+Квтч. Это довольно серьезная емкость, поэтому первым шагом стала замена батареи на более «долгоиграющую». Так возник проект «Крымский чемодан», 240 элементов 18650 Li-ion LG D1:



Читать дальше →

Information

Rating
Does not participate
Location
Россия
Date of birth
Registered
Activity