Pull to refresh
224
0

Web engineer

Send message

Текст, которого нет

Reading time 4 min
Views 81K

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


invisible symbols in diff

Но есть нюанс
Total votes 72: ↑70 and ↓2 +68
Comments 42

64-битная арифметика в браузере и WebAssembly

Reading time 9 min
Views 16K

WebAssembly активно разрабатывается и уже достиг состояния, когда собранный модуль можно попробовать в Chrome Canary и Firefox Nightly, включив флажок в настройках.


Сравним производительность арифметических вычислений с 64-битными числами в WebAssembly, asm.js, PNaCl и native-коде. Посмотрим на инструменты, которые есть для WebAssembly сейчас, и заглянем в недалёкое будущее.

Читать дальше →
Total votes 56: ↑56 and ↓0 +56
Comments 11

Репликация без конфликтов: CRDT в теории и на практике

Reading time 7 min
Views 32K
В распределённых хранилищах или редакторах каких-либо данных часто бывает нужна поддержка внесения изменений оффлайн, без блокировок и конфликтов. Для этого применяются разные подходы, один из которых — алгоритмы и типы данных conflict-free replicated data type (CRDT).

Читать дальше →
Total votes 13: ↑13 and ↓0 +13
Comments 12

Как я делал веб-версию KeePass

Reading time 6 min
Views 80K
Как-то мне надо было добавить в админку просмотр списка паролей. База хранилась на сервере в формате KeePass (kdbx v2), сервер был на ноде — недолго думая, я взял первый попавшийся пакет и сделал. А потом понадобилось то же самое, но прямо у пользователя в браузере, без сервера. Ничего не нашлось. Первым желанием было форкнуть либу и заменить использование node api, но от первого просмотра кода желание пропало, решил сделать сам.



Под катом расскажу о проблемах, с которыми я столкнулся, и способах их решения
Читать дальше →
Total votes 134: ↑133 and ↓1 +132
Comments 162

Worker-ы и shared worker-ы

Reading time 5 min
Views 54K
Во всех популярных языках есть потоки (threads). В браузерном javascript для параллельной обработки используются worker-ы.
Под катом рассказ о том, как ими пользоваться, какие ограничения есть в воркерах и об особенностях взаимодействия с ними в разных браузерах.

Читать дальше →
Total votes 40: ↑39 and ↓1 +38
Comments 5

Node-Webkit без вебкита

Reading time 4 min
Views 16K
Как-то мы обсуждали десктопные приложения nw.js. Всё хорошо, но необходимость распространять весь движок браузера (который с течением времени и добавлением новых фич меньше не становится и сейчас весит сжатый 30МБ) — удручает.
А что если сделать модуль для node.js, умеющий показывать UI в системном браузере?
Под катом расскажу о попытке — как оно, стоит ли усилий, можно ли использовать, и что в результате получилось.
Читать дальше →
Total votes 29: ↑29 and ↓0 +29
Comments 16

Поле с паролем

Reading time 4 min
Views 124K
Поля для ввода паролей в браузере встречаются в разных случаях:
  • при регистрации;
  • на форме логина;
  • пароль для чего-то абстрактного.
Каждый раз всплывают одни и те же проблемы и возникает необходимость в одинаковых шаблонных фичах. Чтобы облегчить эту рутинную задачу, я сделал js-библиотеку, которую можно конфигурировать под разные случаи — о ней и будет этот пост.
Что из этого получилось
Total votes 135: ↑125 and ↓10 +115
Comments 78

Как работает Lytro, или ещё один обзор

Reading time 10 min
Views 61K

Lytro – пленоптическая камера, не требующая фокусировки, выпускаемая компанией Lytro (стартап Ren Ng – выпускника Стенфорда). Камера работает методом световых полей, о принципе работы которых я и постараюсь рассказать (под катом трафик!).
Читать дальше →
Total votes 136: ↑133 and ↓3 +130
Comments 58

Глубина резкости в компьютерной графике

Reading time 17 min
Views 30K
DoFВ отличии от человеческого глаза, компьютер рендерит всю сцену в фокусе. И камера, и глаз же имеют ограниченную глубину резкости вследствие конечного диаметра апертуры зрачка или объектива. Для достижения большего фотореализма рекомендуется использовать эффект глубины резкости в изображениях, получаемых на компьютере. Кроме того, управление глубиной резкости помогает раскрыть художественный замысел автора, выделив важный по смыслу объект.
До сих пор задача изображения реалистичной глубины резкости в компьютерной графике полностью не решена. Существует множество решений, обладающих плюсами и минусами, применимых в разных случаях. Мы рассмотрим самые популярные на сегодняшний момент.
Читать дальше →
Total votes 156: ↑152 and ↓4 +148
Comments 38

Обрабатываем картинки средствами Photoshop и ExtendScript Toolkit

Reading time 11 min
Views 41K
Часто нам бывает надо сделать что-то с пачкой картинок. Есть несколько способов добиться этого:
  • используя ImageMagick – очень удобная консольная утилита, много чего умеющая
  • на The GIMP – там есть Scheme (диалект lisp-а) и Python
  • штатными средствами: PHP+gd / Powershell+System.Drawing / Python + PIL
  • в photoshop-е на JScript, VBScript или AppleScript
Плюсы минусы последнего способа рассмотрим под катом. В качестве бонуса посмотрим на недокументированное API Photoshop-а.
Читать дальше →
Total votes 42: ↑34 and ↓8 +26
Comments 36

Генерируем OfficeOpenXML-документы за 5 минут

Reading time 4 min
Views 76K
Часто надо бывает из приложения на ASP.NET сгенерировать отчёт на сервере в OpenXML-формате.

Есть несколько привычных способов сделать это:
  1. «Нашёл, слинковал, заюзал» – идём в Гугл, ищем библиотеку для генерации docx или xlsx, подключаем, разбираемся, генерируем. Это привычно, но долго.
  2. «Фу» – использовать COM. Это не рекомендуется, требует установленного Microsoft Office на сервере, не очень thread-safe, с x64 не дружит и вообще старомодно.
  3. «Ъ» – разобраться с форматом, собрать из XML и зазипать. Брутально.
  4. «Microsoft way» – об этом способе рассказывается под катом.

Читать дальше →
Total votes 71: ↑63 and ↓8 +55
Comments 31

Правильное логгирование в Microsoft .NET Framework

Reading time 6 min
Views 108K

Зачем нужны логи


Очевидно, что логи делаются для разработчиков, чтобы облегчить им (нам) жизнь. Основные цели, ради которых существуют логи:
  • сказать, что же делает система прямо сейчас, не прибегая к помощи отладчика, т.к. это иногда не оправдано;
  • провести «расследование» обстоятельств, которые привели к определённому состоянию системы (например, падению или багу);
  • проанализировать, на что тратится больше времени/ресурсов, т.е. профилирование.

Примитивный подход


Казалось бы, всё просто:
public static void Log(string message) {
 File.AppendAllText("log.txt", message);
}

Зачем что-то ещё придумывать, подключать внешние библиотеки, настраивать конфиги?
На практике, оказывается, что всё не так: одного лог-файла становится уже недостаточно, возникают проблемы с многопоточностью, форматом логов, записью времени, производительностью итд.
Какие же фичи должен поддерживать хороший логгер?
Читать дальше →
Total votes 100: ↑77 and ↓23 +54
Comments 40

Обзор обфускаторов для .NET

Reading time 5 min
Views 99K
Смею полагать, %username%, что ты знаешь, что такое обфускация, зачем она нужна в мире .NET и чём отличие control flow-обфускации от шифрования MSIL-кода.
Предполагается также, что ты видел .NET Reflector и знаком с каким-либо символьным отладчиком, я приведу примеры на WinDbg.

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

Общие выводы и рассуждения

  • Бесплатные обфускаторы весьма слабые и пригодны только для простого переименования. О control flow знают из них лишь немногие;
  • Существуют весьма неплохие решения (control flow, MSIL encryption) стоимостью до $500;
  • Взрослые решения стоят около 5000, но к сожалению, для многих из них есть распаковщики. Некоторые из них крякнуты.
    Крякнули обфускатор — значит поняли его систему защиты. На помойку такой обфускатор.
  • Есть решения «против быдлохакеров» — сборка шифруется полностью и расшифровывается на лету. Взломать символьным отладчиком такую сборку проще простого.


Под катом подробнее о каждом.
Читать дальше →
Total votes 83: ↑65 and ↓18 +47
Comments 72

Information

Rating
Does not participate
Location
Amsterdam, Noord-Holland, Нидерланды
Registered
Activity