Search
Write a publication
Pull to refresh
29
0
Marsikus @Marsikus

Инженер

Send message

Шаблоны проектирования с человеческим лицом

Reading time32 min
Views536K

image


Шаблоны проектирования — это способ решения периодически возникающих проблем. Точнее, это руководства по решению конкретных проблем. Это не классы, пакеты или библиотеки, которые вы можете вставить в своё приложение и ожидать волшебства.


Как сказано в Википедии:


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

image Будьте осторожны


  • Шаблоны проектирования — не «серебряная пуля».
  • Не пытайтесь внедрять их принудительно, последствия могут быть негативными. Помните, что шаблоны — это способы решения, а не поиска проблем. Так что не перемудрите.
  • Если применять их правильно и в нужных местах, они могут оказаться спасением. В противном случае у вас будет ещё больше проблем.

В статье приведены примеры на PHP 7, но пусть вас это не смущает, ведь заложенные в шаблонах принципы неизменны. Кроме того, внедряется поддержка других языков.

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

Спросите Итана: как должен выглядеть учёный?

Reading time4 min
Views14K
image

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

Как вы можете понять по моей фотографии вверху, или по фотографии из профиля Facebook (внизу), я не особенно соответствую стереотипу о внешнем виде учёного.
Читать дальше →

Bash-скрипты: начало

Reading time11 min
Views2M
Bash-скрипты: начало
Bash-скрипты, часть 2: циклы
Bash-скрипты, часть 3: параметры и ключи командной строки
Bash-скрипты, часть 4: ввод и вывод
Bash-скрипты, часть 5: сигналы, фоновые задачи, управление сценариями
Bash-скрипты, часть 6: функции и разработка библиотек
Bash-скрипты, часть 7: sed и обработка текстов
Bash-скрипты, часть 8: язык обработки данных awk
Bash-скрипты, часть 9: регулярные выражения
Bash-скрипты, часть 10: практические примеры
Bash-скрипты, часть 11: expect и автоматизация интерактивных утилит

Сегодня поговорим о bash-скриптах. Это — сценарии командной строки, написанные для оболочки bash. Существуют и другие оболочки, например — zsh, tcsh, ksh, но мы сосредоточимся на bash. Этот материал предназначен для всех желающих, единственное условие — умение работать в командной строке Linux.


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

Критическая уязвимость в Xfce, способная привести к выходу из строя монитора, до сих пор не исправлена

Reading time1 min
Views30K

Xfce — легковесное окружение рабочего стола для Linux и других Unix-like систем, любимое многими за стабильность и богатые возможности настройки. К сожалению, развитие проекта идёт довольно медленно, последняя мажорная версия (Xfce 4.12) вышла более двух лет назад, а многие баги живут годами.

Полтора года назад один из пользователей столкнулся с багом, который привёл к частичной потере работоспособности монитора. Естественно, он оставил багрепорт: «Экран загрузки по умолчанию привёл к повреждению моего монитора!»
Читать дальше →

Феномен «деревень Taobao»

Reading time8 min
Views35K


Китай — это не только промышленно-экономический бум и стремительная урбанизация. Это также многомиллионная часть населения, живущая в сельских районах за чертой бедности. Именно среди подобных китайских деревень возник феномен населённых пунктов, экономика которых целиком зависит от производства товаров, реализуемых крупнейшими китайскими интернет-магазинами. Этот феномен получил название «деревень Taobao». Под катом рассказ о том, как и чем живут современные китайские деревенщины. Если у вас все хорошо с английским, оригинал текста можно прочесть здесь. Хотелось бы, конечно, рассказать о нечто подобном из российской действительности, но пока вспоминаются лишь Гусь-Хрустальный, Гжель и прочие предания старины глубокой. Упоминаний о деревнях Озон, Юлмарт и Викимарт я пока не встречал. Если знаете о чем-то подобном, сигнализируйте в комментариях. Let's go!
Читать дальше →

Mahou — волшебный переключатель раскладок

Reading time3 min
Views56K

Как я создал первую функцию


Все началось с того что я захотел программировать на C# (до создания этой программы у меня было почти что никаких знаний о C#), и была одна программа которая не работала так как я хотел (Punto Switcher) долго-долго я искал к ней альтернативы и ненадолго остановился на dotSwitcher нравилась она мне… Но через некоторое время я решил что ей не хватает функционала и решил посмотреть исходный код, кое-где кое-как я разобрался как все работает, но больше всего не понимал одну вещь — WinAPI, и начал я искать информацию по функциям используемых в dotSwitcher и понемногу я начинал запоминать и понимать смысл всего этого волшебства (так мне тогда казалось).

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

Диким слонам хватает двухчасового сна в сутки

Reading time4 min
Views12K
image
Уже встаю!

В апреле 2014 года Надин Гравет [Nadine Gravett] усыпила при помощи транквилизатора двух слоних и оснастила их устройствами для отслеживания. Эти научные аналоги фитнес-браслетов записывают движения, и исследователи могут использовать их для измерения того, насколько хорошо испытуемые спят. Обычно их носят на запястье, но в случае со слоновьими ногами это неприемлемо, поэтому Гравет пришлось имплантировать их в самые подвижные части слоних – в хоботы.

Кожа в середине хобота такая толстая, что слоны не заметили имплантаты, и учёные целый месяц записывали движения животных. Проанализировав данные и изучая пятиминутные временные окошки, в которые движения не было, Гравет смогла вычислить, когда слоны спят. Она обнаружила, что в среднем они спят всего два часа в сутки – это минимальное количество сна из всех зафиксированных у животных на сегодняшний день.
Читать дальше →

Американские фермеры взламывают и устанавливают украинскую прошивку на тракторы

Reading time3 min
Views75K
В августе 2015-го была опубликована статья "Самостоятельный ремонт трактора John Deere — нарушение закона DMCA", в которой шла речь о том, что владельцам тракторов фирмы John Deere нельзя самостоятельно устранять возникшие неполадки — необходимо ждать приезда техника из компании или везти трактор к официальному дилеру, который может находиться на расстоянии в несколько десятков километров.

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



ПО тракторов защищены законом Digital Millennium Copyright Act, и при его нарушении грозит штраф до 500 тысяч долларов США и/или тюремное заключение сроком до пяти лет. Изначально закон был придуман для борьбы с цифровым пиратством и прецедентов с фермерами не было.

В июле 2016-го вышел материал "Фермеры США все еще пытаются добиться права ремонтировать собственные тракторы John Deere", в котором было сказано, что фермеры пытались «продавить» поправки к указанному закону.

Однако, исходя из опубликованного на днях материала Motherboard, становится понятно, что с самостоятельным ремонтом тракторов всё до сих пор не хорошо. Или наоборот, смотря как посмотреть: американские фермеры взламывают и устанавливают украинскую прошивку на тракторы.
Читать дальше →

PyTest

Reading time24 min
Views394K

Предисловие


По историческому призванию я SQL-щик. Однако судьба занесла меня на BigData и после этого понесла кривая — я освоил и Java, и Python, и функциональное программирование (изучение Scala стоит в списке). Собственно на одном из кусков проекта встала необходимость тестирования кода на Python. Ребята из QA посоветовали для этих целей PyTest, но даже они затруднились толком ответить чем этот зверь хорош. К сожалению, в русскоязычном сегменте информации по данному вопросу не так уж и много: как это используют в Yandex да и все по-хорошему. При этом описанное в этой статье выглядит достаточно сложно для человека начинающего путешествие по этой стезе. Не говоря уже об официальной документации — она приобрела для меня смысл лишь после того, как я разобрался с самим модулем по другим источникам. Не спорю, там написаны интересные вещи, но, к сожалению, совсем не для старта.

Юнит-тестирование Python


Что это и для чего рассказывать смысла не вижу — Википедия все равно знает больше. По поводу существующих модулей для Python хорошо описано на Хабре.

Вводная по необходимым знаниям


На описываемый момент знания Python у меня были достаточно поверхностны — я писал кое-какие несложные модули и знал стандартные вещи. Но при столкновении с PyTest мне пришлось пополнять багаж знаний декораторами тут и тут и конструкцией yield.

Преимущества и недостатки PyTest


1) Независимость от API (no boilerplate). Как код выглядит в том же unittest:

Код
import unittest

class TestUtilDate(unittest.TestCase):
    def setUp(self):
        #init_something()
        pass
        
    def tearDown(self):
        #teardown_something()
        pass
        
    def test_upper(self):
        self.assertEqual('foo'.upper(), 'FOO')
        
    def test_isupper(self):
        self.assertTrue('FOO'.isupper())
        
    def test_failed_upper(self):
        self.assertEqual('foo'.upper(), 'FOo')
        
if __name__ == '__main__':
    suite = unittest.TestLoader().loadTestsFromTestCase(TestUtilDate)
    unittest.TextTestRunner(verbosity=2).run(suite)


То же самое в PyTest:

Код
import pytest

def setup_module(module):
    #init_something()
    pass

def teardown_module(module):
    #teardown_something()
    pass

def test_upper():
    assert 'foo'.upper() == 'FOO'
    
def test_isupper():
    assert 'FOO'.isupper()
    
def test_failed_upper():
    assert 'foo'.upper() == 'FOo'


2) Подробный отчет. В том числе выгрузка в JUnitXML (для интеграции с Jenkins). Сам вид отчета может изменяться (включая цвета) дополнительными модулями (о них будет позднее отдельно). Ну и вообще цветной отчет в консоли выглядит удобнее — красные FAILED видны сразу.

image

3) Удобный assert (стандартный из Python). Не приходится держать в голове всю кучу различных assert'ов.

4) Динамические фикстуры всех уровней, которые могут вызываться как автоматически, так и для конкретных тестов.

5) Дополнительные возможности фикстур (возвращаемое значение, финализаторы, область видимости, объект request, автоиспользование, вложенные фикстуры)

6) Параметризация тестов, то есть запуск одного и того же теста с разными наборами параметров. Вообще это относится к пункту 5 «Дополнительные возможности фикстур», но возможность настолько хороша, что достойна отдельного пункта.

7) Метки (marks), позволяющие пропустить любой тест, пометить тест, как падающий (и это его ожидаемое поведение, что полезно при разработке) или просто именовать набор тестов, чтобы можно было запускать только его по имени.

8) Плагины. Данный модуль имеет достаточно большой список дополнительных модулей, которые можно установить отдельно.

9) Возможность запуска тестов написанных на unittest и nose, то есть полная обратная совместимость с ними.

Про недостатки, пусть их и не много, могу сказать следующее:

1) Отсутствие дополнительного уровня вложенности: Для модулей, классов, методов, функций в тестах есть соответствующий уровень. Но логика требует наличие дополнительного уровня testcase, когда та же одна функция может иметь несколько testcase'ов (например, проверка возращаемых значений и ошибок). Это частично компенсируется дополнительным модулем (плагином) pytest-describe, но там встает проблема отсутствия соответствующего уровня фикстуры (scope = “describe”). С этим конечно можно жить, но в некоторых ситуациях может нарушать главный принцип PyTest — «все для простоты и удобства».

2) Необходимость отдельной установки модуля, в том числе в продакшене. Все-таки unittest и doctest входят в базовый инструментарий Python и не требуют дополнительных телодвижений.

3) Для использования PyTest требуется немного больше знаний Python, чем для того же unittest (см. «Вводная по необходимым знаниям»).

Подробное описание модуля и его возможностей под катом.
Читать дальше →

Как НАСА нашло потерянный 8 лет назад индийский спутник Луны

Reading time3 min
Views25K


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

Системы такого рода находятся не только на орбите Земли, но и в других регионах космоса. Один из них – неработающий индийский спутник Чандраян-1. Он перестал подавать сигналы еще до завершения срока эксплуатации, но результат оказался тот же — он был потерян. Теперь его нашли при помощи Комплекса дальней космической связи Голдстоун.
Читать дальше →

+500 бесплатных инструментов для запуска вашего стартапа в 2017 году

Reading time40 min
Views156K


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

С другой стороны, в начале пути важно минимизировать издержки и внимательно следить за своими платными подписками. В конце месяца они могут незаметно вылиться в огромные накладные расходы.

Итак, мы нашли в интернете бесплатные и условно-бесплатные инструменты для роста вашего бизнеса. Когда они дадут вам желаемый результат, вы можете оформить платную подписку.
Читать дальше →

Проблемы тестирования: почему 100% покрытие кода это плохо

Reading time7 min
Views37K


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

Материал подготовлен на основе выступления разработчика Positive Technologies Ивана Цыганова на конференции Moscow Python Conf (слайды, видео).
Читать дальше →

Исследователи разработали технологию быстрой разморозки криоконсервированной ткани

Reading time4 min
Views19K


В некоторых научно-фантастических произведениях упоминается одна из возможностей путешествий в космосе на дальние расстояния. Аналогичный способ предлагают использовать и для «путешествий во времени»: человека замораживают, а через определенное время система запускает разморозку, и «путешественник» просыпается в далеком (или не очень) будущем. Аналогичная система «сна» есть и в реальности — некоторые компании предлагают безнадежно больным людям пройти процедуру криоконсервации для того, чтобы в будущем, когда ученые найдут способ лечить некогда неизлечимые болезни, человека разморозили и вылечили.

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

Ubuntu в техническом вузе

Reading time5 min
Views39K
Хотел бы рассказать об опыте использования Linux'a в целом и Ubuntu в частности в учебном процессе технического вуза — Ивановская государственная текстильная академия для студентов направления подготовки — «Моделирование и исследование в организационно-технических системах».
Читать дальше →

Яркое будущее солнечной энергетики

Reading time10 min
Views24K

Подробное и простое описание работы солнечных панелей и прогнозы на будущее


image
Как пьют чай в Тибете

Наш недавний обзор солнечных панелей мог оставить у вас впечатление, что сбор солнечной энергии – дело новое, однако люди эксплуатируют её уже тысячи лет. С её помощью они обогревают дома, готовят и греют воду. Некоторые из самых ранних документов, описывающих сбор солнечной энергии, восходят к древней Греции. Сам Сократ говорил, «в домах, смотрящих на юг, зимнее солнце проникает через галерею, а летом путь солнца проходит над нашей головою и прямо над крышей, из-за чего образуется тень». Он описывает то, как греческая архитектура использовала зависимость солнечных путей от времён года.

В V столетии до н.э. греки столкнулись с энергетическим кризисом. Преобладавшее топливо, древесный уголь, заканчивалось, поскольку они вырубили все леса для готовки и обогрева жилищ. Были введены квоты на лес и уголь, а оливковые рощи приходилось защищать от граждан. Греки подошли к проблеме кризиса, тщательно планируя городскую застройку, чтобы удостовериться в том, что каждый дом может воспользоваться преимуществами солнечного света, описанными Сократом. Комбинация технологий и просвещённых регуляторов сработала, и кризиса удалось избежать.
Читать дальше →

Как мы с друзьями прокачали наш сторонний проект до бизнеса с доходом в $17 000 в месяц

Reading time9 min
Views33K
В 2014 мы с друзьями решили создать настолько крутые инструменты веб-дизайна, насколько это вообще возможно. Мы создали UI kitsAdmin DashboardsTemplates и Plugins.

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



С точки зрения доходов, если не брать во внимание Черную пятницу с ее распродажами (которая помогла нам удвоить прибыль ноября 2016 года), мы выросли примерно до $ 22 000 выручки в месяц. Часть ее уходит на оплату комиссии по партнерской программе, НДС, налога поставщиков и другие траты. В результате на данный момент мы имеем около $17,000 ежемесячной чистой прибыли.
Сегодня я хочу поделиться с вами, как мы создавали свои продукты и как немного раскрутили этот побочный бизнес.
Читать дальше →

Как я построил успешный бизнес в сфере 3D-печати без знаний и опыта

Reading time10 min
Views42K


Привет, GeekTimes! Меня зовут Василий Киселев, я собственник и управляющий директор компании Top 3D Shop и сегодня я хочу рассказать о том, как я развивал свой бизнес без предпринимательского опыта и знаний.
Читать дальше →

3D-сканирование и 3D-печать в действии (посвящается мотоциклистам)

Reading time7 min
Views12K
Всем привет. Сегодня мы расскажем небольшую историю о немного необычном применении 3D принтера и 3D сканера.


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

Фермеры США все еще пытаются добиться права ремонтировать собственные тракторы John Deere

Reading time4 min
Views55K

Для того, чтобы владельцы смогли чинить свои тракторы, нужно изменить законодательство США об авторском праве




Фото: oticki/Thinkstock

Около года назад на Geektimes публиковалась статья об американском фермере Дэйве Алфорде, который много лет работает на собственном ранчо. Общая площадь ранчо составляет около 400 гектаров. Для обработки всей этой земли Алфорд использует большое количество техники, которая регулярно ломается. Дэйв предпочитает чинить все, что вышло из строя самостоятельно.

За три десятка лет владелец ранчо починил не один десяток тракторов. Не так давно он купил еще один — современный трактор John Deere 8520T. Здесь есть кондиционер и даже бортовой компьютер. Он может показывать, например, состояние двигателя. Если что-то выходит из строя, то компьютер сразу же показывает, какая именно система поломалась. Очень удобно — ведь можно все починить, зная, где и что нужно ремонтировать. Но на этом удобство и заканчивается, поскольку фермер не имеет права чинить трактор сам.
Читать дальше →

Прецизионное литьё мягким силиконом в домашних условиях, с помощью 3D-печати

Reading time14 min
Views40K
Одни люди страдают от фетишизма, но другие им наслаждаются, как православные фермеры на пасху — похмельем. А почему нет? «С утра выпил — день свободен», — гласит известная поговорка. Вот и автор относится ко второму типу, наслаждаясь инженерным фетишизмом по полной программе. Но во всём нужны мера и здравый смысл.

Данная статья про то, каких успехов можно добиться при использовании «непечатных» материалов, на старенькой «Пруше», без всяких выкрутасов и специальных экструдеров. В качестве use case автор задвинулся на многодисковой системе и решил максимально увеличить плотность установки «шпинделей» с одновременным уменьшением вибраций. В борьбе за миллиметры понадобилась пара дюжин абсолютно одинаковых мелких деталей с допусками 100мкм из очень мягкого и «тянучего» материала. Впрочем, если уважаемый читатель уже забыл про HDD, как про страшный сон, вообще абстрагируйтесь от use case и обратите внимание на нюансы литья, там тоже бывает нескучно.

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

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

Information

Rating
Does not participate
Location
Харьковская обл., Украина
Date of birth
Registered
Activity