Pull to refresh
0
Николай@nickus2010read⁠-⁠only

Пользователь

Send message

Порт завершения (Completion Port)

Reading time7 min
Reach and readers44K
Привет. Сейчас я расскажу вам о механизме IO Completion Ports в Windows. Разработчики описывают порт завершения как «средство, повышающее производительность приложений, часто использующих операции ввода/вывода». В общем-то, они и не врут, поэтому IOCP часто используют при написании масштабируемых серверных приложений. Однако же считается, что порт завершения — тема мудреная и тяжелая для понимания.
Читать дальше →

Вращаемые битборды: новый виток старой идеи

Reading time21 min
Reach and readers18K
image

Краткое описание


Эта статья рассказывает о некоторых нюансах в использовании «битбордов» (64-битного целого числа, каждый бит которого представляет одно поле шахматной доски). В далеком 1994 г., после симпозиума по шахматам, проводимом ACM в Кейп Мей в штате Нью-Джерси, я решился на полную замену программы для Cray Blitz (компьютерная программа, написанная Робертом Хайатом, Гарри Нельсоном и Альбертом Говером для суперкомпьютера Cray — прим. перевод.). Мне было интересно попробовать метод битбордов, опробованный Слейтом и Аткином в «Chess 4.x» (шахматная программа, разработанная в Северо-Западном университете штата Иллинойс, и доминирующая в 70-х гг. XX в. — прим. перевод.), чтобы решить для себя, годится он для шахмат или нет. В ходе разработки этой новой программы была придумана концепция «вращаемых битбордов», и оказалось, что это то самое, что было нужно, чтобы заставить этот тип структуры данных работать с приемлемой производительностью.

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

Фильтрация ложных соответствий между изображениями при помощи динамического графа соответствий

Reading time5 min
Reach and readers25K

Многие современные алгоритмы компьютерного зрения строятся на основе детектирования и сопоставления особых точек визуальных образов. По этой теме было написано немало статей на хабре(например SURF, SIFT). Но в большинстве работ не уделяется должного вниманию такому важному этапу, как фильтрация ложных соответствий между изображениями. Чаще всего для этих целей применяют RANSAC-метод и на этом останавливаются. Но это не единственный подход для решения данной задачи.
Данная статья посвящена одному из альтернативных способов фильтрации ложных соответствий.
Читать дальше →

Разбор задач 1 тура школы программистов HeadHunter

Reading time8 min
Reach and readers37K
Прошел первый раунд отбора участников в школу программистов HeadHunter, анонс на хабре
Где после заполнения анкеты предлагалось решить 5 задачек
Подробности с решениями на Python

Об использовании WebKit .NET

Reading time7 min
Reach and readers34K

Введение


Связка HTML+CSS+JavaScript на сегодняшний день зарекомендовала себя как универсальный способ построения пользовательских интерфейсов. Причем не только в веб приложениях, но также в десктоп и мобильных приложениях. Примерами тому являются metro-приложения в Windows 8, фреймворк PhoneGap для создания мобильных приложений.

Реализация интерфейса с помощью HTML, CSS и JavaScript прежде всего подразумевает, что интерфейс будет отображаться в некотором браузере. Если мы рассматриваем десктоп или мобильное приложение, то, очевидно, браузер должен быть встраиваемым.

В данной статье мы рассмотрим использование WebKit .NET в десктоп приложении на C# под Windows.

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

Пишем свой отладчик под Windows [часть 1]

Reading time12 min
Reach and readers48K

Вступление



Все мы, время от времени, используем дебаггер для отладки программ. Отладчик может использоваться с C++, C#, Java и ещё сотней других языков. Он может быть как внешним (WinDbg), так и встроенным в среду разработки (Visual Studio). Но вы хоть раз задавались вопросом, как же работает отладчик?
И вам повезло. В этом цикле статей мы разберёмся от и до, как же работает отладка изнутри. В этой статье рассматривается только написание отладчика под Windows. Без компиляторов, линковщиков и других сложных систем. Таким образом, мы сможем отлаживать только исполняемые файлы, так как мы напишем внешний отладчик. Эта статья потребует от читателя понимание основ многопоточности.
Читать дальше →

Изучение Node.js от начала до конца на практике. Часть 1

Reading time14 min
Reach and readers93K

Предыстория


Различной документации по Node.js его модулях огромное количество, всякого рода готовых решений тоже хватает, но начав писать сайт сталкиваешься с проблемой: «А с чего начать?». Хочу вам рассказать свой опыт изучения Node.js на практике. Задача стоит довольно простая и понятная — GPS Трекер с интернет сервисом, отображающим наши передатчики на карте, рисующим маршрут перемещения и т.д., на сколько разгуляется фантазия. Проект не коммерческий и пишется во благо человечества для себя.
Читать дальше →

Распознавание рукописных математических выражений

Reading time7 min
Reach and readers25K
Здравствуй, Хабр!

В этой статье я хочу поделиться опытом распознавания рукописных математических выражений. Хотя уже и существуют такие средства распознавания рукописных формул как «Панель математического ввода» mip.exe в Windows7, разнообразие подходов к решению данной проблемы не может не впечатлять. Об одном из таких подходов я и собираюсь рассказать.




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

Еще один способ отладки Android приложений на виртуальном устройстве

Reading time2 min
Reach and readers45K
Дожил я до такой жизни, что мне понадобилось написать программку для android с поддержкой bluetooth. Все время мучать планшет ради отладки не хотелось, поэтому самый естественный путь — воспользоваться эмулятором. И вот, когда я установил Adk и idea, на лбу образовались 3 шишки от граблей:
  • Основной эмулятор ADK жутко медленный
  • Интеловский нативный эмулятор не работает на компьютере с процессором AMD
  • ADK вообще не поддерживает эмуляцию bluetooth


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

Инъекция кода в .NET CLR: изменение IL-кода во время выполнения программы

Reading time13 min
Reach and readers41K

Предисловие



Изменение .NET метода MSIL кода во время выполнения приложения – это очень круто. Это настолько круто, что можно перехватывать вызовы функций (hooking), сделать защиту своего ПО и другие удивительные вещи. Именно поэтому мне уже давно хотелось это осуществить, но была одна проблема – MSIL код компилируется в машинный код с помощью JIT перед тем, как мы сможем что-либо с этим кодом сделать. А так как .NET CLR не документирована и изменяется от версии к версии, то мы и будем искать стабильный и надёжный путь, независимый от точного расположения адресов в памяти.
Читать дальше →

30 лет с QNX: Демонстрационная дискета QNX

Reading time1 min
Reach and readers43K
Вы просто обязаны это посмотреть. Но прежде всего учтите, эта демо-дискета QNX появилась в конце 1990-х годов, а веб-браузер был выпущен в далёком 1999, а вовсе не в 2012. Думаю, браузеру можно простить сообщения об ошибках при просмотре современных веб-сайтов.

Вы будете поражены! Всё, что показано тут – сама операционная система, графическая оконная подсистема, браузер, стек TCP/IP, менеджер файлов, игры и т.д. – разместились на одной загрузочной дискете размером всего 1.44 Мб. Никакого CD или жёсткого диска. И, как можно увидеть, демо может даже загружать и запускать программы (даже графические драйверы!), и все это на лету. Я бы сказал, что это круто!
Смотреть

Карманный кластер за $99

Reading time4 min
Reach and readers40K
Компания Adapteva (про которую вы скорее всего слышите в первый раз) планирует сделать суперкомпьютер который будет доступен каждому. С 2008 года они занимаются разработками энергоэффективных RISC-процессоров по заказам производителей смартфонов и других мобильных устройств.

«Мы идем вниз по пищевой цепочке», говорит CEO и основатель Andreas Olofsson. Но Adapteva хочет дать свои технологии напрямую людям через проект на Кикстартере, если они соберут как минимум $750K с конечной целью в $3M.

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

Используем возможности Wolfram Mathematica в .NET приложениях

Reading time3 min
Reach and readers22K
Есть люди, которым нравится писать .NET приложения. Есть люди, которые любят системы компьютерной алгебры. В этой статье круги Эйлера пересекутся!


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

Raspberry Pi. Передача видео для дистанционного управления

Reading time6 min
Reach and readers113K
Передача видео для дистанционного управления может использоваться во многих проектах связанных с управление различными устройствами. То есть это можно прикрутить к колесной базе, к квадрокоптеру, к телу гуманоидного робота и тд. Raspberry Pi(далее малина) в данном смысле удобна тем что позволяет использовать для этого не какие то специализированные устройства типа FPV, а обычные устройства которые у многих уже имеются в наличии, а так же упрощает и схемы их включения и сложность написания программ для них, не говоря уже о стоимости проектов.



Подключение вебкамеры, wi-fi адаптера. Настройка передачи видеопотока

Насколько Node.js быстрее, чем Windows Script Host? И о чём это говорит нам?

Reading time3 min
Reach and readers2.8K
[цитата]Читатель, заходящий на сайт NodeJS.org, по центру страницы видит четыре цитаты от лидеров сайтостроения, выражающие удовольствие от Node. Цитаты меняются каждую минуту. При некотором везении (или терпении при перезагрузке страницы) читатель увидит похвалу от Клаудио Кальдато из Microsoft Open Technologies, Inc. — для вашего удобства я привожу эту цитату на иллюстрации справа.

Чем вызвана к жизни такая похвала? Ведь, казалось бы, задолго до того, как движок Node вообще успел появился на свет, у Microsoft существовало собственное (встроенное в Windows, начиная с Windows 98, а также устанавливаемое вместе с Internet Explorer 5) средство для запуска скриптов — Windows Script Host.

Ответ на этот вопрос очевиден: Node.js работает гораздо быстрее. (У него, кстати, ещё и API попроще. Но главное — скорость.)

Но насколько именно быстрее Node, чем WSH?

Это нетрудно выяснить опытным путём. Возьмём тот скрипт, при помощи которого evgeniyup вчера сравнивал быстродействие WSH с быстродействием виртуальной машины своего языка ObjectScript. В начале скрипта добавим десяток строк — «костыль» для Node.js, реализующий WSH-функцию WScript.Echo при её отсутствии.

показать (или вновь скрыть) исходный код скрипта
// CScript to Node.js:
if (typeof WScript == "undefined") WScript = {};
if (typeof WScript.Echo == "undefined") WScript.Echo = function(){
  var i;
  var log = '';
  for (i=0; i < arguments.length; i++){
     log += arguments[i];
  }
  console.log(log);
}

var fannkuch = function(n)
{
  var p = [], q = [], s = [], sign = 1, maxflips = 0, sum = 0;
  var i;
  for(i=1; i<=n; i++) p[i] = q[i] = s[i] = i;
  for(;;){
    // Copy and flip.
    var q1 = p[1];				// Cache 1st element.
    if(q1 != 1){
      for(i=2; i<=n; i++) q[i] = p[i];		// Work on a copy.
      var flips = 1;
      for(;;){
        var qq = q[q1];
        if(qq == 1){				// ... until 1st element is 1.
          sum = sum + sign*flips;
          if(flips > maxflips){
            maxflips = flips;
          } // New maximum?
          break;
        }
        q[q1] = q1;
        if(q1 >= 4){
          var i = 2, j = q1 - 1
          for(;;){ var tmp = q[i]; q[i] = q[j]; q[j] = tmp; if(++i >= --j) break; }
        }
        q1 = qq; flips++;
      }
    }
    // Permute.
    if(sign == 1){
      var tmp = p[2]; p[2] = p[1]; p[1] = tmp; sign = -1;	// Rotate 1<-2.
    }else{
      var tmp = p[2]; p[2] = p[3]; p[3] = tmp; sign = 1;	// Rotate 1<-2 and 1<-2<-3.
      for(i = 3;; i++){
        // print "mark 4"
        var sx = s[i];
        if(sx != 1){ s[i] = sx-1; break; }
        if(i == n) return [sum, maxflips];	// Out of permutations.
        s[i] = i;
        // Rotate 1<-...<-i+1.
        var t = p[1]; for(var j = 1; j <= i; j++){ p[j] = p[j+1]; } p[i+1] = t;
      }
    }
  }
}

function getTimeSec(){
 	var d = new Date();
    return (d.getTime() + d.getMilliseconds() / 1000.0) / 1000.0;
}

var n = 10;
var start_time = getTimeSec();
var r = fannkuch(n);
var sum = r[0], flips = r[1];
WScript.Echo(
    sum,"\n",
    "Pfannkuchen(",n,") = ",flips,"\n",
    "time = ",(getTimeSec() - start_time),"\n"
)

После этого достаточно запустить этот скрипт дважды (сперва в Node, затем в WSH) — и мы получим вот какой результат в консоли (и на скриншоте):

[скриншот]

Разница на два порядка! Вычисления, с которыми Node.js справляется за секунду, Windows Script Host перемалывал больше двух минут.

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

Как устроен краткосрочный прогноз на Яндекс.Пробках

Reading time8 min
Reach and readers80K
Информация о пробках появилась на Яндексе в 2006 году. Начинали мы с необходимого — научились строить схему загруженности городских улиц и учитывать текущую ситуацию при прокладывании маршрутов. Автомобилисты, ориентируясь перед выездом на эту информацию, уже могли сэкономить время в пути:
image

Затем, чтобы помогать водителям непосредственно во время движения, мы добавили в мобильные Яндекс.Карты (и, как следствие, в Яндекс.Навигатор) автоматическое перестроение маршрута. Приложения научились адаптировать маршрут при каждом заметном изменении ситуации в городе.

Собрав на десктопе и в мобильном информацию про «сейчас», мы перешли к решению вопроса «а как будет потом?»:
image

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

image

Неделю назад на Яндекс.Картах появилась возможность посмотреть изменения пробок в ближайший час — следующий наш шаг в решении вопроса про будущее. Для тех, кто в этом году не смог приехать на Yet another Conference, мы сегодня расскажем, что у нашего прогноза внутри, и как оно там оказалось.
Переходим к подробностям!

Как я парсил Google Play

Reading time2 min
Reach and readers40K
Никогда не задумывались, сколько всего приложений написано под андроид?
Системе всего несколько лет, но я никогда и не пытался представить порядок. Пользователей несколько сотен миллионов, а приложений? Десять тысяч? Пятьдесят? Сто?
Читать дальше →

Получение подлинного Windows Subsystem(csrss.exe) процесса

Reading time7 min
Reach and readers22K
В этой статье я покажу вам, как найти подлинный процесс подсистемы Windows, это полезно, например, когда вы пытаетесь получить список активных процессов (заметьте, только процессы, которые работают в подсистеме Windows могут быть найдены таким образом, а кроме подсистемы Windows есть еще подсистемы POSIX и OS/2, которые уже, можно сказать, уже и не поддерживаются), перечисляя структуры CSR_PROCESS, список которых находится в процессе CSRSS.
Читать дальше →

Как продавать свою программу

Reading time4 min
Reach and readers133K
Если воспользоваться поиском, то окажется, что статей с таким заголовком много. Многие из них посвящены заработку в интернет, что естественно. Но писали их, во многих случаях, люди далекие от разработки ПО. Поэтому, там не раскрыты некоторые интересные детали процесса «Идея → Разработка → Продажа».



Начнём с самого начала…
Читать дальше →

Information

Rating
Does not participate
Location
Москва, Москва и Московская обл., Россия
Date of birth
Registered
Activity