Сначала может показаться, что пост о «ещё одном медиаплеере», и вот уже паникующийин бежит с выпученными глазами прочь, кидаясь минусами в людей, животных и программистов. Ну, в общем и целом, да, пост примерно об этом. Но. Есть, на мой взгляд, одно весомое Но, о котором ниже.
Архив за 09 октября 2017 - 8
Сколько стоит космос
2017-10-09 в 4:06, admin, рубрики: космонавтика, космос, межпланетные станции, Научно-популярное
Многие считают что космос — это дорого и непрактично. Но на самом деле это не всегда так. Поэтому сегодня я хотел бы на 20 примерах показать как соотносится стоимость космических миссий с чем-то более близким для нашей «земной» жизни.
Примечание: цены указаны с учётом стоимости обслуживания аппаратов и приведены к ценам на 2017 год (с учётом инфляции). Под сравнением указаны краткие достижения научных миссий.
39,5 млн $ | 69 млн $ |
---|---|
Цена покупки Ferrari 250 GTO на аукционе в 2014 году | Стоимость миссии «Чандраян-1» — первой индийской миссии по изучению Луны |
Спутник отработал меньше года из планируемых двух, но всё же сделал сенсацию — с помощью него удалось найти воду на лунных полюсах (воду находили ещё миссии «Аполлонов», но посчитали что она была занесена в образцы уже на Земле). На спутнике находилось 10 различных приборов (включая камеру) и ударный зонд.Читать полностью »
Презентация Маска: дизайнеры и пиарщики по-прежнему побеждают инженеров
2017-10-09 в 4:05, admin, рубрики: BFR, Interplanetary Transport System, spacex, космонавтика, Маск, Научно-популярное, пилотируемая космонавтикаГод назад я прокомментировал презентацию Илона Маска на 67 Международном астронавтическом конгрессе. В этом году на конгрессе была представлена следующая презентация. За прошедшую неделю успели появиться не только комментарии, но и комментарии к комментариям, но мне все равно кажется небесполезным сравнить презентации и высказать пару своих мыслей.
Новый вариант BFR выводит спутник, рисунок SpaceX
Читать полностью »
Железнодорожно-ориентированное программирование. Обработка ошибок в функциональном стиле
2017-10-09 в 4:04, admin, рубрики: .net, either monad, F#, functional programming, rop, Программирование, Проектирование и рефакторинг, Разработка веб-сайтов, функциональное программирование
Как пользователь я хочу изменить ФИО и email в системе.
Для реализации этой простой пользовательской истории мы должны получить запрос, провести валидацию, обновить существующую запись в БД, отправить подтверждение на email пользователю и вернуть ответ браузеру. Код будет выглядеть примерно одинаково на C#:
string ExecuteUseCase()
{
var request = receiveRequest();
validateRequest(request);
canonicalizeEmail(request);
db.updateDbFromRequest(request);
smtpServer.sendEmail(request.Email);
return "Success";
}
и F#:
let executeUseCase =
receiveRequest
>> validateRequest
>> canonicalizeEmail
>> updateDbFromRequest
>> sendEmail
>> returnMessage
Отклоняясь от счастливого пути
Дополним историю:
Как пользователь я хочу изменить ФИО и email в системе
И увидеть сообщение об ошибке, если что-то пойдет не так.
Что же может пойти не так?
- ФИО может оказаться пустым, а email – не корректным
- пользователь с таким id может быть не найден в БД
- во время отправки письма с подтверждением SMTP-сервер может не ответить
- ...
Добавим код обработки ошибок
string ExecuteUseCase()
{
var request = receiveRequest();
var isValidated = validateRequest(request);
if (!isValidated) {
return "Request is not valid"
}
canonicalizeEmail(request);
try {
var result = db.updateDbFromRequest(request);
if (!result) {
return "Customer record not found"
}
} catch {
return "DB error: Customer record not updated"
}
if (!smtpServer.sendEmail(request.Email)) {
log.Error "Customer email not sent"
}
return "OK";
}
Вдруг вместо 6 мы получили 18 строк кода с ветвлениями и большей вложенностью, что сильно ухудшило читаемость. Каким будет функциональный эквивалент этого кода? Он выглядит абсолютно также, но теперь в нем есть обработка ошибок. Можете мне не верить, но, когда мы доберемся до конца, вы убедитесь, что это действительно так.
Читать полностью »
Оверклокер Der8auer предлагает процессоры Intel Coffee Lake Ultra Edition с проверенным частотным потенциалом и крышками из серебра
2017-10-09 в 4:00, admin, рубрики: Новости, метки: новостиДалеко не все пользователи, которые являются сторонниками разгона компьютерных компонентов, желают сами заморачиваться подбором соответствующих комплектующих и тратить время на процесс поиска оптимальных частот.
Известный оверклокер Der8auer предлагает для таких пользователей готовое решение. На сайте Caseking можно приобрести процессоры Intel Core i7-8700K, которые уже проверены и гарантировано заработают на указанной в описании частоте. Для каждого CPU она своя, но в целом показатели варьируются от 4,8 ГГц до 5,2 ГГц. Конечно, процессор на такой частоте будет стабилен при соответствующем охлаждении, требования к которому также есть в описании к CPU.
Lenovo официально представила ThinkPad Anniversary Edition 25
2017-10-09 в 3:51, admin, рубрики: Lenovo, retro thinkpad, thinkpad, thinkpad 25, thinkpad anniversary edition 25, Железо, лэптоп, ноутбук, Ноутбуки, старое железо
Да, это реальное название нового ноутбука. Краткость — сестра таланта.Читать полностью »
Игрушечный фронтенд для LLVM, написанный на Rust: Руководство для начинающих
2017-10-09 в 1:49, admin, рубрики: llvm компилятор llvm ir, open source, Rust, Компиляторы, ПрограммированиеПолный исходник с моими правками можно скачать здесь: https://github.com/arktur04/rust-llvm-toy-frontend
В настоящее время я работаю над компилятором, который написан на Rust, и порождает LLVM IR. LLVM API выглядит немного пугающе для новичков, и по нему не так много руководств (и все они на C++, поэтому не вполне очевидно, как сделать то же самое на Rust). Я бы хотел, чтобы кто-то протянул мне руку помощи, когда я начинал всё это, и эта статья является тем, что я хотел бы показать самому себе в то время.
В Rust наилучшая возможность взаимодействия с LLVM — через крейт llvm-sys. Один добрый человек разместил документацию к нему здесь. Конечно, вам следует также изучить руководство по LLVM, так как оно поможет вам понять, как LLVM “думает”. Этот пост, в основном, является переводом на Rust подмножества из этого руководства.
Полный исходный код для этого руководства находится здесь.
Читать полностью »
Принцип единственной ответственности: фундамент декомпозиции
2017-10-09 в 1:03, admin, рубрики: C#, design patterns, god object, singleton, solid, srp, Анализ и проектирование систем, ооп, Программирование, Проектирование и рефакторинг
Сейчас об этом принципе слышал любой, кто занимается программированием. Чуть меньше тех, кто думает, что его знает. Гораздо меньше тех, кто действительно умеет его использовать. Я постараюсь объяснить суть, назначение и применение этого принципа как можно проще и короче.
Определение
Каждый программный объект имеет одно и только одно назначение.
Его можно исчерпывающе описать одним предложением, не используя союзы.
Пример
Lazy<T> — обертка для объекта, чье создание откладывается до первого обращения к нему.
Антипример
Синглтон — класс, не допускающий создания более одного экземпляра. В этом описании нет союзов, но оно неполное — синглтон всегда имеет основную функциональность помимо контроля единственности собственного экземпляра. Синглтон — класс, реализующий полезную функциональность и контролирующий единственность собственного экземпляра. Теперь описание исчерпывающее, но имеет союз "и" — у синглтона два разных назначения. Он не соответствует принципу единственной ответственности.
Еще антипример
Локатор сервисов — позволяет получить доступ к любому сервису приложения. Это описание без исчерпывающего списка сервисов заведомо неполное.
Назначение
Упрощение создания, анализа и модификации программных систем.