Текстовые редакторы, основная задача которых — отображение моноширинного шрифта (например, кода), должны, как и следует из названия, показывать символы одной ширины.
Web engineer
64-битная арифметика в браузере и WebAssembly
9 min
16KWebAssembly активно разрабатывается и уже достиг состояния, когда собранный модуль можно попробовать в Chrome Canary и Firefox Nightly, включив флажок в настройках.
Сравним производительность арифметических вычислений с 64-битными числами в WebAssembly, asm.js, PNaCl и native-коде. Посмотрим на инструменты, которые есть для WebAssembly сейчас, и заглянем в недалёкое будущее.
Репликация без конфликтов: CRDT в теории и на практике
7 min
32KВ распределённых хранилищах или редакторах каких-либо данных часто бывает нужна поддержка внесения изменений оффлайн, без блокировок и конфликтов. Для этого применяются разные подходы, один из которых — алгоритмы и типы данных conflict-free replicated data type (CRDT).
Как я делал веб-версию KeePass
6 min
80KКак-то мне надо было добавить в админку просмотр списка паролей. База хранилась на сервере в формате KeePass (kdbx v2), сервер был на ноде — недолго думая, я взял первый попавшийся пакет и сделал. А потом понадобилось то же самое, но прямо у пользователя в браузере, без сервера. Ничего не нашлось. Первым желанием было форкнуть либу и заменить использование node api, но от первого просмотра кода желание пропало, решил сделать сам.
Под катом расскажу о проблемах, с которыми я столкнулся, и способах их решения
Под катом расскажу о проблемах, с которыми я столкнулся, и способах их решения
Worker-ы и shared worker-ы
5 min
54KВо всех популярных языках есть потоки (threads). В браузерном javascript для параллельной обработки используются worker-ы.
Под катом рассказ о том, как ими пользоваться, какие ограничения есть в воркерах и об особенностях взаимодействия с ними в разных браузерах.
Под катом рассказ о том, как ими пользоваться, какие ограничения есть в воркерах и об особенностях взаимодействия с ними в разных браузерах.
Node-Webkit без вебкита
4 min
16KКак-то мы обсуждали десктопные приложения nw.js. Всё хорошо, но необходимость распространять весь движок браузера (который с течением времени и добавлением новых фич меньше не становится и сейчас весит сжатый 30МБ) — удручает.
А что если сделать модуль для node.js, умеющий показывать UI в системном браузере?
Под катом расскажу о попытке — как оно, стоит ли усилий, можно ли использовать, и что в результате получилось.
А что если сделать модуль для node.js, умеющий показывать UI в системном браузере?
Под катом расскажу о попытке — как оно, стоит ли усилий, можно ли использовать, и что в результате получилось.
Поле с паролем
4 min
124KПоля для ввода паролей в браузере встречаются в разных случаях:
- при регистрации;
- на форме логина;
- пароль для чего-то абстрактного.
Jot Touch − стилус для iPad
3 min
105K— Who wants a stylus?
— I do!
Компания adonit не так давно обновила линейку стилусов для iPad новым Jot Touch — стилусом, чувствительным к нажатию.
Радио в виде Лондонского метро
1 min
24K
Translation
Японский дизайнер Yuri Suzuki сделал работоспособное радио в виде схемы Лондонского метрополитена:
Как работает Lytro, или ещё один обзор
10 min
61KLytro – пленоптическая камера, не требующая фокусировки, выпускаемая компанией Lytro (стартап Ren Ng – выпускника Стенфорда). Камера работает методом световых полей, о принципе работы которых я и постараюсь рассказать (под катом трафик!).
Глубина резкости в компьютерной графике
17 min
30K
Translation
В отличии от человеческого глаза, компьютер рендерит всю сцену в фокусе. И камера, и глаз же имеют ограниченную глубину резкости вследствие конечного диаметра апертуры зрачка или объектива. Для достижения большего фотореализма рекомендуется использовать эффект глубины резкости в изображениях, получаемых на компьютере. Кроме того, управление глубиной резкости помогает раскрыть художественный замысел автора, выделив важный по смыслу объект.
До сих пор задача изображения реалистичной глубины резкости в компьютерной графике полностью не решена. Существует множество решений, обладающих плюсами и минусами, применимых в разных случаях. Мы рассмотрим самые популярные на сегодняшний момент.
До сих пор задача изображения реалистичной глубины резкости в компьютерной графике полностью не решена. Существует множество решений, обладающих плюсами и минусами, применимых в разных случаях. Мы рассмотрим самые популярные на сегодняшний момент.
Обрабатываем картинки средствами Photoshop и ExtendScript Toolkit
11 min
41KЧасто нам бывает надо сделать что-то с пачкой картинок. Есть несколько способов добиться этого:
- используя ImageMagick – очень удобная консольная утилита, много чего умеющая
- на The GIMP – там есть Scheme (диалект lisp-а) и Python
- штатными средствами: PHP+gd / Powershell+System.Drawing / Python + PIL
- в photoshop-е на JScript, VBScript или AppleScript
Генерируем OfficeOpenXML-документы за 5 минут
4 min
76KЧасто надо бывает из приложения на ASP.NET сгенерировать отчёт на сервере в OpenXML-формате.
Есть несколько привычных способов сделать это:
Есть несколько привычных способов сделать это:
- «Нашёл, слинковал, заюзал» – идём в Гугл, ищем библиотеку для генерации docx или xlsx, подключаем, разбираемся, генерируем. Это привычно, но долго.
- «Фу» – использовать COM. Это не рекомендуется, требует установленного Microsoft Office на сервере, не очень thread-safe, с x64 не дружит и вообще старомодно.
- «Ъ» – разобраться с форматом, собрать из XML и зазипать. Брутально.
- «Microsoft way» – об этом способе рассказывается под катом.
Правильное логгирование в Microsoft .NET Framework
6 min
108KЗачем нужны логи
Очевидно, что логи делаются для разработчиков, чтобы облегчить им (нам) жизнь. Основные цели, ради которых существуют логи:
- сказать, что же делает система прямо сейчас, не прибегая к помощи отладчика, т.к. это иногда не оправдано;
- провести «расследование» обстоятельств, которые привели к определённому состоянию системы (например, падению или багу);
- проанализировать, на что тратится больше времени/ресурсов, т.е. профилирование.
Примитивный подход
Казалось бы, всё просто:
public static void Log(string message) {
File.AppendAllText("log.txt", message);
}
Зачем что-то ещё придумывать, подключать внешние библиотеки, настраивать конфиги?
На практике, оказывается, что всё не так: одного лог-файла становится уже недостаточно, возникают проблемы с многопоточностью, форматом логов, записью времени, производительностью итд.
Какие же фичи должен поддерживать хороший логгер?
Обзор обфускаторов для .NET
5 min
99KСмею полагать, %username%, что ты знаешь, что такое обфускация, зачем она нужна в мире .NET и чём отличие control flow-обфускации от шифрования MSIL-кода.
Предполагается также, что ты видел .NET Reflector и знаком с каким-либо символьным отладчиком, я приведу примеры на WinDbg.
Темой обфускаторов я занимаюсь довольно долго, но недавно пришлось таки актуализировать знания.
Не так давно передо мной стояла задача выбрать хороший обфускатор для .NET4. Просмотрев кучу софта, я составил небольшой обзор, куда постарался включить самые известные обфускаторы.
Под катом подробнее о каждом.
Предполагается также, что ты видел .NET Reflector и знаком с каким-либо символьным отладчиком, я приведу примеры на WinDbg.
Темой обфускаторов я занимаюсь довольно долго, но недавно пришлось таки актуализировать знания.
Не так давно передо мной стояла задача выбрать хороший обфускатор для .NET4. Просмотрев кучу софта, я составил небольшой обзор, куда постарался включить самые известные обфускаторы.
Общие выводы и рассуждения
- Бесплатные обфускаторы весьма слабые и пригодны только для простого переименования. О control flow знают из них лишь немногие;
- Существуют весьма неплохие решения (control flow, MSIL encryption) стоимостью до $500;
- Взрослые решения стоят около 5000, но к сожалению, для многих из них есть распаковщики. Некоторые из них крякнуты.
Крякнули обфускатор — значит поняли его систему защиты. На помойку такой обфускатор. - Есть решения «против быдлохакеров» — сборка шифруется полностью и расшифровывается на лету. Взломать символьным отладчиком такую сборку проще простого.
Под катом подробнее о каждом.
Information
- Rating
- Does not participate
- Location
- Amsterdam, Noord-Holland, Нидерланды
- Registered
- Activity