Как стать автором
Обновить

Компания Нордавинд временно не ведёт блог на Хабре

Сначала показывать

DARPA запустит на геостационарную орбиту 20-метровый мембранный телескоп

Время на прочтение2 мин
Количество просмотров36K
image

Современные военные и коммерческие спутники, занимающиеся фотосъемкой Земли, летают на орбитах высотой в несколько сотен километров. При этом их разрешающая способность достигает 50 см на пиксель. Размещение на низких орбитах создаёт массу неудобств — спутник не может вести непрерывную съёмку одной точки, более того, над нужным местом в нужный момент может вообще не оказаться ни одного спутника. Геостационарная орбита лишена этих недостатков, но с высоты 35 786 км над уровнем моря невозможно получить снимки приемлемого разрешения. Чем выше требования к разрешению, тем больше должен быть диаметр линзы или зеркала телескопа. Настолько больше, что вывести такой громоздкий телескоп на геостационарную орбиту пока что экономически нецелесообразно.
Читать дальше →
Всего голосов 58: ↑57 и ↓1+56
Комментарии72

В MIT разработали недорогую 3D-камеру, способную видеть сквозь полупрозрачные объекты

Время на прочтение2 мин
Количество просмотров14K


Существующие сегодня 3D-сенсоры, основанные на измерении времени прохождения луча света, подобные Kinect, могут довольно неплохо составлять карту глубин изображения, если в сцене нет полупрозрачных и отражающих поверхностей, преломляющих и искажающих путь световых лучей. Дождь, струи воды, туман или предметы из стекла или прозрачного пластика просто заслоняют более далёкие объекты, так как сенсор распознаёт только самое первое отражение сигнала.

На конференции Siggraph Asia, которая прошла в Гонконге на прошлой неделе, учёные из MIT Media Lab представили новую разработку, основанную на том же принципе. В ней используется обычный лазерный диод и недорогой сенсор. Стоимость оборудования составила всего лишь порядка 500 долларов. Единственное существенное отличие прототипа от коммерческих аналогов, таких как Kinect, заключается в прошивке.

Вместо простой периодической модуляции импульсов инфракрасного лазера, прототип MIT использует специально подобранные последовательности импульсов, имеющие автокорреляционную функцию с очень узким единичным пиком (такие сигналы используются в эхолокации и телекоммуникациях для точного измерения времени задержки сигнала. Более подробно о них можно почитать в статье "Основные принципы цифровой беспроводной связи. Ликбез", в разделе «Автокорреляционная функция. Коды Баркера»). Камера хорошо различает первые отражения от поверхности прозрачного предмета и следующие за ними отражения от более далёких объектов. Она даже способна получить чёткое изображение надписи, закрытой матовым экраном.
Читать дальше →
Всего голосов 19: ↑16 и ↓3+13
Комментарии16

Технологии становятся ближе к телу

Время на прочтение4 мин
Количество просмотров11K
С тех пор, как Google анонсировала очки дополненной реальности Glass многие производители начали всерьез интересоваться нательными гаджетами.

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

С чего все начиналось…

Сегменту wearable computers (подстрочник с английского «надеваемые компьютеры») два десятка лет. Отцом нательных компьютеров считается профессор Торонтского университета Стив Манн (Steve Mann). В 1970-х и 80-х годах он создал несколько нательных систем общего пользования, включая устройства считывания, биологической обратной связи и мультимедиа. В 1981 году он разработал мультимедийную компьютерную систему для крепления на спину с наголовным дисплеем для одного глаза. С тех пор Манн каждый день носит какой-нибудь нательный компьютер.
Читать дальше →
Всего голосов 6: ↑4 и ↓2+2
Комментарии1

72-мегапиксельная камера-мяч снимает 360-градусные панорамы в полёте

Время на прочтение2 мин
Количество просмотров21K
Камера-мяч, которой можно снимать сферические панорамы, просто подбросив её в воздух, делает снимок в самой верхней точке траектории, ориентируясь на встроенные акселерометры. Прототип такой камеры был представлен ещё два года назад. Теперь она доведена до стадии серийного продукта — кампания по сбору средств идёт на IndieGoGo

Камера, названная Panono, имеет ударопрочный пластиковый корпус, резьбу для крепления на штатив и кнопку спуска — её можно использовать в трёх режимах: бросая вверх, управляя дистанционно со смартфона, установив на штатив или другое крепление, и просто держа в руках, если не нужна 360-градусная панорама.


Читать дальше →
Всего голосов 29: ↑26 и ↓3+23
Комментарии35

Погрешности сенсоров позволяют сопоставить с каждым смартфоном индивидуальный «отпечаток»

Время на прочтение2 мин
Количество просмотров15K
Возможности для слежки за пользователями интернета не ограничиваются cookies и логами провайдера или оператора сотовой сети. Любой сайт может легко получить доступ к информации о версиях браузера и ОС клиента, установленных плагинах, разрешении экрана и так далее. Совокупность этой информации даёт возможность узнавать конкретного клиента из миллионов других. Для смартфонов эта проблема стоит ещё острее — характеристики их железа гораздо богаче за счёт большого числа датчиков — микрофонов, камер, акселерометров, гироскопов, магнитометров.

Христо Божинов из Стэнфордского университета продемонстрировал, что микроскопические отличия в показаниях акселерометра смартфона достаточно индивидуальны и позволяют отличить его от тысяч других. Причём эти показания могут быть доступны любому сайту в интернете. Для проверки концепции и сбора статистики Божинов создал сайт sensor-id.com, зайдя на который со смартфона, можно узнать, доступны ли данные вашего акселерометра для JavaScript, и если да, насколько индивидуален ваш смартфон. По словам Божинова, выделить индивидуальный «отпечаток» датчика можно даже из весьма шумного сигнала, например, пока смартфон болтается в кармане.

image
Различия в показаниях акселерометров в состоянии покоя для 16 смартфонов
Читать дальше →
Всего голосов 49: ↑46 и ↓3+43
Комментарии14

Один датчик, чтоб править всеми

Время на прочтение2 мин
Количество просмотров16K
Проект интеллектуального датчика Neurio, который за две недели до окончания кампании на Кикстартере уже превысил план на 40 000 долларов, основан на необычном подходе к управлению умным домом. В основе Neurio лежит очень точный и подробный анализ энергопотребления. Умный счётчик похож на обычный электронный счётчик электроэнергии, но фиксирует гораздо больше параметров, и делает это точнее и чаще, чем обычный. Эти данные отправляются в облако и там анализируются алгоритмами искусственного интеллекта, которые достаточно уверенно распознают отдельных потребителей электричества по характерному для них «почерку».



Это возможно благодаря тому, что датчик Neurio измеряет в двух независимых двухсторонних каналах не только активную мощность, но и реактивную мощность, коэффициент мощности, напряжение, ток, и частоту. Данные обновляются один раз в секунду и передаются в домашнюю сеть по WiFi. На случай потери связи есть внутренняя память, которой хватает на год непрерывной записи.
Читать дальше →
Всего голосов 14: ↑13 и ↓1+12
Комментарии14

Awsbox — PaaS-инфраструктура для развёртывания приложений Node.js в облаке Amazon

Время на прочтение5 мин
Количество просмотров4.8K
От переводчика: Это двенадцатая, последняя статья из цикла о Node.js от команды Mozilla Identity, которая занимается проектом Persona.





После того как вы написали приложение на Node.js, как развернуть его на сервере? Вместо того, чтобы использовать готовое PaaS-решение, наша команда создала собственную инфраструктуру поверх Amazon EC2. Сейчас мы расскажем подробнее о том, как мы это сделали.

Мы представим вам awsbox — минималистичный слой PaaS-инфраструктуры для Node.js, который сейчас обслуживает пару дюжин некритичных сервисов Mozilla. Awsbox разработан для того, чтобы предоставить простоту и удобство развёртывания, характерные для PaaS, не теряя при этом гибкости кастомизированной инфраструктуры.
Читать дальше →
Всего голосов 23: ↑20 и ↓3+17
Комментарии3

Локализация приложений Node.js. Часть 3: локализация в действии

Время на прочтение7 мин
Количество просмотров6.1K
От переводчика: Это одиннадцатая статья из цикла о Node.js от команды Mozilla Identity, которая занимается проектом Persona.





Использование строк


Итак, сначала мы подключили к нашему приложению модуль i18n-abide и обернули строки в вызовы gettext. Затем наша команда переводчиков перевела эти строки и у нас есть готовый перевод для каждого языка.

Теперь давайте заставим наше приложение Node.js работать с локализованными строками. Переводы в виде po-файлов лежат в файловой системе в таком виде:

locale
  en
    LC_MESSAGES
      messages.po
  de
    LC_MESSAGES
      messages.po
  es
    LC_MESSAGES
      messages.po

Во время выполнения нашего приложения нужно извлекать переведённые строки из этих файлов. Есть два способа сделать это:

  • на стороне сервера с помощью всё той же функции gettext из модуля i18n-abide;
  • на стороне клиента с помощью скрипта gettext.js, который также входит в состав i18n-abide.

Оба этих метода требуют, чтобы строки были в формате JSON. При переводе на стороне сервера они загружаются при старте приложения, а клиент загружает их с помощью HTTP-запросов (или можно включить их в минифицированный файл JavaScript в процессе сборки).

Так как наша система перевода совместима с GNU Gettext, есть ещё и третий путь — модуль node-gettext. Он довольно эффективен при переводе на стороне сервера.

Дальше мы будем рассматривать первый способ, так как это наиболее привычный способ использования i18n-abide.
Читать дальше →
Всего голосов 12: ↑10 и ↓2+8
Комментарии2

Локализация приложений Node.js. Часть 2: инструментарий и процесс

Время на прочтение7 мин
Количество просмотров6.5K
От переводчика: Это деcятая статья из цикла о Node.js от команды Mozilla Identity, которая занимается проектом Persona.





В прошлой статье о локализации приложений Node.js мы узнали, как использовать модуль i18n-abide в нашем коде. Наша работа, как программистов, фактически закончилась на том, что мы обернули строки в шаблонах и коде приложения в вызовы gettext(). Но работа по локализации и переводу приложения только начинается.

Инструментарий


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

Проекту Mozilla уже почти 15 лет, и наша команда локализаторов и переводчиков одна из самых больших (и клёвых) в мире Open Source. Поэтому у нас широко используются давно привычные, можно даже сказать старинные и причудливые инструменты.
Читать дальше →
Всего голосов 14: ↑12 и ↓2+10
Комментарии3

Локализация приложений Node.js. Часть 1

Время на прочтение4 мин
Количество просмотров13K
От переводчика: Это девятая статья из цикла о Node.js от команды Mozilla Identity, которая занимается проектом Persona.





image

Знаете ли вы, что продукты и сервисы Mozilla локализованы для 90 языков? Локализация включает в себя:

  • текст, переведённый на региональные вариации и диалекты языков;
  • рендеринг страниц с учётом написания справа налево;
  • пуленепробиваемый дизайн, способный вместить тексты любой длины;
  • заголовки, метки и текст на кнопках, подобранные для локальных аудиторий.

В этой серии из трёх статей, посвящённых локализации, я расскажу о технических аспектах создания многоязычного приложения Node.js.

Мы будем использовать общепринятые термины «интернационализация» (i18n) и «локализация» (l10n). Интернационализация — это набор технических приёмов, делающих возможной последующую локализацию, то есть собственно перевод и адаптацию для конкретного языка.

Mozilla Persona — веб-сервис на Node.js, локализованный для множества локалей. У нашей команды были весьма специфические запросы, и поэтому мы не стали использовать существующие библиотеки для локализации.
Читать дальше →
Всего голосов 36: ↑28 и ↓8+20
Комментарии1

Производительность фронтенда. Часть 3 — оптимизация шрифтов

Время на прочтение7 мин
Количество просмотров12K
От переводчика: Это восьмая статья из цикла о Node.js от команды Mozilla Identity, которая занимается проектом Persona.





Мы смогли уменьшить объем шрифтов для Persona на 85%, с 300 до 45 килобайт, используя подмножества шрифтов. Эта статья рассказывает о том, как именно мы это сделали, и какие мы использовали инструменты.

Представляем connect-fonts


Connect-fonts — это middleware для Connect, которое улучшает производительность @font-face, раздавая клиентам подобранные специально для их языка подмножества шрифтов, уменьшая тем самым их размер. Connect-fonts также генерирует специфические для локали и браузера стили @font-face и CORS-заголовки для Firefox и IE9+. Для раздачи подмножеств шрифтов создаются так называемые font packs — поддиректории с подмножествами шрифтов плюс простой конфигурационный файл JSON. Некоторые наборы распространённых open source-шрифтов доступны в готовом виде в пакете npm, впрочем, создавать свои пакеты совсем нетрудно.

Если вы не слишком хорошо ориентируетесь в работе со шрифтами в интернете, мы собрали небольшую коллекцию ссылок по теме @font-face. [От переводчика: а на Хабре очень кстати статья, посвящённая производительности веб-шрифтов]
Читать дальше →
Всего голосов 26: ↑24 и ↓2+22
Комментарии2

Приручаем конфигурации веб-приложений с помощью node-convict

Время на прочтение6 мин
Количество просмотров9.4K
От переводчика: Это седьмая статья из цикла о Node.js от команды Mozilla Identity, которая занимается проектом Persona.





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

Постановка задачи


Есть две основные проблемы, которые создают необходимость в конфигурации приложений:

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

Эти проблемы можно решить, инициализируя некоторые переменные в зависимости от текущего окружения и используя переменные окружения для хранения конфиденциальных данных. Общепринятый в среде Node.js шаблон для реализации этого подхода состоит в создании модуля, который экспортирует конфигурацию:

var conf = {
  // окружение приложения - 
  // "production", "development", или "test
  env: process.env.NODE_ENV || "development",
 
  // IP адрес
  ip: process.env.IP_ADDRESS || "127.0.0.1",
 
  // Порт
  port: process.env.PORT || 0,
 
  // Настройки БД
  database: {
    host: process.env.DB_HOST || "localhost:8091"
  }
};
 
module.exports = conf;

Это работает неплохо, но есть ещё пара проблем:

  • Что если в конфигурации указаны некорректные данные? Мы можем сберечь время и нервы, обнаруживая ошибки как можно раньше.
  • Насколько легко разобраться в конфигурации администраторам, тестировщикам и другим членам большой команды, когда им надо менять настройки или искать дефекты? Более декларативный и лучше документированный формат сделал бы их жизнь легче.

Читать дальше →
Всего голосов 21: ↑18 и ↓3+15
Комментарии1

Производительность фронтэнда. Часть 2 — кешируем динамический контент с помощью etagify

Время на прочтение5 мин
Количество просмотров5.6K
От переводчика: Это шестая статья из цикла о Node.js от команды Mozilla Identity, которая занимается проектом Persona.





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

Эта статья посвящена etagify — модулю middleware для Connect, который генерирует ETag-и на лету на основе MD5-хешей ответов, и хранит эти хеши в памяти. Etagify избавляет от лишней рутины при сборке проекта, предельно прост в использовании и увеличивает производительность больше, чем можно было бы ожидать (в своих тестах мы получили ускорение загрузки страниц на 9%):

myapp = require('express').createServer();
myapp.use(require('etagify')());
...
app.get('/about', function(req, res) {
  res.etagify(); 
  var body = ejs.render(template, options);
  res.send(body);
});

Читать дальше →
Всего голосов 26: ↑24 и ↓2+22
Комментарии0

Пишем сервер, который не падает под нагрузкой

Время на прочтение5 мин
Количество просмотров30K
От переводчика: Это пятая статья из цикла о Node.js от команды Mozilla Identity, которая занимается проектом Persona.





Как написать приложение Node.js, которое будет продолжать работать даже под невозможной нагрузкой? В этой статье показана методика и библиотека node-toobusy, её воплощающая, суть которой наиболее кратко может быть передана этим фрагментом кода:

var toobusy = require('toobusy');
 
app.use(function(req, res, next) {
  if (toobusy()) res.send(503, "I'm busy right now, sorry.");
  else next();
});

В чём заключается проблема?


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

Это может быть и злонамеренный всплеск трафика, например от DoS-атаки. Первый шаг к борьбе с такими атаками — написание сервера, который не падает.
Читать дальше →
Всего голосов 66: ↑56 и ↓10+46
Комментарии26

Производительность фронтэнда. Часть 1 — конкатенация, компрессия, кэширование (4-я из 12 статей о Node.js от Mozilla)

Время на прочтение9 мин
Количество просмотров14K
От переводчика: Это четвёртая статья из цикла о Node.js от команды Mozilla Identity, которая занимается проектом Persona. Эта статья о том, как увеличить скорость загрузки ресурсов сайта и модуле connect-cachify, созданном в Mozilla для этой цели.





В этой статье мы поговорим о производительности фронтэнда и представим инструменты, созданные в Mozilla для того, чтобы сделать сайт Persona настолько быстрым, насколько возможно. Мы опишем работу с connect-cachify — модулем, автоматизирующим некоторые из важнейших аспектов, обеспечивающих производительность фронтэнда.

Но сначала окинем взглядом наиболее распространённые пути улучшения производительности. Если у вас уже есть опыт оптимизации фронтэнда, можете пропустить эти разделы и перейти в конец статьи, где описано, как с помощью connect-cachify автоматически делать то, что вам раньше доводилось делать вручную.
Читать дальше →
Всего голосов 19: ↑16 и ↓3+13
Комментарии2

Храним сессии на клиенте, чтобы упростить масштабирование приложения (3-я из 12 статей о Node.js от команды Mozilla Identity)

Время на прочтение4 мин
Количество просмотров20K
От переводчика: Это третья статья из цикла о Node.js от команды Mozilla Identity, которая занимается проектом Persona. Эта статья посвящена применяемому в Persona способу хранения данных сессии на клиенте.




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

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

Масштабирование сайта с хранением состояния


Если необходимо масштабировать такой сайт, есть три варианта:

  1. Реплицировать данные сессии между всеми серверами.
  2. Использовать центральное хранилище, к которому будут обращаться все серверы.
  3. Закрепить за каждым пользователем определённый сервер.

У всех этих подходов есть недостатки:

  1. Репликация ухудшает производительность и увеличивает сложность.
  2. Центральное хранилище ограничивает возможность масштабирования и приводит к дополнительным задержкам.
  3. Привязка пользователей к конкретным серверам приводит к проблемам, когда сервер отключается.

Тем не менее, поразмыслив немного, можно придумать и четвёртый способ: хранить все данные сессии на клиенте.
Читать дальше →
Всего голосов 22: ↑18 и ↓4+14
Комментарии14

Нагружаем Node под завязку (2-я из 12 статей о Node.js от команды Mozilla Identity)

Время на прочтение7 мин
Количество просмотров19K
От переводчика: Это вторая статья из цикла о Node.js от команды Mozilla Identity, которая занимается проектом Persona. Эта статья написана по мотивам выступления Ллойда Хилайеля на конференции Node Philly 2012 в Филадельфии.





Процесс Node.js выполняется на единственном ядре процессора, так что построение масштабируемого сервера на Node требует особой заботы. Благодаря возможности писать нативные расширения и продуманному набору API для управления процессами, есть несколько разных способов заставить Node выполнять код параллельно. Мы рассмотрим их в этой статье.

Кроме того, мы представим модуль compute-cluster — маленькую библиотеку, которая облегчает управление коллекцией процессов для выполнения распределённых вычислений.

Постановка задачи


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

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

  • Насыщение. Наше решение должно было использовать все доступные ядра процессора.
  • Отзывчивость. Пользовательский интерфейс должен оставаться отзывчивым. Всегда.
  • Отказоустойчивость. Когда нагрузка зашкаливает, мы должны нормально обслужить столько клиентов, сколько сможем, а остальным показать сообщение об ошибке.
  • Простота. Решение должно легко и постепенно интегрироваться в уже работающий сервер.


Вооружившись этими требованиями, мы можем осмысленно сравнивать разные подходы.
Читать дальше →
Всего голосов 39: ↑38 и ↓1+37
Комментарии5

Охотимся за утечками памяти в Node.js (1-я из 12 статей о Node.js от команды Mozilla Identity)

Время на прочтение7 мин
Количество просмотров26K
От переводчика: Это первая статья из цикла о Node.js от команды Mozilla Identity, которая занимается проектом Persona. Как клиентская, так и серверная часть Persona написаны на JavaScript. В ходе работы команда проекта создала несколько инструментов на все случаи жизни — от локализации до отладки, управления зависимостями и многого другого. В этой серии статей разработчики Mozilla делятся с сообществом своим опытом и этими инструментами, которые пригодятся любому, кто пишет высоконагруженный сервис на Node.js.

Первая статья цикла посвящена распространённой проблеме Node.js — утечкам памяти, особенностям утечек в высоконагруженных проектах и библиотеке node-memwatch, которая помогает найти и устранить такие утечки в Node.




Зачем заморачиваться?


Вы можете спросить, зачем вообще отслеживать утечки памяти? Неужели нет более важных дел? Почему бы просто не перезапускать процесс время от времени, или просто добавить памяти на сервер? Есть три причины, по которым устранять утечки всё-таки важно:

  1. Возможно, вы не сильно переживаете об утечках памяти, но этого нельзя сказать о V8 (движок JavaScript на котором работает Node). Чем больше памяти занято, тем активнее работает сборщик мусора, замедляя ваше приложение. Так что в Node утечки напрямую вредят производительности.
  2. Утечки могут привести к другим проблемам. Протекающий код может блокировать ограниченные ресурсы. У вас могут закончиться файловые дескрипторы или вы вдруг не сможете открыть ещё одно соединение с БД. Такие проблемы могут возникнуть задолго до того, как кончится память, но обрушат ваше приложение ничуть не хуже.
  3. Рано или поздно ваше приложение упадёт. И это наверняка случится во время наплыва посетителей. Вас все засмеют и будут писать про вас гадости на Hacker News.

Откуда доносится звук падающих капель?
Всего голосов 63: ↑61 и ↓2+59
Комментарии1

Проблемы с потоками. Эдвард А. Ли

Время на прочтение33 мин
Количество просмотров25K

Аннотация


Потоки являются прямой адаптацией доминирующей сейчас последовательной модели вычислений к параллельным системам. Языки программирования не требуют (или требуют совсем немного) изменений в синтаксисе, чтобы поддерживать потоки, а операционные системы и архитектуры непрерывно развиваются, чтобы повысить эффективность их использования. Многие технологи (инженеры) стремятся интенсивно использовать многопоточность в программном обеспечении и ожидают получить значительное (предсказанное) увеличение производительности. В этой работе я доказываю, что это не очень хорошая идея. Хотя использование потоков кажется небольшим шагом от последовательных вычислений, фактически, это огромный шаг. Использование потоков разрушает такие неотъемлемые свойства последовательных вычислений как: понятность, предсказуемость и определенность (детерминированность). Потоки, как модель вычислений, являются очень недетерминированными, а работа программ также становится неопределенной. Хотя многие исследованные техники улучшают модель вычислений за счет более эффективного сокращения неопределенности, я доказываю, что они не решают проблему полностью. Вместо того, чтобы сокращать неопределенность, мы должны строить модель вычислений исходя из полного детерминизма во взаимодействии программных компонентов. Неопределенность должна явно и аккуратно вводиться туда, где есть в этом необходимость, вместо того, чтобы удаляться там, где нет необходимости. Я доказываю преимущество разработки параллельных языков координации компонентов. Я верю, что такие языки будут гораздо более надежны, а программы будут более распараллеленные.
Читать дальше →
Всего голосов 43: ↑38 и ↓5+33
Комментарии7

Open Reflex: зеркальный фотоаппарат, напечатанный на 3D-принтере

Время на прочтение2 мин
Количество просмотров61K


250 грамм пластика ABS для 3D-печати, несколько винтов и гаек, маленькое зеркальце, магниты, кусочки листового пластика, черный герметик, а также 3D-принтер и режущий плоттер, стеклорез, отвёртки и наждачная бумага — вот практически полный набор материалов и инструментов, с помощью которых можно соорудить 35-миллиметровый плёночный зеркальный фотоаппарат Open Reflex.

Чертежи деталей и подробная инструкция по сборке опубликованы на сайте instructables под лицензией Creative Commons — фотоаппарат на 100% Open Source. По словам автора проекта, французского дизайнера и хакера Лео Мариуса, на печать и сборку аппарата уходит около 15 часов. Общая стоимость материалов для создания фотоаппарата — порядка 30 долларов.
Читать дальше →
Всего голосов 75: ↑68 и ↓7+61
Комментарии30
Изменить настройки темы