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

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


      invisible symbols in diff

      Но есть нюанс
    • 64-битная арифметика в браузере и WebAssembly

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


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

        Читать дальше →
      • Репликация без конфликтов: CRDT в теории и на практике

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

          Читать дальше →
        • Как я делал веб-версию KeePass

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



            Под катом расскажу о проблемах, с которыми я столкнулся, и способах их решения
            Читать дальше →
          • Worker-ы и shared worker-ы

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

              Читать дальше →
              • +38
              • 32,5k
              • 5
            • Node-Webkit без вебкита

                Как-то мы обсуждали десктопные приложения nw.js. Всё хорошо, но необходимость распространять весь движок браузера (который с течением времени и добавлением новых фич меньше не становится и сейчас весит сжатый 30МБ) — удручает.
                А что если сделать модуль для node.js, умеющий показывать UI в системном браузере?
                Под катом расскажу о попытке — как оно, стоит ли усилий, можно ли использовать, и что в результате получилось.
                Читать дальше →
              • Поле с паролем

                  Поля для ввода паролей в браузере встречаются в разных случаях:
                  • при регистрации;
                  • на форме логина;
                  • пароль для чего-то абстрактного.
                  Каждый раз всплывают одни и те же проблемы и возникает необходимость в одинаковых шаблонных фичах. Чтобы облегчить эту рутинную задачу, я сделал js-библиотеку, которую можно конфигурировать под разные случаи — о ней и будет этот пост.
                  Что из этого получилось
                • Как работает Lytro, или ещё один обзор


                    Lytro – пленоптическая камера, не требующая фокусировки, выпускаемая компанией Lytro (стартап Ren Ng – выпускника Стенфорда). Камера работает методом световых полей, о принципе работы которых я и постараюсь рассказать (под катом трафик!).
                    Читать дальше →
                  • Глубина резкости в компьютерной графике

                    • Перевод
                    DoFВ отличии от человеческого глаза, компьютер рендерит всю сцену в фокусе. И камера, и глаз же имеют ограниченную глубину резкости вследствие конечного диаметра апертуры зрачка или объектива. Для достижения большего фотореализма рекомендуется использовать эффект глубины резкости в изображениях, получаемых на компьютере. Кроме того, управление глубиной резкости помогает раскрыть художественный замысел автора, выделив важный по смыслу объект.
                    До сих пор задача изображения реалистичной глубины резкости в компьютерной графике полностью не решена. Существует множество решений, обладающих плюсами и минусами, применимых в разных случаях. Мы рассмотрим самые популярные на сегодняшний момент.
                    Читать дальше →
                  • Обрабатываем картинки средствами Photoshop и ExtendScript Toolkit

                      Часто нам бывает надо сделать что-то с пачкой картинок. Есть несколько способов добиться этого:
                      • используя ImageMagick – очень удобная консольная утилита, много чего умеющая
                      • на The GIMP – там есть Scheme (диалект lisp-а) и Python
                      • штатными средствами: PHP+gd / Powershell+System.Drawing / Python + PIL
                      • в photoshop-е на JScript, VBScript или AppleScript
                      Плюсы минусы последнего способа рассмотрим под катом. В качестве бонуса посмотрим на недокументированное API Photoshop-а.
                      Читать дальше →
                    • Генерируем OfficeOpenXML-документы за 5 минут

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

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

                        Читать дальше →
                      • Правильное логгирование в Microsoft .NET Framework

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


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

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


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

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

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

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

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

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


                            Под катом подробнее о каждом.
                            Читать дальше →