Search
Write a publication
Pull to refresh
0
0
Дмитрий @d9k

TypeScript/SQL разработчик

Send message

Алгоритм определения попадания точки в контур на основе комплексного анализа

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

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

Sugar — подслащённый Javascript

Reading time6 min
Views5.4K
Что же такое Sugar?
Это javascript-библиотека для работы со встроенными объектами javascript, которая:
  • расширяет встроенные объекты языка, добавляя полезные и интуитивно-понятные методы;
  • добавляет кросс-браузерную функциональность, где она сломана или ее нет;
  • полностью покрыта тестами;
  • легко взаимодействует с другими фреймоворками и сторонним кодом;
  • проста в понимании и использовании

В качестве примера использования, автор приводит вот такой код:
getLatestTweets(function(t) {
    var users = t.map('user').unique();
    var total = users.sum('statuses_count').format();
    var top = users.max('followers_count').first();
    var count = top.followers_count.format();
    var since = Date.create(top.created_at);
    return users.length + ' users with a total of ' + total + ' tweets.\n' +
    top.screen_name + ' is the top with ' + count + ' followers\n' +
    'and started tweeting ' + since.relative() + '.';
});


Не правда ли, код читается почти как английский текст.
Самые нетерпеливые могут изучить предоставляемые функции по этой ссылке, а остальных ждёт краткое описание под катом.
Читать дальше →

Замыкания и объекты JavaScript. Переизобретаем интерпретатор

Reading time12 min
Views25K
Обычно концепции или парадигмы программирования объясняют либо описательно — «разжёвывая» новые идеи простыми словами, либо метафорически — уподобляя их хорошо знакомым аудитории предметам и понятиям. Но ни первый, ни второй способ не дает такого точного и полного представления о предмете, как взгляд с точки зрения низкоуровневой реализации.

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

JavaScript, как никакой другой язык, нуждается в именно таком объяснении. Функциональная природа, скрытая за Си-подобным синтаксисом, и непривычная прототипная модель наследования поначалу сильно сбивают с толку. Давайте мысленно понизим уровень JavaScript до простого процедурного, наподобие Си. Отталкиваясь от этого «недоязыка», переизобретем функциональное и объектно-ориентированное программирование.
Читать дальше →

Беспилотник WASP научился перехватывать GSM-трафик

Reading time2 min
Views3.5K


Год назад американские хакеры-авиалюбители Майк Тэсси (Mike Tassey) и Ричард Перкинс (Richard Perkins) сконструировали первую версию беспилотника WASP, который облетал территорию по заданному маршруту и собирал информацию о WiFi-сетях. Они взяли модель МиГ-23, установили на неё компьютер Via Epia 10000G Pico ITX (1ГГц Via C7, 1 ГБ RAM) под управлением Windows XP, интерфейс телеметрии ArduStation и систему автоматического пилотирования ArduPilot. Свою разработку они назвали Wireless Aerial Surveillance Platform (WASP) и выложили в интернет ссылки на всю необходимую информацию по сборке (по понятным причинам, они не могут сами публиковать пошаговую инструкцию).
Читать дальше →

Локальная сеть на светодиодах (800 Mbps)

Reading time1 min
Views8.3K
Оказывается, самые обычные светодиоды вполне подходят для передачи данных на высоких скоростях. Достаточно только написать софт для модуляции мерцания LED и поставить фотоприёмник на «другом конце линии» — вот и выходит готовый канал VLC (Visible Light Communication), то есть линия коммуникации в видимом свете. Похоже на оптоволокно, только по воздуху.

Инженеры из Института телекоммуникаций Фраунгофера (Берлин) недавно поставили новый рекорд по скорости передачи данных в VLC-канале на светодиодах четырёх цветов: 800 Мбит/с. Им удалось поднять работоспособную WLAN, где каждый узел видел соседей в радиусе примерно 1,8 м.
Читать дальше →

Как современные кодеки изображений жмут звук. JPEG2000 vs MP3

Reading time3 min
Views3.8K
В этом эксперименте популярный формат сжатия изображений JPEG2000 будет использоваться для несвойственной ему задачи, хранения звукового файла.

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

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

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

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

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

Визуализация аудио в HTML5

Reading time7 min
Views20K
Наше практическое погружение описывает необычный сценарий — мы будем говорить не о том, что может HTML5, а о тех возможностях, которые на сегодня он еще не предоставляет и как эту неувязку можно обходить на практике.



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

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

Шортики — короткие и смешные, или как мы готовили сайт к Хабраэффекту

Reading time7 min
Views3.2K


Намба 0: Вступление

Однажды, задумчиво листая башорг, я вдруг понял, что большинство цитат довольно длинные и очень часто их просто лень читать. В наш век всеобщей спешки — на это уходит много времени. Таким образом родился новый формат: Шортики (от английского слова Short — короткий). Шортик — это короткая (из одного-двух предложений) шутка, жестко ограниченная 255 символами (чтобы не повадно было).

Как раз в этот момент я хотел подучить программирование и искал несложную задачу. Сайт я накидал довольно быстро — за пару вечеров, рассказал о нем коллегам по работе и паре знакомых в IRC, и собирался уже о нем забыть, как вдруг обнаружил, что за два дня сайт посетило 500 человек, из которых чуть ли не треть подписалась на RSS. Стало понятно, что концепция людям понравилась. Немного прилизав сайт внешне, я решился показать его Хабрасообществу — Шортики — короткие и смешные, прошу любить и жаловать.

P.S. Учитывая то, что это не совсем стартап (проект пока некоммерческий, да и «стартап» — слишком громкое слово для моей поделки), приобретенная за годы пребывания на сайте хабрасовесть не позволила мне написать нетехническую статью. Поэтому, под катом вас ждет занимательная история о том, как мы готовили Шортики к Хабраэффекту.

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

Функция К.O'Nsole.log для отладки в разных браузерах

Reading time5 min
Views2.1K
Хорош console.log, а нахваливать дальше некуда. И поддерживается не везде, и многобуквием страдает. И появляется задача иметь несложную функцию, настолько же гибкую, как console.log (или более), но приспособленную к разным браузерам без переделок, чтобы вывести одно или несколько значений. В отладке часто нужны текстовые поясняющие заголовки в строке, поэтому оказалось удобным иметь метод, добавленный к строке (объект String) с именем Alert, выполняющий то же самое, что и console.log и выводящий контекст-строку впереди списка аргументов. (Строку в апострофах, потому что удобно затем копировать и искать по кодам, где такой заголовок написан.)
Читать дальше →

Механика казуальных игр

Reading time16 min
Views15K
На хабрахабре периодически предпринимаются попытки описания процесса игроделания с самых разных сторон — от воплощения 3D-графики до создания сетевых протоколов. Эти темы, безусловно, важны, однако довольно узкие. В данной статье я попробую использовать более широкий подход — рассмотрю принцип создания игрового движка для т.н. казуальных игр. Описываемая механика вполне подойдет для создания всяческих пакманов, арканоидов, платформеров и пр. Описание процесса будет на примере примитивного scrolldown шутера (из ностальгических чувств к Zybex и Xevious) — летаем по полю, сбиваем метеориты. Инструмент — Qt.
Читать дальше →

NeoAxis Game Engine 1.0 наконец-то увидел свет

Reading time4 min
Views8.5K
Хочу опубликовать топик, обзор релиза кросс-платформенного игрового движка NeoAxis, так как у авторов пока нет аккаунта на Хабре. Далее от первого лица:

Уже более шести лет мы (компания NeoAxis Group) ведем разработку нового игрового 3D движка, начинавшегося как задумка энтузиаста-одиночки, но превратившегося в полномасштабный проект, над которым теперь работает международная команда специалистов. После стольких лет упорного труда мы рады сообщить, что NeoAxis Engine достиг версии 1.0!

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

Пьеса «Разработка многопользовательской сетевой игры.» Часть 1: Архитектура

Reading time3 min
Views21K
image

Часть 2: Протокол
Часть 3: Клиент-серверное взаимодействие
Часть 4: Переходим в 3D

В общем, как и обещал, публикую серию статей по разработке многопользовательской сетевой игры. Изначально я хотел просто накатать статейку по разработке серверной части на интересном языке Scala. Но понял, что одной статейкой для развертывания темы не получится обойтись. А писать очередной топик обо всем и ни очем, не хотелось изначально. Поэтому встречайте пьесу в трех действиях. В течении которой мы разработаем архитектуру проекта, реализуем серверную и клиентскую части…
Все помнят прикольные танчики на денди?
Ну вот на примере этих танчиков и будем разрабатывать сервер и клиент.

Добро пожаловать в зрительный зал.

Веб-дизайн. Каждому устройству свое представление

Reading time5 min
Views11K
Регулярно увеличивающееся количество разнообразных устройств предоставляющих доступ во «Всемирную паутину» радует практически любого гика, но зачастую огорчает разработчиков и дизайнеров сайтов. В абсолютном большинстве сайтов совершенно нет поддержки ничего, кроме браузеров обычного компьютера, да и пресловутая кросбраузерность не всегда реализована в полном объеме. Хоть разработчики устройств и стремятся свести к минимуму различия в необходимом представлении, но не всегда это возможно по техническим причинам.

Стоит ли поддерживать различные методы доступа к своему сайту? Однозначно да.
Читать дальше →

Google открывает LevelDB: ещё одна внутренняя разработка

Reading time2 min
Views13K
Компания Google открыла исходные коды LevelDB — это созданный в Google быстрый движок (библиотека) для работы с хранилищем пар ключ-значение.

Библиотеку LevelDB на C++ можно использовать для разных целей. Например, веб-браузер может обрабатывать с помощью LevelDB кэш недавно посещённых страниц. Операционная система — список установленных пакетов и зависимостей между ними, а любое приложение может использовать LevelDB для хранения пользовательских настроек.
Читать дальше →

3 причины того, почему неудача является ключом к успеху

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

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

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

Доведение проекта до конца

Reading time4 min
Views5.6K
В работе первые 90% проекта делаются за 10% времени, оставшиеся 10% — за 90%
Народная мудрость


В работе очень важным является доведение до конца.

Существует всего одно результативное состояние у задачи — «сделано». Все остальные — почти, еще чуть-чуть, немного осталось, сделал наполовину, и т.д. — это состояние, которое я называю «не сделано».

Согласно одной статистике, 4-5% людей обладают талантом предпринимателя (от слова «предпринимать»). Думаю, не сильно больше — талантом доводить до конца.

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

Бороться до конца — вот кредо настоящего профессионала (умение резко переключиться под нужды, ясное дело, также нужно:).

Теперь пример доведения дела до конца в рамках целого проекта.
Читать дальше →

Изменение тарифов облака

Reading time3 min
Views8.7K
Новость вкратце: С 1 августа мы меняем цены. Значительные изменения: цена исходящего трафика уменьшается с 1 рубля за Гб до 64 копеек за Гб, дисковые операции повышаются с 3 рублей за миллион до 5 рублей за миллион. Остальные цены меняются незначительно, объяснение «зачем» ниже. Кроме того, мы переводим официальные цены с величины «цены за час» на «цену за секунду». Официальные цены приведены в конце статьи, в таблице ниже они даются с дробными копейками и в расчёте «за час» для возможности сравнения со старыми ценами.

Ресурс Старые цены Новые цены
Процессорное время 1 рубль за час ↓ 90 копеек за час
Оперативная память 50 копеек за Гб*ч ↑ 57,6 копейки за час
Дисковые операции 3 рубля за миллион ↑ 5 рублей за миллион
Прочитанные/записанные данные 10 копеек за Гб 10 копеек за Гб
Хранение данных 5 рублей за Тб*ч ↓ 4.5 рубля за Тб*ч
Входящий трафик 20 копеек за Гб ↓ 16 копеек за Гб
Исходящий трафик 1 рубль за Гб ↓ 64 копейки за Гб

Мы изменяем цены с двумя целями: первая: изменение ценовой политики (дисковые операции и интернет трафик), вторая — корректировка цен для более аккуратного учёта и списания. Вообще, их планировалось проводить раздельно, но коммерческий отдел вполне справедливо заметил, что лучше объединить эти изменения, а не отвлекать клиентов лишний раз.

IOPS'ы дороже, трафик дешевле

Не будем скрывать, нагрузка на диски — самая неприятная для облака проблема. Исходя из концепции облака «за ваши деньги — хоть на голове пляшите», мы скорректировали цены так, чтобы получать достаточную компенсацию за неудобную для нас нагрузку.

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

Что у сайта под капотом

Reading time1 min
Views2.5K
Появился ещё один полезный инструмент для веб-мастера — UnderTheSite. Он изучает заголовки HTTP, код страниц (краулер скачивает примерно десять страничек), JavaScript и CSS, чтобы идентифицировать характерные следы тех или иных технологий (matcher’ы). Один запрос — и на странице отображается сразу полный список, что удалось обнаружить. Можно сразу набирать URL вида underthesite.com/sites/habrahabr.ru. Например:

Google: Google Webmaster Tools Verification, Google Analytics, Google Web Server, UTF-8 Unicode charset, Google Web Fonts, HTML5, Google Website Optimizer, YUI Library.

Яндекс: jQuery, Nginx, Open Graph Protocol, OpenID, OpenSearch, UTF-8 Unicode charset.

Хабрахабр: Google Analytics, Nginx, MooTools, swfobject, UTF-8 Unicode charset.

Автор просит добавлять новые технологии для определения: каждый может сделать это самостоятельно после регистрации.

Мои любимые ошибки в программировании

Reading time13 min
Views8.2K
За мою карьеру программиста я сделал огромное количество ошибок в нескольких различных языках. На самом деле, если я пишу 10 или больше строчек кода, которые работают с первого раза, я становлюсь подозрительным и принимаюсь тестировать его более тщательно, чем обычно, предполагая найти ошибку в синтаксисе, или неверную ссылку на массив, или неправильно записанную переменную, или что-то ещё.

Мне нравится подразделять эти ошибки на три большие группы: провалы, погрешности и недочеты. Провал – это когда ты сидишь тупо смотришь на экран и тихо говоришь «ой»; вещи вроде удаления базы данных или целого сайта, записи чего-либо поверх результата трехдневной работы, или случайной отсылки письма 20 тысячам человек.

Погрешности могут быть различными: от простых синтаксических ошибок (например, забыть поставить } ) до критических ошибок и ошибок в вычислениях.

Когда ошибка настолько неочевидна и неуловима, что это почти прекрасно, я зову это недочетом. Такое случается, когда кусок кода сталкивается с совершенно непредсказуемыми и весьма маловероятными обстоятельствами. Вы откидываетесь на спинку стула и думаете «Ого!», словно увидев яркую радугу или падающую звезду.
Читать дальше →

Как мы показываем дизайн сайта клиенту

Reading time2 min
Views19K
Среди веб-студий очень часто можно встретить мнение, что дизайн сайта следует показывать заказчику только лично, с презентацией и объяснением. Это действительно справедливо для некоторых проектов, и в первую очередь для тех, в которых заложен бюджет на личные встречи. Второй часто используемый вариант — отправка картинок письмом с комментариями. Этот вариант гораздо дешевле, но обладает рядом недостатков. В моей компании мы используем третий вариант, который недорог и позволяет снять ряд недостатков при отправке дизайна в виде картинки к письму.
Читать дальше →

Information

Rating
8,257-th
Location
Челябинск, Челябинская обл., Россия
Date of birth
Registered
Activity

Specialization

Frontend Developer, Fullstack Developer
Middle
From 150,000 ₽
SQL
PostgreSQL
MySQL
TypeScript
React
Redux
Bash
Storybook
Markdown
Node.js