Архив за 30 ноября 2014 - 2

Если издали видно общую картину, то вблизи можно понять суть. Концепции, которые казались мне далекими и, прямо скажем, странными во время экспериментов с Haskell и Scala, при программировании на Swift становятся ослепительно очевидными решениями для широкого спектра проблем.

Взять вот обработку ошибок. Конкретный пример – деление двух чисел, которое должно вызвать исключение если делитель равен нулю. В Objective C я бы решил проблему так:

NSError *err = nil;
CGFloat result = [NMArithmetic divide:2.5 by:3.0 error:&err];
if (err) {
    NSLog(@"%@", err)
} else {
    [NMArithmetic doSomethingWithResult:result]
}

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

Верни мне значение. Если не получится – то дай знать, чтобы ошибку можно было обработать.

Я передаю параметры, разыменовываю указатели, возвращаю значение в любом случае и в некоторых случаях потом игнорирую. Это неорганизованный код по следующим причинам:

  • Я говорю на машинном языке – указатели, разыменование.
  • Я должен сам предоставить методу способ, которым он уведомит меня об ошибке.
  • Метод возвращает некий результат даже в случае ошибки.

Каждый из этих пунктов – источник возможных багов, и все эти проблемы Swift решает по-своему. Первый пункт, например, в Swift вообще не существует, поскольку он прячет под капотом всю работу с указателями. Остальные два пункта решаются с помощью перечислений.Читать полностью »

Ошибки фантастов или размышления о том, почему остановилась космонавтика - 1
Весь двадцатый век фантасты много и талантливо писали об освоении космоса. Герои «Хиуса» подарили человечеству богатства Урановой Голконды, пилот Пиркс работал капитаном космических сухогрузов, по Солнечной системе ходили лидер-контейнероносцы и балкер-трампы, и я уж не говорю про всякую мистику путешествий к таинственным монолитам. Однако 21 век не оправдал надежд. Человечество робко стоит в прихожей Космоса, не выбравшись на постоянной основе дальше земной орбиты. Почему так получилось и на что надеяться тем, кто хотел бы читать в новостях про повышение урожайности марсианских яблонь?
Читать полностью »

На публикацию этого перевода меня сподвиг комментарий пользователя encyclopedist к недавней статье «Фабричный метод без размещения в динамической памяти». Статья меня заинтересовала, но беглое гугление не выявило перевода. «Непорядок.» — подумал я — «Такая интересная статья по С++ и не переведена на русский язык. Надо бы исправить.»

Оглавление

  1. Введение
  2. Проектирование
  3. Реализация

  4. О чём ещё не сказано

Размышления о разработке Eggs.Variant — обобщённом типобезопасном размеченном объединении на C++11/14.

Введение

Объединение — это специальный тип класса, который в один момент времени может хранить только один из своих нестатических членов. Он занимает столько места, сколько надо, чтобы вместить наибольший из его членов.

9 [class]/5 Объединение — это класс, определяемый с ключевым словом union; одновременно он может хранить только один из своих членов (9.5). [...]
9.5 [class.union]/1 В объединении активным может быть только один из нестатических членов, то есть, в данный момент времени в объединении может храниться значение только одного из его нестатических членов. [...] Размер объединения достаточен для вмещения наиболее большого из его нестатических членов. Каждый нестатический член аллоцируется так, словно он является единственным членом структуры. Все нестатические члены объекта объединения имеют одинаковый адрес.

Оригинал

9 [class]/5 A union is a class defined with the class-key union; it holds at most one data member at a time (9.5). [...]
9.5 [class.union]/1 In a union, at most one of the non-static data members can be active at any time, that is, the value of at most one of the non-static data members can be stored in a union at any time. [...] The size of a union is sufficient to contain the largest of its non-static data members. Each non-static data member is allocated as if it were the sole member of a struct. All non-static data members of a union object have the same address.

Читать полностью »

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

  1. Нужно периодически пинговать сервер
  2. Иногда выполнять какое-либо действие с сервером (например, исполнение команды через ssh), которое засабмитил пользователь
  3. Действия с серверами могут нескольких типов, у каждого действия свой приоритет
  4. Таски (из п.1-3) нельзя выполнять одновременно для каждого сервера
  5. Таски могут завершаться с неудачей, например по причине отсутствия связи с сервером, нужно ждать пока связь восстановится и пытатся выполнить запланированную задачу

Читать полностью »

image

Европейское космическое агентство(ESA) сообщило, что в рамках программы European Data Relay System впервые изображение со спутника Sentinel-1, находящегося на околоземной орбите, были успешно передано на Землю при помощи спутника связи Alphasat по лазерному каналу передачи данных, рассчитанному на скорость в 1.8 Гбит/с. Передача была выполнена на основе технологии Laser Communication Terminal (LCT), разрабатываемой Airbus Defence and Space в сотрудничестве с Германским аэрокосмическим центром DLR.
Читать полностью »

«Математика – один из видов искусства»: пост к столетию со дня рождения Мартина Гарднера - 1

Перевод поста Эда Пегга Младшего (Ed Pegg Jr) "Martin Gardner’s 100th Birthday"

Я думаю, содержание этого поста будет интересно всем, кто любит математику и ее красоту, всем, кто знаком с замечательными книгами и задачами Мартина Гарднера, а также будет полезно учителям, школьникам и студентам. Все ссылки в данном посте ведут на сайты Wolfram Demonstrations Project (коллекция бесплатных интерактивных демонстраций, созданных пользователями системы Mathematica на языке Wolfram Language с помощью технологии Computable Document Format (CDF), при этом для вас доступны исходные коды всех демонстраций, а значит, вы можете каждую из них скачать, изучить и изменить под себя) и Wolfram MathWorld (крупнейшая и самая авторитетная онлайн-энциклопедия по математике).

Gardner100_1.gif

Читать полностью »

История xkcd - 125 января 2003 года Рэндел Манро зарегистрировал доменное имя xkcd.com. Позже многие пытались найти смысл этого набора букв, предлагая автору свои версии: duck x назад без гласной, extreme keyboard configuration daemon и тому подобное. Но название самого популярного веб-комикса для гиков ничего не значит.

В начале нулевых Манро устал от никнеймов, которые что-то значили (Skywalker4, Animorph7 и так далее). Хотелось какое-нибудь слово, которое не надоест, которое будет принадлежать только его создателю. То было время, когда некоторые четырёхбуквенные адреса в зоне .com были свободны в отличие от сегодняшних дней тотального киберсквоттинга. Поэтому Рэндел подобрал четыре буквы, которые никто до него не использовал, которые ничего не значили и которые никак не произносились и не являлись каким-нибудь акронимом.

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

Тогда Манро ещё работал в НАСА, но занимался достаточно мелкими проектами, чтобы иметь возможность отвлечься на какую-нибудь ерунду. К примеру, однажды во время работы над алгоритмами навигации он запрограммировал робота, который возил его по офисам космического агентства на офисном стуле с колёсиками.
Читать полностью »

Ави Рейхентал — Что будет дальше в 3D-печати? - 1

Как и его любимый дедушка, Ави Рейхентал является производителем вещей. Разница лишь в том, что сейчас он может использовать 3D-принтеры для того, чтобы сделать что угодно и из какого угодно материала. Рейхентал проводит тур по возможностям 3D-печати во всём, начиная с напечатанной конфеты и до сделанных по специальному заказу кроссовок.

Оригинальное видеоЧитать полностью »

В Новосибирске построят прототип термоядерного реактора на дейтерии - 1

Команда ученых Института ядерной физики СО РАН собирается построить прототип ядерного реактора. Создавать реактор будут в подвале самого института, сроки реализации составляют пять лет. Создание прототипа реактора является частью проекта «Развитие фундаментальных основ и технологий термоядерной энергетики будущего».

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

Читать полностью »

Поиск на сайте своими руками - 1

Наверное, многие когда-нибудь задумывались, как сделать поиск на сайте? Безусловно, для крупных сайтов с большим количеством контента поиск является просто незаменимой вещью. В большинстве случаев пользователь, впервые посетив Ваш сайт в поисках чего-либо важного, не станет разбираться в навигационных панелях, выпадающих меню и прочих элементах навигации, а в спешке попытается найти что-нибудь похожее на поисковую строку. И если такой роскоши на сайте не окажется, либо он не справится с поисковым запросом, то посетитель просто закроет вкладку. Но статья не о значении поиска для сайта и не о психологии посетителей. Я расскажу, как реализовать небольшой алгоритм полнотекстового поиска, который, надеюсь, избавит начинающих разработчиков от головной боли.
Читать полностью »


https://ajax.googleapis.com/ajax/libs/jquery/3.4.1/jquery.min.js