Pull to refresh
-25
0

Пользователь

Send message

Ортографическая проекция в фотографии и прочие интересные фокусы с объективами

Level of difficultyMedium
Reading time30 min
Views22K

С тем как работает фотоаппарат мы знакомимся еще со школьной программы. Однако привычное нам из школьного курса сведение объектива к "тонкой линзе" на самом деле не отвечает на массу практических вопросов. Например как удается создавать объективы с ортографической проекцией применяемые в системах технического зрения?

Да-да, такие тоже бывают не только в компьютерной графике, но и в фотографии: попробуйте-ка это объяснить оперируя исключительно в терминах "тонкой линзы". Размер изображения предмета в таких системах (почти) не зависит от того на каком расстоянии от объектива они находятся и это весьма удобно для измерения размеров предмета. В этой статье мы поговорим о том как этого удается добиться, как работает автофокус и пленоптические камеры и о многих других интересных вещах

Так как же работает объектив?
Total votes 162: ↑161 and ↓1+160
Comments38

Как мы уменьшаем размер изображений на веб-страницах в 10 раз с помощью нашего оптимизатора

Reading time8 min
Views19K

Привет, Хабр! Меня зовут Евгений Лабутин, я из команды разработки продукта МТС Твой бизнес. Мы разработали свой рецепт приготовления картинок для нашего портала. Благодаря ему удалось сократить их вес на странице до 10 раз относительно уже оптимизированного jpg/png, сохранив при этом простоту разработки – как будто это стандартный img элемент. Разработанный микросервис называется ImageOptimize, из этой статьи вы узнаете, как он работает и что у него под капотом. Мы уже выложили код микросервиса в OpenSource (чему очень рады), поэтому вы тоже можете использовать такую компрессию, настроив ее в несколько простых шагов.

Читать далее
Total votes 37: ↑35 and ↓2+33
Comments28

Переезд в Португалию: Лиссабон как локация для удалённой работы

Reading time7 min
Views47K

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

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

 ·         Климат

·         Безопасность

·         Образование для детей

·         Стоимость жизни

·         Виза

·         Стиль/качество жизни

Поехали!
Total votes 45: ↑40 and ↓5+35
Comments79

Python service layer: основы оформления бизнес-логики на примере Django-приложений

Reading time18 min
Views32K

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

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

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

На самом деле, изложенный далее текст относится не только к Django-проектам. Разрабатывая веб-приложения, используя другие инструменты, вроде Flask, люди используют те же концепции веб-разработки, причём часто именно в таком же виде, как они реализованы, в Django - views, request-response объекты, middlewares, модели, формы.

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

Сборка ядра Linux с LTO оптимизацией

Reading time25 min
Views29K


Технический прогресс не стоит на месте, появляются новые компьютерные архитектуры, компиляторы становятся умнее и генерируют более быстрый машинный код. Современные задачи требуют все более креативного и эффективного решения. В данной статье пойдет речь, на мой взгляд, про один из самых прогрессивных тулчейнов LLVM и компиляторы на его основе Clang и Clang++, для языков программирования С и C++ соответственно. Хоть GCC — конкурент Clang, может агрессивнее оптимизировать циклы и рекурсию, Clang дает на выходе более корректный машинный код, и чаще всего не ломает поведение приложений. Плюс оптимизация программ не заканчивается только оптимизацией циклов, поэтому Clang местами дает лучшую производительность. В GCC же за счет переоптимизации вероятность получить unpredictable behavior значительно выше. По этой причине на многих ресурсах не рекомендуют использовать -O3 и LTO(Link Time Optimization) оптимизации для сборки программ. Плюс в случае агрессивной оптимизации, размер исполняемых файлов может сильно увеличиться и программы на практике будут работать даже медленнее. Поэтому мы остановились на Clang не просто так и опции компиляции -O3 и LTO работают в нем более корректно. Плюс современные компиляторы более зрелые, и сейчас уже нет тех детских болячек переоптимизации и LTO.
Узнать подробности
Total votes 81: ↑70 and ↓11+59
Comments55

Передаём файл между изолированными виртуальными машинами через побочные каналы

Reading time11 min
Views5.9K

Не далее пяти дней назад на хабре появилась новость под заголовком "В Apple M1 нашли уязвимость M1RACLES — возможна быстрая скрытая передача данных между приложениями". В одном предложении суть формулируется так: в Apple M1 нашли регистр, который кто угодно может читать и писать из непривилегированного режима. Значит, это можно использовать для обмена данными в обход механизмов межпроцессного взаимодействия, предоставленных ОС.

В комментариях к этой публикации развязалась умеренно оживлённая дискуссия о статусе находки: всё-таки серьёзная уязвимость или пустяк? Наряду с @SergeyMaxи @wataru я обратил внимание, что каналов скрытого обмена и так существует предостаточно просто потому, что исполняющая клиентский софт или виртуальные машины аппаратура является разделяемой средой, грамотная модуляция состояний которой делает возможным произвольный обмен данными вне зависимости от инвариантов нижележащей ОС или гипервизора. Противоположной точки зрения придерживаются почтенные господа @creker и @adjachenko, утверждая, что доселе известные побочные каналы качественно уступают возможностям M1RACLES.

Эта заметка является наглядной иллюстрацией к моему утверждению о легкодоступности скрытых каналов обмена. Я собрал простой PoC из ~500 строк на C++, при помощи которого был успешно отправлен файл из одной виртуальной машины в другую на том же физическом хосте. Далее я кратко описываю его устройство, пределы применимости, и привожу выводы и мнение самого автора M1RACLES в конце.

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

Как найти удаленную работу в зарубежной компании. 10 шагов

Reading time10 min
Views59K


Каждый год Оксфордский словарь английского языка выбирает «Слово года». Но в 2020-м что-то пошло не так. Издательство Оксфордского университета описало 2020-й как «год, который лишил нас дара речи», и сказало, что к нему невозможно подобрать правильное слово.


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


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


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

Читать дальше →
Total votes 32: ↑30 and ↓2+28
Comments16

Два с половиной странных правила английского языка, которых не учат в школе

Reading time6 min
Views148K

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

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

Читать далее
Total votes 80: ↑74 and ↓6+68
Comments188

Погружаемся в логические свойства CSS

Reading time5 min
Views16K

Поддержка логических свойств CSS со временем становится лучше. Однако мне по-прежнему трудно запомнить их, когда использую их в проекте. Что означают start и end? Несколько сложно охватить все детали без проб и ошибок.

В этой статье я нацелен прокачать вас и пробежаться по использованию логических свойств, чтобы возникло твёрдое понимание, у дизайнеров, говорящих на английском и арабском языках. Я попытался придумать визуальное объяснение логических свойств, которое, надеюсь, будет понятным. Готовы? Погружаемся!

Приятного чтения!
Total votes 9: ↑9 and ↓0+9
Comments0

Неожиданная полнота по Тьюрингу повсюду

Reading time13 min
Views60K
Каталог программных конструкций, языков и API, которые неожиданно являются полными по Тьюрингу; последствия этого для безопасности и надёжности. Приложение: сколько компьютеров в вашем компьютере?

Любая достаточно сложная программа на Си или Фортране содержит заново написанную, неспецифицированную, глючную и медленную реализацию половины языка Common Lisp. — Десятое правило Гринспена

Полнота по Тьюрингу (Turing-completeness, TC) — это свойство системы при некотором простом представлении ввода и вывода реализовать любую вычислимую функцию.

Тьюринг-полнота — фундаментальное понятие в информатике. Она помогает ответить на многие ключевые вопросы, например, почему невозможно создание идеальной антивирусной программы. Но в то же время она является поразительно распространённым явлением. Казалось бы, компьютерной системе трудно достичь такой универсальности, чтобы выполнять любую программу, но получается наоборот: трудно написать полезную систему, которая немедленно не обратится в полную по Тьюрингу. Оказывается, что даже небольшой контроль над входными данными и преобразованием их в результат, как правило, позволяет создать тьюринг-полную систему. Это может быть забавным, полезным (хотя обычно нет), вредным или чрезвычайно небезопасным и настоящим подарком для хакера (см. о «теоретико-языковой безопасности», которая изучает методы взлома «странных машин»1). Удивительные примеры такого поведения напоминают нам о том, что полнота по Тьюрингу таится повсюду, а защитить систему чрезвычайно сложно.
Читать дальше →
Total votes 54: ↑53 and ↓1+52
Comments15

Умный print для C

Reading time3 min
Views18K

Для тех кто пишет на С, возможно, будет интересно как мне удалось создать умную функцию print(), в которую можно кидать переменные любого типа — дженерик print.

show me the code
Total votes 90: ↑87 and ↓3+84
Comments30

SQL-инъекции' union select null,null,null --

Reading time9 min
Views34K

Согласно OWASP Top-10, SQL-инъекции считаются наиболее опасными уязвимостями. Успешная атака с их использованием может не только привести к компрометации данных, таких, как: пароли, данные кредитной карты или личная информация пользователя, но и, при определенных условиях, самого сервера. В этой статье мы рассмотрим предпосылки к появлению SQL-инъекций, ознакомимся с их видами и составим список рекомендаций для защиты веб-приложений от подобных недостатков.

Читать далее
Total votes 28: ↑18 and ↓10+8
Comments24

Зачем вам может понадобиться SITE_ID в настройках Django

Reading time5 min
Views7.1K
КДПВ

Если вы не используете все возможности Django, то, очень вероятно, вы не пользуетесь SITE_ID. Этому способствуют как убогая официальная документация Sites framework, так и несогласованное с Sites развитие кода Django.

Предположу, что Sites скоро будет бездумно снесен свежими «разработчиками» Django, как это уже произошло с модулями Comments (Dj 1.6) или Formtools (Dj 1.8). А, пока этого не произошло, предлагаю вам поразмышлять о возможностях Django Sites framework.
Читать дальше →
Total votes 12: ↑12 and ↓0+12
Comments5

Старый DVD-привод превращается… в лазерный микроскоп

Reading time3 min
Views59K


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

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

Это оптический микроскоп, который использует для сканирования образца сфокусированный лазерный луч.
Total votes 133: ↑129 and ↓4+125
Comments19

Памятка для пострадавшего от слезоточивого газа/перцового баллона

Reading time22 min
Views147K
Началась эта история еще в докоронавирусное время, еще тогда когда в моем LAB66 была всего пара тысяч подписчиков и работал бот-автоответчик. И вот в этот бот как-то постучался русскоговорящий парень из Чили и задал вопрос про слезоточивый газ. Про то, как жить вообще, когда по улицам ездят автомобили и распыляют «просроченный слезоточивый газ из Бразилии». Тогда я клятвенно пообещал вопросом этим заняться. Прошло… а прошло всего лишь полгода (хотя из-за обилия событий в 2020 кажется, что прошло 20 лет :) и я решил наконец написать парню ответ. Извини за задержку, Sergio из Чили, я был занят коронавирусом… Читай ответ под катом!


Всякое в жизни бывает, а вдруг да и пригодится...
Total votes 142: ↑139 and ↓3+136
Comments116

CSS Grid понятно для всех

Reading time3 min
Views47K

Что такое Grid?


Grid представляет собой пересекающийся набор горизонтальных и вертикальных линий — один набор определяет столбцы, а другой строки. Элементы могут быть помещены в сетку, соответственно строкам и столбцам.

Поддержка браузерами


В 2020 году поддержка браузерами достигает 94 %



Grid контейнер


Мы создаем grid контейнер, объявляя display: grid или display: inline-grid на элементе. Как только мы это сделаем, все прямые дети этого элемента станут элементами сетки.

<body>
 <div class="row">
  <div class="row__item header">
   <h1>Header</h1>
  </div>
  <div class="row__item nav">
   <h1>Navbar</h1>
  </div>
  <div class="row__item article">
   <h1>Article</h1>
  </div>
  <div class="row__item ads">
   <h1>Ads</h1>
  </div>
 </div>
</body>

.row {
 display: grid;
 margin: auto;
 grid-template-rows: 60px 1fr ;
 grid-template-columns: 20% 1fr 15%;
 grid-gap: 10px;
 width: 1000px;
 height: 1000px;
 justify-items: center;
 justify-content: space-between;
 grid-template-areas:
 "header header header"
 "nav article ads"; 
}

grid-template-rows — это CSS свойство, которое определяет названия линий и путь размера функции grid rows.

CSS свойство grid-row определяет с какой строки в макете сетки будет начинаться элемент, сколько строк будет занимать элемент, или на какой строке завершится элемент в макете сетки. Является сокращенным свойством для свойств grid-row-start и grid-row-end.

Свойство CSS grid-gap является сокращенным свойством для grid-row-gap и grid-column-gap, определяющего желоба между строками и столбцами сетки.

Свойство grid-template-areas определяет шаблон сетки ссылаясь на имена областей, которые заданы с помощью свойства grid-area.

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

С помощью свойства grid-area мы можем назначить каждой из этих областей свое собственное имя. Именование областей еще не создает никакого макета, однако теперь у нас есть именованные области, которые мы можем в нем использовать.
Читать дальше →
Total votes 19: ↑14 and ↓5+9
Comments7

8 продвинутых возможностей модуля logging в Python, которые вы не должны пропустить

Reading time20 min
Views87K

Понимайте свою программу без ущерба для производительности


image


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


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

Читать дальше →
Total votes 19: ↑17 and ↓2+15
Comments6

Трюки с SQL от DBA. Небанальные советы для разработчиков БД

Reading time22 min
Views31K

Когда я начинал свою карьеру разработчика, моей первой работой стала DBA (администратор базы данных, АБД). В те годы, ещё до AWS RDS, Azure, Google Cloud и других облачных сервисов, существовало два типа АБД:

  • АБД инфраструктуры отвечали за настройку базы данных, конфигурирование хранилища и заботу о резервных копиях и репликации. После настройки БД инфраструктурный администратор время от времени «настраивал экземпляры», например, уточнял размеры кэшей.
  • АБД приложения получал от АБД инфраструктуры чистую базу и отвечал за её архитектуру: создание таблиц, индексов, ограничений и настройку SQL. АБД приложения также реализовывал ETL-процессы и миграцию данных. Если команды использовали хранимые процедуры, то АБД приложения поддерживал и их.

АБД приложений обычно были частью команд разработки. Они обладали глубокими познаниями по конкретной теме, поэтому обычно работали только над одним-двумя проектами. Инфраструктурные администраторы баз данных обычно входили в ИТ-команду и могли одновременно работать над несколькими проектами.
Читать дальше →
Total votes 76: ↑72 and ↓4+68
Comments38

Aiohttp + Dependency Injector — руководство по применению dependency injection

Reading time13 min
Views6.4K
Привет,

Я создатель Dependency Injector. Это dependency injection фреймворк для Python.

Продолжаю серию руководств по применению Dependency Injector для построения приложений.

В этом руководстве хочу показать как применять Dependency Injector для разработки aiohttp приложений.

Руководство состоит из таких частей:
Читать дальше →
Total votes 3: ↑3 and ↓0+3
Comments0

Google Dorking или используем Гугл на максимум

Reading time21 min
Views210K

Вступление


Google Dorks или Google Hacking — техника, используемая СМИ, следственными органами, инженерами по безопасности и любыми пользователями для создания запросов в различных поисковых системах для обнаружения скрытой информации и уязвимостях, которые можно обнаружить на общедоступных серверах. Это метод, в котором обычные запросы на поиск веб-сайтов используются в полную меру для определения информации, скрытой на поверхности.
Читать дальше →
Total votes 37: ↑33 and ↓4+29
Comments7
1
23 ...

Information

Rating
3,888-th
Location
Днепр, Днепропетровская обл., Украина
Date of birth
Registered
Activity