Search
Write a publication
Pull to refresh
-2
0

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

Send message

Папа может в си, или Простая и аккуратная кодогенерация для SQLite

Reading time4 min
Views3.2K
image

Совсем скоро, 4 и 5 ноября, у нас стартуют новые потоки курсов SQL для анализа данных и C++ разработчик, специально к их старту мы подготовили этот перевод из блога Facebook Engineering с обзором полезного инструмента.

SQLite используется широко, но написание хорошо протестированных и поддерживаемых уровней доступа к данным в лучшем случае может стать сложной задачей. Многие команды применяют некую генерацию кода, чтобы избежать необходимости менять десятки порядковых номеров каждый раз, когда добавляется столбец, но такой подход приводит к ошибкам. Компилятор CQL в CG/SQL позволяет создавать сложные хранимые процедуры с большими запросами, а с помощью комбинаций синтаксических хелперов и сильной типизации эти процедуры гораздо проще получить и сохранить. Сочетание сильной типизации в языке и средства для хорошего юнит-тестирования может дать уверенность в том, что даже очень сложная логика корректна.
Приятного чтения!

Что может быть общего у поп-музыки и пения птиц

Reading time3 min
Views2.6K

Во время весеннего карантина гул самолетов, гудки автомобилей и низкочастотный фон со стороны дорог исчезли не только из нашей жизни. В Блумберге и BBC рассказали об исследовании поведения птиц в Сан-Франциско (США). Их пение стало заметнее и громче.

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

Читать далее

Шаблонные функции в Python, которые могут выполняться синхронно и асинхронно

Reading time7 min
Views12K
image

Сейчас практически каждый разработчик знаком с понятием «асинхронность» в программировании. В эру, когда информационные продукты настолько востребованы, что вынуждены обрабатывать одновременно огромное количество запросов и также параллельно взаимодействовать с большим набором других сервисов — без асинхронного программирования — никуда. Потребность оказалась такой большой, что был даже создан отдельный язык, главной фишкой которого (помимо минималистичности) является очень оптимизированная и удобная работа с параллельным/конкурентным кодом, а именно Golang. Несмотря на то, что статья совершенно не про него, я буду часто делать сравнения и ссылаться. Но вот в Python, про который и пойдёт речь в этой статье — есть некоторые проблемы, которые я опишу и предложу решение одной из них. Если заинтересовала эта тема — прошу под кат.
Читать дальше →

Настраиваем Acrobat Pro для допечатной подготовки

Reading time17 min
Views28K
Adobe Acrobat вроде бы не нужно представлять — это легендарное приложение легендарной компании у всех на слуху, и мало кто не знает его красного логотипа и не вспоминает первым делом при упоминали аббревиатуры PDF… Но если копнуть чуть глубже, то оказывается, что «знают» многие и про возможности формата PDF и, как следствие, про возможности Acrobat лишь малую долю от гигантского пласта функционала, сделавшего PDF одним из самых распространенных форматов документов, а Acrobat — нарицательным именем по работе с этим форматом. Как ни странно, это касается и многих специалистов по допечатной подготовке: кому-то не хватает времени разбираться в тонкостях, кому-то любопытства. Но если вы из тех, кому не нравится иметь недешевый умный кухонный комбайн и пользоваться у него лишь парой-тройкой кнопок, читайте дальше: в случае с Acrobat мы вместе разберем все заложенные в нем возможности для допечатной подготовки в серии статей, написанных по заказу такой же неравнодушной компании Softline.

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

О сложностях мониторинга работающих процессов в Linux

Reading time9 min
Views11K
Все знают о том, как наблюдать за работающими процессами в Linux-системе. Но почти никто не добивается в подобных наблюдениях высокой точности. На самом деле, всем методам мониторинга процессов, о которых пойдёт речь в этом материале, чего-то не хватает.



Давайте, прежде чем приступить к экспериментам, определим требования к системе наблюдения за процессами:

  1. Логироваться должны сведения обо всех процессах, даже о короткоживущих.
  2. У нас должны быть сведения о полном пути к исполняемому файлу для всех запущенных процессов.
  3. У нас, в пределах разумного, не должно возникать необходимости в модификации или перекомпиляции нашего кода для разных версий ядра.
  4. Дополнительное требование: если хост-система является узлом Kubernetes или использует Docker, то у нас должна быть возможность определить то, к какому именно поду/контейнеру принадлежит процесс. Для этого обычно достаточно знать cgroup ID процесса. Дело в том, что с точки зрения ядра нет такого понятия, как «контейнер» или «идентификатор контейнера». Ядро оперирует лишь такими понятиями, как «контрольные группы», «сетевые пространства имён», «пространства имён процессов», оно работает с различными независимыми API, с помощью которых средства контейнеризации вроде Docker реализуют механизмы контейнеризации. Если попытаться идентифицировать контейнеры посредством ID уровня ядра, нужен уникальный идентификатор контейнера. В случае с Docker данному требованию удовлетворяют идентификаторы контрольных групп.

Поговорим об обычных API Linux, которые могут помочь в решении этой задачи. Мы, чтобы не усложнять повествование, уделим особое внимание процессам, создаваемым с помощью системных вызовов execve. Если же говорить о более полном решении задачи, то при его реализации нужно, кроме того, мониторить процессы, созданные с помощью системных вызовов fork/clone и их вариантов, а так же — результаты работы вызовов execveat.
Читать дальше →

Представьте — что если все, что вы делаете будет бессмысленным и бесполезным?

Reading time5 min
Views45K

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

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

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

Читать далее

Неожиданное влияние текстов среднего размера на производительность PostgreSQL

Reading time18 min
Views18K
В схеме любой базы данных, наверняка, будет множество текстовых полей. Я, для целей этой статьи, разделил текстовые поля на три категории:

  1. Маленькие тексты. Имена и фамилии людей, заголовки страниц, имена пользователей, адреса электронной почты и прочее подобное. Обычно на размер таких полей накладываются определённые ограничения, довольно сильные. Возможно, это даже не поля типа text, а поля типа varchar(n).
  2. Большие тексты. Это, например, содержимое публикаций в блогах, тексты статей, HTML-код. Такие данные представляют собой большие фрагменты текста неограниченной длины, хранящиеся в базе данных.
  3. Тексты среднего размера. Это — описания, комментарии, отзывы о товарах, данные о трассировке стека и так далее. В сущности это — любые текстовые поля, размер которых находится между размерами «маленьких» и «больших» текстов. Обычно размер таких полей не ограничен, но их содержимое, по естественным причинам, меньше, чем содержимое полей категории «большие тексты».



В этом материале я хочу рассказать о неожиданном влиянии текстов среднего размера на производительность запросов в PostgreSQL. В частности, мы поговорим о TOAST (The Oversized-Attribute Storage Technique, Техника хранения больших атрибутов) 
Читать дальше →

Основные тренды развития телекоммуникаций в эпоху всем надоевшей пандемии

Reading time5 min
Views3.1K
image

28 октября Франция ушла в режим самоизоляции, аналогичным образом поступила Германия, хотя и с более мягкими условиями. Вероятно, в течение пары недель карантинный режим установят и другие страны — например, Испания, которая уже закрыла некоторые регионы.

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

Правда о регистре символов, которую должны знать программисты

Reading time9 min
Views31K
На конференции North Bay Python в 2018 году я делал доклад об именах пользователей. Информация из доклада по большей части была собрана мною за 12 лет поддержки django-registration. Этот опыт дал мне гораздо больше знаний, чем я планировал получить, о том, насколько сложными могут быть «простые» вещи.

В начале доклада я, правда, упомянул, что это не будет очередное разоблачение из серии «заблуждения по поводу Х, в которые верят программисты». Таких разоблачений можно найти сколько угодно. Однако мне подобные статьи не нравятся. В них перечисляются разные вещи, якобы являющиеся ложными, однако очень редко объясняется – почему это так, и что нужно делать вместо этого. Подозреваю, что люди просто прочтут такие статьи, поздравят себя с этим достижением, и потом пойдут находить новые интересные способы делать ошибки, не упомянутые в этих статьях. Всё потому, что они на самом деле не поняли проблем, порождающих этих ошибки.
Читать дальше →

Я пришел на собеседование с лайвкодингом — и меня с позором размазали

Reading time5 min
Views86K


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

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

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

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

Я был ослеплен «успехом» и согласился на финальный этап — лайвкодинг. И вот там мне и пришлось переосмыслить значение слова «жопа».
Читать дальше →

Что вообще значит «full stack»?

Reading time7 min
Views17K


Не счесть холиваров о том, стоит ли быть фуллстек-разработчиком. И в них часто вылезает ещё один спорный вопрос: а что это понятие означает-то? «Фронтбэкендер»? «Многорукий Шива, мастер всего от инфраструктуры до тестирования»? «Человек, освоивший столько технологий, что воспарил над ними в мир общих концепций»?


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


Когда понятие возникло? Как можно увидеть по графику Google Trends, в широкий обиход оно вошло с 2014-го. А на Хабре первое упоминание произошло в 2013-м. Это был перевод англоязычного блог-поста, где упоминается, что Facebook «нанимает только Full Stack». То есть в Фейсбуке это уже тогда было устоявшимся понятием? Я стал гуглить дальше и в техническом блоге Facebook нашёл пост 2010 года «The Full Stack, Part I» с тысячей лайков. А он, в свою очередь, ссылается на пост разработчика Рэнди Шмидта 2008 года. И, судя по прочей найденной мной информации, вот у Шмидта и было первое использование понятия, из которого выросло всё остальное. Теперь, когда мы добрались до начала начал, давайте пойдём по этим же постам в обратном направлении (по хронологии) и посмотрим, что в них говорилось.

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

Linux для смартфонов, часть 1. Забытое (и не очень) прошлое

Reading time7 min
Views22K
Уж сколько раз твердили Хабру, что не в меру интригующие заголовки приводят скорее к противному разочарованию, чем к повышенному интересу читателей — и всё равно здесь появляется статья о том, что готов релиз Fedora Linux для смартфонов. При внимательном прочтении выясняется, что не для смартфонов, а всего лишь для смартфона — причём смартфона довольно редкого и «в любом военторге» не продающегося, к тому же откровенно посредственного в аппаратной части. Правда, разработчики обещают в неопределённом будущем выкатить прошивку ещё для парочки малопопулярных смартфонов, но это принципиально ничего не меняет.

image

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

Ловля цен. Практическое руководство в море закупок

Reading time3 min
Views2.1K


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

Попробуем как-то отфильтровать базу товаров с закупок. Каждому товару в закупках присваивается код ОКПД2. Общероссийский классификатор продукции по видам экономической деятельности это код, который содержит информацию о товаре.

Например:



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

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

Не делать работу дважды

Reading time11 min
Views6.5K

30 сентября на конференции DevOps Live прозвучал доклад «Активация обмена знаниями» об обмене опытом и том, как бороться с двойной работой. Под катом — доклад в текстовом виде, обогащённый некоторыми деталями, и видео с докладом.

Читать далее

Можно ли сложить N чисел типа double наиболее точно?

Reading time13 min
Views29K

В предыдущих сериях…


Прошлая статья рассказала о двух способах сложения двух двоичных чисел с плавающей запятой без потери точности. Чтобы добиться этого, мы представили сумму c=a+b в виде двух чисел (s,t)=a+b, причём таких, что s — наиболее близкое к a+b точно-представимое число, а t=(a+b)-s — это отсекаемая в результате округления часть, составляющая точную погрешность. У читателей был вопрос: а можно ли достаточно точно сложить массив чисел типа double? Оказывается, можно! Но только, вероятно, не всегда и не абсолютно… и не алгоритмом Кэхэна, который тогда вспоминали в комментариях. За подробностями прошу под кат, где мы и найдём приложение тому, о чём я рассказал в прошлый раз.


Бьярне Страуструп о контроле над языком, удалении старых функций, заимствованиях у Rust и многом другом

Reading time27 min
Views18K

Этим летом на онлайн-конференции C++ Russia побывал самый почетный гость, какой только может быть на мероприятии по C++: создатель этого языка Бьярне Страуструп. Мы поговорили с ним о контроле над языком, нововведениях, удалении старых функций, о том, почему у языка нет четкой экосистемы, и как так получилось, что у С++ нет стандартной сетевой библиотеки.


А поскольку сообщество C++ вечно обсуждает Rust, не обошлось и без вопроса о заимствованиях между этими языками.



Бьярне не нуждается в представлении, но у него столько активностей и заслуг, что попробуем перечислить:


  • написал множество публикаций, в том числе книги «Язык программирования С++» и «Программирование: Принципы и практика использования C++»
  • работает управляющим директором в отделе технологий компании «Морган Стенли» в Нью-Йорке
  • преподает в Колумбийском университете
  • принимает активное участие в работе комитета по стандартизации C++
  • состоит в Национальной академии инженерии США, IEEE, Ассоциации по вычислительной технике. Исследует программирование в области распределенных вычислений, инструменты развития ПО и языки программирования.
  • магистр и заслуженный профессор Орхусского университета и доктор по направлению «Информатика» Кембриджского университета, почетный член научного сообщества Колледжа Черчилля, заслуженный профессор Санкт-Петербургского ИТМО

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

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

Reading time19 min
Views19K

image


Вступление


Фото сделано мной при посещении шоу-рума BMW Мюнхена.


Небольшая статья о там, как живется и чем дышится в большом и неповоротливом Automotive мире. Мире разработки программного обеспечения, какие технологии используются, какие задачи приходится решать, все исключительно на личном опыте. Да, тут я истины не открою, автомобильное ПО как правило использует устаревшие технологии и достаточно длинные циклы разработки, хотя конечно бывают исключения — Tesla, например. Хотя это лишь мои предположения по тому, что я могу прочесть об этой компании в интернете. Текст содержит небольшие вставки биографии автора.


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

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

Как 30 строк кода разорвали 27-тонный генератор

Reading time7 min
Views60K

Секретный американский эксперимент 2007 года доказал, что хакеры могут сломать оборудование энергосети так, что его уже невозможно будет починить. И для этого потребуется файл размером с типичный gif



Комната управления в здании национальных лабораторий Айдахо
Комната управления в здании национальных лабораторий Айдахо

В конце октября министерство юстиции США рассекретило обвинительный документ, касающихся группы хакеров, известной как Sandworm [песчаный червь]. В документе США обвинили шестерых хакеров, работающих на ГРУ, в компьютерных преступлениях, проходивших в последние пять лет по всему миру – от саботажа зимней олимпиады 2018 года в Южной Корее до запуска самой деструктивной из вредоносных программ на Украине. Среди этих обвинений упоминается беспрецедентная атака на украинскую энергосеть в 2016-м году, которая была разработана с тем, чтобы не только отключить подачу энергии, но и повредить оборудование энергосети. Когда один из исследователей кибербезопасности, Майк Ассанте, углубился в подробности этой атаки, он обнаружил, что идею взлома энергосетей придумали не русские хакеры, а правительство США – придумало, и испытало её ещё десять лет назад [никаких доказательств в обвинении традиционно не приводится; энтузиасты при помощи нейросети провели поиски людей по фотографиям, приведённым в документах, и один из них оказался очень похож на тромбониста из Барнаула / прим. перев.].
Читать дальше →

Команда find в Linux – мощный инструмент сисадмина

Reading time5 min
Views319K


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


Команда find – это невероятно мощный инструмент, позволяющий искать файлы не только по названию, но и по:


  • Дате добавления.
  • Содержимому.
  • Регулярным выражениям.

Данная команда будет очень полезна системным администраторам для:


  • Управления дисковым пространством.
  • Бэкапа.
  • Различных операций с файлами.

Команда find в Linux производит поиск файлов и папок на основе заданных вами критериев и позволяет выполнять действия с результатами поиска.

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

Вышел релиз Fedora 33. Что нового?

Reading time3 min
Views14K

Вчера стал доступен дистрибутив Fedora 33. Разработчики выложили сразу несколько продуктов, включая Fedora Workstation, Fedora Server, CoreOS, Fedora IoT Edition, плюс Live-сборки KDE Plasma 5, Xfce, MATE, Cinnamon, LXDE и LXQt, которые предназначены для архитектур x86_64, Power64, ARM64 (AArch64) и различных устройств с 32-разрядными процессорами ARM. Что появилось нового или изменилось в Fedora — под катом.
Читать дальше →

Information

Rating
Does not participate
Location
Томская обл., Россия
Registered
Activity