Search
Write a publication
Pull to refresh
48
0
Alice V @oisee

Ms Dev

Send message

Заметки о Unix: системный вызов write(), на самом деле, не такой уж и атомарный

Reading time6 min
Views8.6K


Недавно я читал материал Эвана Джонса «Устойчивое хранение данных и файловые API Linux». Я полагаю, что автор этой довольно хорошей статьи ошибается, говоря о том, чего можно ожидать от команды write() (и в том виде, в каком она описана в стандарте POSIX, и на практике). Начну с цитаты из статьи:

Системный вызов write() определён в стандарте IEEE POSIX как попытка записи данных в файловый дескриптор. После успешного завершения работы write() операции чтения данных должны возвращать именно те байты, которые были до этого записаны, делая это даже в том случае, если к данным обращаются из других процессов или потоков (вот соответствующий раздел стандарта POSIX). Здесь, в разделе, посвящённом взаимодействию потоков с обычными файловыми операциями, имеется примечание, в котором говорится, что если каждый из двух потоков вызывает эти функции, то каждый вызов должен видеть либо все обозначенные последствия, к которым приводит выполнение другого вызова, либо не видеть вообще никаких последствий. Это позволяет сделать вывод о том, что все файловые операции ввода/вывода должны удерживать блокировку ресурса, с которым работают.

Означает ли это, что операция write() является атомарной? С технической точки зрения — да. Операции чтения данных должны возвращать либо всё, либо ничего из того, что было записано с помощью write(). […].
Читать дальше →

Метапрограммирование в реальной задаче

Reading time4 min
Views6.6K

Всем привет! В этой статье хочу рассказать про метапрограммирование на примере реальной часто встречающейся проблемы.

Когда кто то говорит про метапрограммирование у олдскульного кодировщика случается приступ ярости)

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

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

Читать далее

Мунк в эквидистантной развертке и Мейерхольд, разрушивший Красную площадь — Денис Семенов о VR-искусстве

Reading time11 min
Views5K


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

На самом деле это площадка даже для современного искусства.

Художник Денис Семенов работает с виртуальной реальностью уже пять лет и иногда проводит в ней по 8 часов несколько дней подряд, перенося в VR картины Мунка, Петрова-Водкина и других художников. Его работы участвуют в фестивалях в Каннах, Висбадене, Берлине, Стокгольме и Нью-Йорке.

В рамках подготовки к фестивалю современного искусства ARTLIFE FEST Денис рассказал мне, как создаются VR-экспириенсы без мыши, клавиатуры и 3D-редакторов, как связаны технологии и искусство и что общего между художниками и стартаперами.

Миф: Velocity – это производительность

Reading time4 min
Views16K

День ото дня мы приближаемся к Agile-трансформации. Одна из самых важных целей для нас – увеличить velocity команд на X %. Слышали об этом? Слова Марка Андрессена о том, что «программное обеспечение пожирает мир», становятся отличительной чертой отраслей, которые раньше были менее автоматизированными.

Компания, занимающаяся разработкой Agile-продуктов, опросила более 18 000 клиентов и специалистов по разработке программного обеспечения.

Что же такое velocity?

Электроника МС 1504 — первый советский ноутбук

Reading time8 min
Views46K

"Электроника МС 1504" - первый серийно производившийся советский ноутбук. Внутризаводское обозначение модели - "Электроника ПК 300". 

В этой статье мы заглянем в него внутрь, причём в разные его модификации, а также сравним с его прототипом - Тошибой T1100 Plus.

Читать далее

Raspberry Pi Pico на МК RP2040: начало и первые шаги. Что есть поесть за $4

Reading time8 min
Views130K

Начало


Raspberry Pi Foundation всегда знает чем порадовать или удивить нас, а так же как подталкивать других производителей на интересные шаги и решения для хорошей конкуренции.
В четверг (рыбный день, кстати) 21-ого января 2021 года был анонсирован выпуск нового микроконтроллера RP2040 и небольшой платы с его применением, которая получила название Raspberry Pi Pico.



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

После пары дней занимательной возни я решил поделиться своим небольшим опытом с Хабром и его гостями.

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

Как я изучал структуры данных и алгоритмы для собеседования в FAANG

Reading time12 min
Views68K
Продолжая тему устройства в FAANG, которую уже мы поднимали в нашем блоге, и специально к старту нового потока нашего курса по алгоритмам сегодня делюсь описанием пути Эско Обонга, старшего инженера-программиста Uber.

Эта история началась в 2015 году, когда стартап, к которому я присоединился как «сотрудник-основатель», закрылся через шесть месяцев после первого раунда инвестиций, и я искал новую работу. Первое моё собеседование было с  Codecademy, где на этапе телефонного разговора меня заверили: «Не волнуйтесь, мы не задаём сумасшедших вопросов об алгоритмах или что-то в этом роде». И я им поверил…


Приятного чтения!

Углублённое руководство по JavaScript: генераторы. Часть 1, основы

Reading time10 min
Views27K

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

Я не исхожу из того, что вы хоть что-то знаете о генераторах. Но вам требуется хорошо разбираться в итераторах и итерируемых объектах в JavaScript. Если вы с ними не знакомы или «плаваете в теме», то сначала углублённо изучите их. Если же вы владеете этими знаниями, то можно погружаться в мир генераторов. Это очень странный мир, в котором многое совершенно не похоже на то, что вы используете в обычном JS-коде. При этом сам механизм очень прост, и даже после прочтения этой статьи вы сможете уверенно использовать генераторы. Приступим!
Читать дальше →

Результат интеграции Pine A64 и TRS-80 Model 100

Reading time2 min
Views4.2K


В этой статье подводятся итоги установки компонентов одноплатного компьютера Pine A64 LTS SBC в корпус старинного компьютера TRS-80 Model 100. При этом подключается дополнительный дисплей, задействуется аппаратная клавиатура, и в целом в старое устройство вдохнули новую жизнь. Этому проекту было посвящено несколько статей, так что в случае интереса к материалу вашему вниманию будет предоставлен и их перевод. (прим.)
Читать дальше →

«От экрана к звуку»: аудиосоцсети рвутся к глобальной аудитории, но пока получается так себе

Reading time3 min
Views3.8K

Ранее мы обсудили экспериментальные релизы на стриминговых площадках и заметили, что лейблы не совсем уверены, какие форматы будут востребованы всего через пару лет.

У музыкальных платформ тоже нет ответа — они живут в «эпохе застоя» с момента выхода айфона и не предлагают инновационных механик и интерфейсов для работы со звуком.

В индустрии складывается ощущение неопределенности, а параллельно — формируется спрос на новые сервисы с альтернативными способами самовыражения и общения с помощью аудио.

Читать далее

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

Reading time7 min
Views6.3K

Сразу оговоримся, что в этой публикации мы не будем затрагивать вопросы подходов к созданию полномасштабных приложений для Web, подразумевающих наличие крупной кодовой базы, заставляющей функционировать её серверную часть. Как-то исторически сложилось так, что клиентская часть подобных приложений, как правило, реализуется на JavaScript и производных от него языках и фреймворках, а серверная – уж на чём придётся... В конце концов, не столь уж это и важно – главное, чтобы соответствующая программная среда была поднята на сервере и реализованный в ней код спокойно выполнял свою задачу.

Вместе с тем со временем всё чаще стала возникать потребность в написании монолитных – как правило, простых и непритязательных веб-приложений, не требующих для работы серверной части. Естественно, с широким распространением HTML5 подобные приложения начали обретать весьма богатый функционал, однако... Однако же не все разработчики были готовы смириться с существующим положением вещей, когда все доступные им решения, по сути, имели своим краеугольным камнем всё тот же пресловутый JavaScript.

В конце концов, многие, что называется, “с младых ногтей” привыкли к другому подходу к проектированию и созданию приложений широкого профиля. Это, в первую очередь, различные RAD-среды, среди которых в нашей стране наибольшей популярностью (по крайней мере, в академической среде), всегда пользовалась Delphi. Натянул пару кнопок на форму, прописал нужные обработчики событий на привычном языке Pascal – красота!.. Чего ещё можно желать, в особенности если вы сосредоточены на реализации каких-то нужных вам алгоритмов, а интерфейс для вас не играет такой уж принципиальной роли?

При традиционном дизайне и проектировании веб-приложений всё совсем не так. Тут тебе бы неплохо помнить и все основные детали описаний различных тэгов HTML-разметки и атрибутов CSS-стили, и уметь сверстать всё это дело воедино, да ещё и “оживить” интерактивными сценариями, реализованными на JavaScript. Очевидно, что такой подход, ориентированный в первую очередь на дизайн, а не на саму разработку как таковую, вряд ли устроит нашего традиционного разработчика, воспитанного на классических алгоритмах и структурах данных, с возможным вкраплением зачатков объектно-ориентированного подхода. (Напоминаем, что речь идёт в первую очередь о разработчиках небольших приложений, где теоретически мог бы управиться и один человек.)

Читать далее

Let's Encrypt перевел серверы БД на AMD EPYC

Reading time4 min
Views21K

Внутреннее устройство 2U-сервера Dell PowerEdge R7525. Два серебристых прямоугольника посередине — процессоры AMD EPYC 7542. Сверху и снизу от них планки оперативной памяти по 64 ГБ каждая. На левом краю фотографии — 24 диска NVMe, такое возможно только на EPYC

Let's Encrypt — крупнейший удостоверяющий центр в интернете, на его бесплатных TLS-сертификатах работает более 235 млн сайтов. В сердце УЦ находится база данных, на основе которой происходит управление сертификатами. Важно, чтобы её производительность была на уровне, иначе мы увидим ошибки API и таймауты при выдаче сертификатов.

В конце 2020 года некоммерческая организация сделала апгрейд своих серверов.
Читать дальше →

Хидео Кодзима. Одинокий человек, избранный Богом

Reading time5 min
Views7.6K
imageПривет, Хаброжители! Мы сдали в типографию очередную новинку "Хидео Кодзима. Гены гения". «Я на 70 процентов состою из фильмов» — так говорит про себя Хидео Кодзима, чье имя в индустрии игр знает каждый. Так что же подтолкнуло знаменитого разработчика на создание произведений, каждое из которых вызывает больше вопросов и обсуждений, чем дает ответов? «Гены гения» — это сборник эссе Кодзимы, посвященных мемам — единицам культурной информации, которые формируют личность точно так же, как биологические гены. Эти эссе проливают свет на все книги и фильмы, которые сформировали Хидео Кодзиму как личность и дали ему творческую энергию для создания шедевров геймдизайна. Единственная книга Кодзимы о Кодзиме теперь доступна на русском!

Вашему вниманию представлен отрывок одной главы из книги «Одинокий человек, избранный Богом».
Читать дальше →

Инженер купил 220 нерабочих плат Raspberry Pi Model B и начал их ремонтировать

Reading time4 min
Views124K


Инженер и блогер Джеймс Доусон специализируется на обзорах одноплатных компьютеров, но сейчас он начал необычный марафон, а заодно решил подзаработать. Инженер купил на eBay партию примерно из 220 нерабочих компьютеров Raspberry Pi Model B за 61 фунт, то есть практически на вес.

Задача такая: диагностировать платы, найти неисправности, починить — и продать. Платы простые, починить вроде бы легко.
Читать дальше →

17 ошибок, которые испортят любое резюме

Reading time10 min
Views12K

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

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

Читать далее

Библиотека Frontend-разработчика, часть 4: Алгоритмы

Reading time4 min
Views15K

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

Как и любой разработчик - True Frontend'eр должен расти в своей сфере, и конечно же, уходить от простой разработки интерфейсов к чему-то более сложному.
На фоне недавно нашумевшего сериала, можно выписать такой тезис - разработка, как игра в шахматы - неинтересно играть с тем, кто ниже рангом также, как и неинтересно всю жизнь делать одно и тоже одной сложности.
Всегда хочется лезть в дебри, повышать свой уровень. И там где дебри, начинается математика, структуры данных, алгоритмы. Хотите оптимизировать загрузку - это вам к алгоритмам. Хотите увеличить скорость отображения элементов на странице - необходимо обратиться к математике и алгоритмам. Возможно сортировка пузырьком элементов была лишней...

Отдельное слово хочу сказать о структурах данных - несмотря на то, что в js полный беспорядок в плане типов - всегда есть ts, где структуры данных - это основа основ. Для этого ts и был сделан. Контролировать беспорядок.

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

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

Это статья о том, что алгоритмы разработчику нужны. Это статья о том, что по алгоритмам есть интересные и нескучные книжки, которые помогут быстро понять основы и прокачать свои hard-skills.

Ну, удиви

Экстракоды при синтезе программ

Reading time12 min
Views2.2K

Впервые термин «экстракод» я услышал еще применительно к командам БЭСМ-6. Сейчас это слово практически не используется, наиболее близкое понятие - «системный вызов». Из-за особенностей системы команд БЭСМ-6, те экстракоды действительно больше напоминали дополнительные встроенные инструкции, чем, например, вызов функции в MS-DOS с помощью INT 21H.

Смысл термина «экстракод» вполне прозрачен: это расширение системы команд для того, чтобы создать из реальной машины виртуальную машину для заданного языка, например, Паскаль-машину или Лисп-машину. А транслятор после этапа анализа исходного текста программы должен провести синтез программы – т.е. перевести результаты анализа в команды этой виртуальной машины.

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

Читать далее

Raspberry Pi Pico за $4 — на что способна новая плата от разработчиков “малинок”

Reading time4 min
Views111K

Пару дней назад Raspberry Foundation представила новую плату — Raspberry Pi Pico на собственном кремнии всего за 4 доллара США. Плата, конечно, менее функциональна, чем старшие модели линейки, но и она может предложить большое количество возможностей для разработчиков.

Эту плату уже успели протестировать, оценив ее функции, достоинства и недостатки. Обо всем этом — под катом.
Читать дальше →

2048 WASM или игра на Rust за 2 дня

Reading time5 min
Views7.6K

Данная статья представляет из-себя эксперимент с Rust'ом с последующей его компиляцией в WASM. Было интересно пощупать данные технологии на чем-то сложнее, чем вычисление факториала, поэтому выбор пал на всем известную игру 2048.



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

Как изменился Datalore за 2020 год: мощная онлайн-среда для Jupyter-ноутбуков

Reading time3 min
Views6.4K

Привет, Хабр!


Datalore — это мощная онлайн-среда для Jupyter-ноутбуков, разработанная в JetBrains. Здесь мы собрали описание самых важных обновлений Datalore за прошедший год.

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

Information

Rating
Does not participate
Location
Dublin, Dublin, Ирландия
Registered
Activity