Pull to refresh

Удивительная страна Oz, или как принять данные при помощи send

Reading time15 min
Views1.9K
Довольно давно, собирая информацию по средствам параллельного программирования, наткнулся я на элегантный (другими словами сложно описать ощущения) язык Oz http://www.mozart-oz.org. Язык тогда показался мне достойным того, чтобы представить его Habraсообществу. И вот, у меня появилось время и причины это сделать.

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

send(socket; buffer; flag) = (if (flag == RECV) (recv(socket; buffer)) or (realsend(socket; buffer))).

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

Итак...
Total votes 40: ↑38 and ↓2+36
Comments14

В 2007 г. грядет «мобилизация» социальных сетей

Reading time2 min
Views455
Социальные сети, IM-пейджеры, картографические службы и многие другие современные веб-сервисы идеально подходят для карманных компьютеров. Но, в силу определенных причин, Веб 2.0 никак не удается адаптировать к мобильникам. Причиной тому — и недостаточная пропускная способность каналов связи, и дороговизна трафика, и другие причины. Но сама идея ухода от десктопов к мобильным беспроводным устройствам давно владеет умами разработчиков.
Читать дальше →
Total votes 9: ↑9 and ↓0+9
Comments10

Миром всё ещё управляет язык С

Reading time8 min
Views34K
Многие из проектов на языке С, существующих сегодня, начинали разрабатываться ещё десятилетия назад. Операционная система UNIX стартовала 1969 году (и писалась на ассемблере), но уже в 1972 была переписана на С. Точнее, это язык С был создан для того, чтобы появилось что-то, на что было бы удобно переписать с ассемблера ядро UNIX и получить чуть более высокоуровневый код, менее зависимый от архитектуры и позволяющий выполнять больше полезной работы на каждую строчку написанного кода.

Разработка базы данных Oracle началась в 1977 году (тоже на ассемблере) и тоже была переписана на С в 1983 году. К тому времени это был уже один из самых популярных языков в мире.

В 1985 году вышла Windows 1.0. Хотя код операционной системы Windows не является открытым, общеизвестно, что ядро в основном написано на С с небольшими вставками ассемблера. Разработка Linux началась в 1991 году и началась сразу на С. В следующем году она была опубликована под лицензией GPL и использована как часть GNU Operating System, которая и сама начиналась как проект на С и Lisp, так что многие компоненты были написаны на С.

Но проекты на С — это не только то, что стартовало десятилетия назад, когда выбор языков, скажем прямо, был достаточно ограничен. Много С-кода пишется и сейчас, на нём начинаются и новые проекты. Для этого есть причины.

Как именно язык С управляет миром?

Читать дальше →
Total votes 91: ↑75 and ↓16+59
Comments143

Вы не Google

Reading time7 min
Views52K


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

Читать дальше →
Total votes 123: ↑109 and ↓14+95
Comments56

Переусложнение может погубить ваш продукт

Reading time7 min
Views3.5K
Эта статья предназначается не только для менеджеров продуктов. Основатели компаний, инвесторы и люди других профессий, которые в достаточной степени заинтересованы в каком-либо цифровом продукте, тоже смогут извлечь из нее пользу. Я так считаю, потому что проблема, которая будет обсуждаться – пересуложнение – одна из наиболее распространенных в разработке. По моему мнению, перусложнение чаще убивает продукты, чем плохие практики программирования.

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

Так что мои рассуждения о переусложнении – это не взгляд со стороны. Я и сам в этом отношении не без греха, и от чужих ошибок тоже доводилось страдать. Поэтому я хорошо понимаю, что это такое, во что обходится командам и как этого избежать.
Читать дальше →
Total votes 11: ↑10 and ↓1+11
Comments3

Hudi, Iceberg и Delta Lake: сравнение табличных форматов для озера данных

Reading time7 min
Views8.8K

Lake Berryessa by chateaugrief

Выбор формата хранения данных при создании Data Lake влияет на производительность озера, удобство его использования и совместимость с другими инструментами. 

Команда разработки Cloud Big Data от VK Cloud Solution перевела статью — сравнение трех форматов данных: Apache Hudi, Apache Iceberg и Delta Lake. Посмотрим, какие в них применяются подходы к производительности обновлений, параллелизму и совместимости, и разберем, какой формат больше подойдет под ваши задачи.
Читать дальше →
Total votes 16: ↑16 and ↓0+16
Comments0

Психологическая составляющая скорости взаимодействия в мобильных интерфейсах

Reading time4 min
Views10K
Одной из самых важных составляющих в разработке мобильных интерфейсов является отклик интерфейса на действие пользователя. Пользователи мобильных интерфейсов как правило не очень терпеливы, когда используют ваше приложение. И если им приходится ждать слишком долго, пока загрузится контент, они начинают смотреть по сторонам и вряд ли продолжат работу с приложением.

Так как сделать ваше приложение более быстрым? Вот несколько интересных техник, понимая которые вы сможете сделать ваше приложение более быстрым.

Читать дальше →
Total votes 38: ↑36 and ↓2+34
Comments12

Миром движет язык С

Reading time10 min
Views57K


Недавно мы опубликовали перевод статьи, в которой приводились аргументы в пользу изучения языков семейства С. Этот пост вызвал немало споров, в том числе была высказана точка зрения, что языки семейства С сходят со сцены; их востребованность хоть и велика, но снижается. Возможно, это и так. Но всё же язык С по-прежнему остаётся одним из наиболее распространённых.
Читать дальше →
Total votes 103: ↑86 and ↓17+69
Comments69

Сколько дыр в кафтане Adobe? (CVE-2010-2883)

Reading time2 min
Views11K
По числу эксплуатируемых уязвимостей программа Adobe Acrobat Reader является одной из самых «дырявых» и, в тоже время, наиболее популярной у злоумышленников. Атаки с использованием уязвимостей в приложениях Adobe для проведения client-side атак уже давно стали трендом. В прошлый раз о громкой 0-day уязвимости мы писали летом. Недавно у злоумышленников появился новый повод для творчества.
Читать дальше →
Total votes 60: ↑58 and ↓2+56
Comments16

Наша методика расчета стека печатных плат

Reading time7 min
Views27K
Пока мы заканчиваем последние приготовления к серийному выпуску сервера VESNIN, хочу провести образовательный эксперимент — опишу наши внутренние методики и рекомендации для расчёта стека печатных плат. С одной стороны, приятно, если наш опыт будет кому-то полезен. С другой, мы сами рады получить дельные комментарии, чтобы улучшить нашу практику. Если интересно прочитать и обсудить — добро пожаловать под кат.


Погрузиться в детали
Total votes 31: ↑31 and ↓0+31
Comments23

Собираем и запускаем Linux-0.01 в Minix 1.5, (почти) как это делал Линус Торвальдс

Level of difficultyHard
Reading time28 min
Views11K

Я люблю старые программы, мне нравится их изучать и смотреть, как они развивались и во что сейчас превратились, или умерли, так и не дожив до сегодняшнего дня. Ещё мне нравится смотреть разные YouTube-каналы, посвящённые ретро-тематике, на которых рассказывают об истории программ, игр, игровых приставок или старых компьютеров. Хочу сказать всем этим людям «спасибо» за то, что сохраняете частичку истории технологий. И, вдохновившись их трудами, мне захотелось попробовать самому прикоснутся к истории, собрав и запустив что-то относительно старое, но до сих пор живущее и развивающееся. Мой выбор пал на первую версию Linux, а именно версию 0.01.

Те, кто знаком с ранними днями создания Linux, знают, что Линус Торвальдс писал её для компьютеров на основе 386-х процессоров в пропатченной версия Minix 1.5.10. И не смотря на то, что linux-0.01 собирали не раз, в том числе и на современных версиях компилятора, мне хотелось побыть хоть немного в шкуре самого Линуса и самому собрать ядро в родной для этой ОС среде. А именно на максимально близком, хоть и виртуальном аппаратном обеспечении, в настоящей Minix 1.5.10 (точнее, Minix-386) с древней версией GCC 1.37.1

17 сентября ядру Linux исполнится 32 года. Это прекрасный повод вспомнить, как всё начиналось…

Читать далее
Total votes 51: ↑50 and ↓1+71
Comments20

Learn OpenGL. Урок 5.5 – Normal Mapping

Reading time19 min
Views39K
OGL3

Normal Mapping


Все сцены, которые мы используем состоят из многоугольников, в свою очередь состоящих из сотен, тысяч абсолютно плоских треугольников. Нам уже удалось немного повысить реализм сцен за счет дополнительных деталей, которые обеспечивает нанесение двухмерных текстур на эти плоские треугольники. Текстурирование помогает скрыть факт того, что все объекты в сцене – всего лишь набор множества мелких треугольников. Великолепная техника, но возможности её не безграничны: при приближении к любой поверхности все одно становится ясно, что она состоит из плоских поверхностей. Большая же часть реальных объектов не является абсолютно плоской и демонстрирует множество рельефных деталей.
Читать дальше →
Total votes 19: ↑19 and ↓0+19
Comments3

Обработка 40 ТБ кода из 10 млн проектов на выделенном сервере с Go за $100

Reading time52 min
Views12K
Написанной мной инструмент командной строки Sloc Cloc and Code (scc), который теперь доработан и поддерживается многими отличными людьми, подсчитывает строки кода, комментарии и оценивает сложность файлов внутри каталога. Здесь нужна хорошая выборка. Инструмент подсчитывает в коде операторы ветвления. Но что такое сложность? Например, заявление «У этого файла сложность 10» не очень полезно без контекста. Чтобы решить эту проблему, я запустил scc на всех исходниках в интернете. Это также позволит найти какие-то крайние случаи, которые я не рассматривал в самом инструменте. Мощное испытание методом грубой силы.

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

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

Голые цифры:

  • 9 985 051 репозиториев всего
  • 9 100 083 репозитория хотя бы с одним файлом
  • 884 968 пустых репозиториев (без файлов)
  • 3 500 000 000 файлов во всех репозиториях
  • Обработано 40 736 530 379 778 байт (40 ТБ)
  • Идентифицировано 1 086 723 618 560 строк
  • Распознано 816 822 273 469 строк с кодом
  • 124 382 152 510 пустых строк
  • 145 519 192 581 строк комментариев
  • Общая сложность по правилам scc: 71 884 867 919
  • 2 новые ошибки, найденные в scc
Читать дальше →
Total votes 29: ↑27 and ↓2+25
Comments14

Оптимизация длинной арифметики на C++

Reading time3 min
Views15K

С Новым годом! Опишу классический сюжет — оптимизацию длинной арифметики в C++ при помощи ассемблерных вставок. Однако, на Хабре его еще не было, поэтому после некоторых колебаний решил запостить сюда, вы уж простите, если сами когда-то писали то же самое и продвинулись дальше меня :-)

Читать дальше →
Total votes 82: ↑80 and ↓2+78
Comments22

25 компаний, производящих робототехнику для сельского хозяйства

Reading time11 min
Views34K
В этой статье мы расскажем о 25 компаниях (от конгломератов до стартапов), которые пытаются использовать робототехнику для решения проблем сельского хозяйства, а также о том, чем эти компании занимаются, какие их продукты будут доступны (или уже доступны) и сколько они будут стоить.

image

1. Компания: ISO Group, компания Flier Systems, Гамерен, Нидерланды.

Веб-сайт: isogroepmachinebouw.nl
Продукт: RoBoPlant – робот для высаживания цветов и полуавтономные роботы для пересаживания растений.
Область применения: вся территория ЕС.
Функция: полу- и полностью автоматическая техника для теплиц или овощеводства защищённого грунта. Роботизированная система для посадки цветов берет торфяные саженцы, разделяет их и садит по заранее выбранной схеме.
Читать дальше →
Total votes 16: ↑16 and ↓0+16
Comments12

Пишем эмулятор Кубика Рубика

Reading time20 min
Views77K
OpenGL — платформонезависимая спецификация, описывающая программный интерфейс для создания компьютерных приложений, использующих двухмерную и трехмерную графику.
В этой статье я опишу, как можно создать эмулятор Кубика Рубика на OpenGL.

Кубик будет в 3D и его можно будет вращать мышкой, а переворачивать грани можно, кликая мышкой по стрелкам. При том стрелки появляются у ближайшей к зрителю грани.


Читать дальше →
Total votes 81: ↑61 and ↓20+41
Comments30

Когда деревья были большими или о том, с чего все начинали

Reading time4 min
Views2K
Мне часто задают вопрос о том, с чего начать молодому frontend-разработчику? Дабы облегчить свою участь и не перечислять каждый раз множество ресурсов сети, печатных и зданий и общих тезисов, я и написал этот материал.

В первую очередь следует знать, что кроссбраузерная верстка сродни магии. Объясняется это все банальной вещью, которую я озвучу так: ”Все мы ненавидим Internet Explorer!” Таким образом, 90% всей магии сводится к тому, чтобы заставить правильно сверстанный макет корректно отображаться в браузере Internet Explorer всех актуальных версий.

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

Крепкая теоретическая база поможет вам избежать множества неприятностей в практическом изучении верстки гипертекстовых документов. Очень важно получать знания порциями в правильном порядке.
Читать дальше →
Total votes 53: ↑51 and ↓2+49
Comments109

Как определить самый авторитетный фильм всех времен и народов

Reading time31 min
Views5.8K

Какое произведение киноискусства оставило самый большой отпечаток в современной поп культуре? Предлагаю подумать над этим вопросом некоторое время. Может быть это Апокалипсис сегодня? Или Крестный отец? А вдруг главный фильм всех времен и народов это шедевр отечественного кинематографа - фильм Викинг?

К счастью, это можно посчитать.

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

Прячем 1С за огнеупорную стену

Reading time8 min
Views131K
image Многие системные администраторы, задумываясь о безопасности данных своей компании и, в частности, о безопасности базы данных 1С, пренебрегают простым, но эффективным решением – изолировать сервер от пользователей. В данной статье проанализированы угрозы безопасности, возникающие при размещении клиентской части 1С и серверов 1С в одном сегменте сети, и рассмотрен процесс перевода серверной части 1С в другой сегмент сети. Данная статья не содержит принципиально новых решений, но может служить справочным пособием, которое объединяет информацию из различных источников.
Читать дальше →
Total votes 17: ↑14 and ↓3+11
Comments30

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

Reading time6 min
Views84K
Начнём с объяснения, что же такое четырёхмерное пространство.


Это — одномерное пространство, то есть просто ось OX. Любая точка на ней характеризуется одной координатой.


Теперь проведём ось OY перпендикулярно оси OX. Вот и получилось двумерное пространство, то есть плоскость XOY. Любая точка на ней характеризуется двумя координатами — абсциссой и ординатой.


Проведём ось OZ перпендикулярно осям OX и OY. Получится трёхмерное пространство, в котором у любой точки есть абсцисса, ордината и аппликата.


Логично, что четвёртая ось, OQ, должна быть перпендикулярной осям OX, OY и OZ одновременно. Но мы не можем точно построить такую ось, и потому остаётся только попытаться представить её себе. У каждой точки в четырёхмерном пространстве есть четыре координаты: x, y, z и q.
Читать дальше →
Total votes 57: ↑48 and ↓9+39
Comments58
1
23 ...