Pull to refresh
7
0
Николай @har1ey

User

Send message

25 лет «Аэрону»: ощущения и впечатления от обновлённой версии Aeron Remastered

Reading time9 min
Views53K
«Аэрон» это кресло не только с ценником, но и с историей. Выпущенный в 1994 году «трон доткомов» пережил большинство своих мыльных королевств, вместо гранитной плиты получив прописку в коллекции нью-йоркского Музея современного искусства MoMA, — и стал самым продаваемым офисным креслом Америки.



«Лучше, чем Aeron» назывался обзор кресла Herman Miller Mirra 2, вышедший в 2014 году — обновлённой «Мирре» тогда был год, «Аэрону» — 20. Короче, обновление «Аэрона» в 2016 году, 22 лет отроду, было нерядовым событием. Теперь уже «Аэрону-2» 2 года, а «Мирре-2» — 5 лет. Впрочем, о матче-реванше речи не идёт: ценник Herman Miller Aeron Remastered на родине на 20% выше всё ещё недешёвой Mirra 2 намекает на разные рыночные ниши моделей — впрочем, знакомство с «Миррой», которая, судя по всему, в самом зените своей рыночной карьеры — пригодится для контекста.
Читать дальше →
Total votes 52: ↑39 and ↓13+26
Comments60

Блеск и нищета IT в Германии

Reading time7 min
Views178K

Уже четыре года я работаю Java разработчиком в небольшой немецкой компании.

В начале прошлого года я увидел на столе одного из моих «кураторов» забытый листок с расчётом заработной платы за месяц. Конечно же, я не мог в него не посмотреть. Сумма, которую я увидел у Нильса, меня удивила. Зарплата брутто: 3300€ в месяц. Живет один, жены нет, детей нет. Значит на руки у него выходит примерно 2130€ (~130000 рублей по курсу на 01.09.2022).

Можете себе представить? Мой куратор, урожденный немец, Senior Developer, прекрасно говорящий на английском, с опытом работы разработчиком более пятнадцати лет получает в Германии 3300€ в месяц. А я – Middle Java разработчик с немецким B2 и английским B1 на испытательный срок получил сразу 3500€! Сейчас моя мой зарплата 4000€ в месяц.

Многие мне не поверили. Некоторые не верят даже в мои 4000€ (слишком мало), не говоря уже про зарплату Нильса. Откуда такая мизерная зарплата для столь высококвалифицированного работника? Ведь в представлении большинства наших соотечественников все разработчики в Германии деньги просто лопатой гребут. Особенно, если они работают в финансовой сфере. Цифры должны по-любому начинаться от 6000€ в месяц. Какие 3300???

Вот и levels.fyi (на КДПВ) говорит, что медианная зарплата разработчика в Германии 83160€ в год (6930€ в месяц)

Выходит, что Зарплата Нильса ниже нижнего предела (такого столбца даже нет на этом графике). Так какая же в реальности зарплата у разработчиков в Германии?

И почему Нильс получает так мало?
Total votes 250: ↑242 and ↓8+234
Comments511

6 ошибок мышления, из-за которых вы остаетесь на нелюбимой работе

Reading time8 min
Views71K

В начале 2020 года специалисты сервиса по поиску работы «Работа.ру» провели социальный опрос и выяснили, что в следующие 12 месяцев 74% россиян хотят заняться вопросом нового трудоустройства. 53% респондентов рассказали, что недовольны текущим уровнем заработной платы. Но почему в итоге ничего не происходит?

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

Читать далее
Total votes 52: ↑41 and ↓11+30
Comments36

Постоянный ток в доме. Риски, которые никто не замечает

Reading time5 min
Views96K

Постоянный ток с каждым днём завоёвывает всё новые рубежи в каждом доме. К кому то он приходит со светодиодными лентами, кому то с DIY и Arduino. Время идёт, и вот уже вчерашние любители без страха и упрёка начинают делать мощные аккумуляторные сборки и запитывать бытовую технику напрямую от солнечных панелей. За кадром остаётся главный нюанс - безопасности. Ведь токи и напряжения выросли вместе с игрушками, а о последствиях почти никто не задумывается.

Читать далее
Total votes 195: ↑187 and ↓8+179
Comments545

Невидимые убийцы в воздухе: как продлить себе жизнь, контролируя уровень чистого воздуха и PM₂,₅

Reading time24 min
Views30K


О чем вы беспокоитесь больше: о физических упражнениях, употреблении овощей или о воздухе, которым вы дышите?

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

Давайте посмотрим на это с разумной стороны: возьмем четыре самые большие страны мира и сравним, сколько людей умерло по тем или иным причинам в 2019 году.

image

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

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

Образ жизни
Быть викингом стоит 4 года жизни.
Жить в Дели стоит 3 года жизни.
Постоянно ездить на поезде из Ньюарка в Нью-Йорк стоит 6 месяцев жизни
Проживание в средней части США стоит 3 месяца жизни
(Вдыхать дым от чьего-то вейпа — около 0?)

Отдельно взятое событие
Если вы жили рядом с лесными пожарами на западном побережье США 2020 года, то это стоило вам 2,4 дня жизни.
Разжечь дома по-настоящему дымный огонь стоит 1 день жизни
Жечь конусное благовоние — 2,3 часа жизни
Одну ночь использовать ультразвуковой увлажнитель воздуха — 50 минут жизни
Жарить рыбу при закрытых окнах — 45 минут жизни
Жечь благовония-палочки — 27 минут жизни
Использование лака для волос — 14 минут жизни
Выкурить одну сигарету — 11 минут жизни
Задуть свечу перед сном — 10 минут жизни
Читать дальше →
Total votes 55: ↑46 and ↓9+37
Comments76

Апгрейд системы для облачного гейминга: теперь с Nvidia и Moonlight

Reading time5 min
Views9K

Третья, заключительная часть серии, посвященной пробросу видеокарт в виртуальную машину и организации облачной игровой системы для удаленного подключения по локальной сети с различных устройств.
Читать дальше →
Total votes 35: ↑34 and ↓1+33
Comments13

Тестирование проброса GPU на AMD Ryzen 7 5700G APU

Reading time7 min
Views16K

Проброс видеокарты с помощью VFIO может быть знаком немногим, но по факту является очень удобным способом решить ряд насущных задач и упростить рабочий процесс в целом. В этом проекте мы настроим нужную конфигурацию из под Fedora 34 и поочередно пробросим две разные видеокарты в VM, попутно оценив полученную производительность.
Читать дальше →
Total votes 47: ↑44 and ↓3+41
Comments35

Многообразие Linux-дистрибутивов

Reading time54 min
Views147K

Цель этой статьи показать и объяснить многообразие дистрибутивов Линукс. Показать основные сходства (они же все почему то называются "Линуксы" или даже правильнее "GNU/Linux") и основные различия (если бы не было различий их бы столько не существовало).

Плюс рассмотрим несколько наиболее задаваемых новичками вопросов:
- Сколько их (Linux-дистрибутивов)? Зачем так много?
- Основанный на другом дистрибутиве" - не пиратство ли это?
- Платный Linux - Как можно продавать то, что по определению распространяется бесплатно?
- Что такое "отечественный Linux"?

Читать далее
Total votes 191: ↑191 and ↓0+191
Comments132

Изучаем Docker, часть 3: файлы Dockerfile

Reading time12 min
Views700K
В переводе третьей части серии материалов, посвящённых Docker, мы продолжим вдохновляться выпечкой, а именно — бубликами. Нашей сегодняшней основной темой будет работа с файлами Dockerfile. Мы разберём инструкции, которые используются в этих файлах.

Часть 1: основы
Часть 2: термины и концепции
Часть 3: файлы Dockerfile
Часть 4: уменьшение размеров образов и ускорение их сборки
Часть 5: команды
Часть 6: работа с данными


Бублики — это инструкции в файле Dockerfile
Читать дальше →
Total votes 30: ↑30 and ↓0+30
Comments11

Модуль Mock: макеты-пустышки в тестировании

Reading time6 min
Views116K
Mock на английском значит «имитация», «подделка». Модуль с таким названием помогает сильно упростить тесты модулей на Питоне.

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

Такое поведение — уже не надувные ракетные установки, а целая надувная земля, вокруг которой могут летать испытуемые ракеты и самолёты.

Российские надувные макеты ракетных и радарных установок

Читать дальше →
Total votes 31: ↑29 and ↓2+27
Comments19

Как работает yield

Reading time6 min
Views663K
На StackOverflow часто задают вопросы, подробно освещённые в документации. Ценность их в том, что на некоторые из них кто-нибудь даёт ответ, обладающий гораздо большей степенью ясности и наглядности, чем может себе позволить документация. Этот — один из них.

Вот исходный вопрос:
Как используется ключевое слово yield в Python? Что оно делает?

Например, я пытаюсь понять этот код (**):
def _get_child_candidates(self, distance, min_dist, max_dist):
    if self._leftchild and distance - max_dist < self._median:
        yield self._leftchild
    if self._rightchild and distance + max_dist >= self._median:
        yield self._rightchild

Вызывается он так:
result, candidates = list(), [self]
while candidates:
    node = candidates.pop()
    distance = node._get_dist(obj)
    if distance <= max_dist and distance >= min_dist:
        result.extend(node._values)
        candidates.extend(node._get_child_candidates(distance, min_dist, max_dist))
        return result


Что происходит при вызове метода _get_child_candidates? Возвращается список, какой-то элемент? Вызывается ли он снова? Когда последующие вызовы прекращаются?

** Код принадлежит Jochen Schulz (jrschulz), который написал отличную Python-библиотеку для метрических пространств. Вот ссылка на исходники: http://well-adjusted.de/~jrschulz/mspace/

Подробный и обстоятельный ответ
Total votes 141: ↑136 and ↓5+131
Comments41

PyTest

Reading time24 min
Views360K

Предисловие


По историческому призванию я 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 (см. «Вводная по необходимым знаниям»).

Подробное описание модуля и его возможностей под катом.
Читать дальше →
Total votes 26: ↑23 and ↓3+20
Comments11

Понимаем декораторы в Python'e, шаг за шагом. Шаг 1

Reading time6 min
Views430K

На Хабре множество раз обсуждалась тема декораторов, однако, на мой взгляд, данная статья (выросшая из одного вопроса на stackoverflow) описывает данную тему наиболее понятно и, что немаловажно, является «пошаговым руководством» по использованию декораторов, позволяющим новичку овладеть этой техникой сразу на достойном уровне.

Итак, что же такое «декоратор»?


Впереди достаточно длинная статья, так что, если кто-то спешит — вот пример того, как работают декораторы:
def makebold(fn):
    def wrapped():
        return "<b>" + fn() + "</b>"
    return wrapped
 
def makeitalic(fn):
    def wrapped():
        return "<i>" + fn() + "</i>"
    return wrapped
 
@makebold
@makeitalic
def hello():
    return "hello habr"
 
print hello() ## выведет <b><i>hello habr</i></b>

Те же из вас, кто готов потратить немного времени, приглашаются прочесть длиииинный пост
Total votes 119: ↑106 and ↓13+93
Comments38

Python Testing с pytest. Глава 2, Написание тестовых функций

Reading time34 min
Views101K

Вернуться Дальше


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


Читать дальше →
Total votes 26: ↑17 and ↓9+8
Comments0

Python Testing с pytest. Начало работы с pytest, Глава 1

Reading time24 min
Views197K

Вернуться Дальше


Я обнаружил, что Python Testing с pytest является чрезвычайно полезным вводным руководством к среде тестирования pytest. Это уже приносит мне дивиденды в моей компании.

Chris Shaver
VP of Product, Uprising Technology


Читать дальше →
Total votes 31: ↑22 and ↓9+13
Comments2

Load Average в Linux: разгадка тайны

Reading time18 min
Views213K


Средние значения нагрузки (Load averages) — это критически важная для индустрии метрика. Многие компании тратят миллионы долларов, автоматически масштабируя облачные инстансы на основании этой и ряда других метрик. Но на Linux она окутана некой тайной. Отслеживание средней нагрузки на Linux — это задача, работающая в непрерываемом состоянии сна (uninterruptible sleep state). Почему? Я никогда не встречал объяснений. В этой статье я хочу разгадать эту тайну, и создать референс по средним значениям нагрузки для всех, кто пытается их интерпретировать.

Читать дальше →
Total votes 127: ↑125 and ↓2+123
Comments25

Фреймворки для тестирования: личный опыт и новые методы

Reading time12 min
Views22K

Привет, Хабр! Меня зовут Сергей Радченко, и мы с командой профессионально занимаемся тестированием уже несколько лет. Сегодня я посчитал количество автотестов, которые мы подготовили для веб-интерфейсов, десктопных приложений, API, систем двухфакторной авторизации и так далее (их оказалось более 5000). И мне захотелось рассказать о нашем опыте создания экосистемы для автоматизированного тестирования. В этом посте вы найдете описание полезных для комплексного тестирования фреймворков, а также исходный код некоторых дополнительных методов, которые мы дописали самостоятельно, чтобы написание тестов происходило быстрее, и тестирование приносило больше пользы. 

Читать далее
Total votes 17: ↑16 and ↓1+15
Comments9

Минусы эмиграции: валить или не валить

Reading time14 min
Views73K

Там у них пока что лучше бытово,
Так чтоб я не отчебучил не того —
Он мне дал прочесть брошюру как наказ,
Чтоб не вздумал жить там сдуру, как у нас.
(с) В. Высоцкий (Инструкция перед поездкой за рубеж)

Хорошо там, где нас нет, и у чужого барана яйца больше, и яблоки у соседа вкуснее.

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

Очень много статей написано про эмиграцию и как там здорово, и это правда. Но очень мало статей про минусы. Про плюсы эмиграции пишут статьи либо помогайки по ВНЖ либо люди в эйфории в первые год переезда пока они ещё не успели столкнуться с действительностью во многих аспектах жизни и у чужого барана яйца больше. А через 7-10 лет жизни как-то никто не пишет почти. Восполню этот пробел. 

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

Конечно, найдутся и те, которые скажут, что я всё вру и отрабатывают свои 15р. Уж не знаю почему они про 15, а не про 30 пишут. Очень много людей почему-то видит мир в двух цветах свой-чужой. Кто-то вполне вероятно видит иначе. Кто-то скажет, что в России ещё хуже. Может быть где-то в России и ещё хуже, но важно же знать при переезде, что где-то не сильно лучше. Замечания и конструктивные аргументы только приветствуются для более полной картины. 

Читать далее
Total votes 194: ↑125 and ↓69+56
Comments862

Сохранение озвучки книги средствами Google TTS и python

Reading time3 min
Views6.5K

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

Читать далее
Total votes 12: ↑12 and ↓0+12
Comments32

Советские мечты о будущем

Reading time9 min
Views92K


Помните очаровательного котика, которые чихал в заставке советского мультфильма? Мы помним, и нашли его — вместе с ворохом другой рисованной фантастики. В детстве она пугала и обескураживала, поскольку поднимала серьезные, взрослые темы. Настала пора пересмотреть старые мультфильмы, чтобы узнать, о каком будущем мечтали в той стране.
Total votes 138: ↑136 and ↓2+134
Comments144
1
23 ...

Information

Rating
Does not participate
Location
Новосибирск, Новосибирская обл., Россия
Date of birth
Registered
Activity