Поиск имен доменов с помощью Node.js

Перевод поста Finding domain names with Node.js, автор Matt Brubeck

Я работаю на некоторыми идеями для финансового или новостного программного обеспечения, которое сознательно обновляется нечасто, поэтому это ПО не вознаградит меня от его постоянной перегрузки. Я придумал название “микрогерц”, чтобы описать свою идею. (1 микрогерц ? раз в одиннадцать с половиной дней.)

Когда я обычно думаю об имени проекта, я делаю некоторый DNS-ресёрч. К сожалению, имя “microhertz.com” недоступно (но “microhertz.org” доступно). Потом я ушел по касательной и мне стало любопытно, какие единицы SI доступны в качестве доменных имен.

Это была прекрасная возможность попробовать node.js с его асинхронными DNS-библиотеками для запуска десятков уточняющих запросов параллельно. Я взял перечень единиц и префиксов из nist и написал следующий скрипт:

var dns = require("dns"), sys = require('sys');

var prefixes = ["yotta", "zetta", "exa", "peta", "tera", "giga", "mega",
  "kilo", "hecto", "deka", "deci", "centi", "milli", "micro", "nano",
  "pico", "femto", "atto", "zepto", "yocto"];

var units = ["meter", "gram", "second", "ampere", "kelvin", "mole",
  "candela", "radian", "steradian", "hertz", "newton", "pascal", "joule",
  "watt", "colomb", "volt", "farad", "ohm", "siemens", "weber", "henry",
  "lumen", "lux", "becquerel", "gray", "sievert", "katal"];

for (var i=0; i<prefixes.length; i++) {
  for (var j=0; j<units.length; j++) {
    checkAvailable(prefixes[i] + units[j] + ".com", sys.puts);
  }
}

function checkAvailable(name, callback) {
  dns.resolve4(name).addErrback(function(e) {
    if (e.errno == dns.NXDOMAIN) callback(name);
  })
}

Из 540 возможных имен .сом, я нашел 376 доступных (и еще 10, которые производят временные ошибки DNS, которые я еще не изучал). Вот несколько интересных, с некоторыми комментариями:

  • exasecond.com – 32 млрд. лет
  • petasecond.com – 32 млн. лет
  • petawatt.com – могут быть изготовлены для мощных лазеров
  • terapascal.com
  • gigakelvin.com – возможная температура моргания в сонолюминесценции
  • giganewton.com – 225 миллионов фунтов силы
  • gigafarad.com
  • kilosecond.com – 16 минут 40 секунд
  • kilokelvin.com – 1340 градусов по Фаренгейту
  • centiohm.com
  • millifarad.com
  • microkelvin.com
  • picohertz.com – раз в каждые 31,689 лет
  • picojoule.com
  • femtogram.com – масса одного вируса
  • yoctogram.com – атом водорода весит 1.66 ектограм
  • zeptomole.com – 602 молекул

Чтобы получить полный список, просто скопируйте этот скрипт в файл и запустите его: node listnames.js

Попутно я обнаружил, что в документации API модуль dns был устаревшим. Это исправлено в моем github форке, и я послал запрос автору - Ryan Dahl.