Pull to refresh
0
0
Send message

Очень простой чат-бот для Telegram для самых маленьких

Reading time3 min
Views36K


Есть 100500 способов и инструментов создать простого serverless чат-бота для телеграм. А наш все-равно будет проще, хотя бы по числу кликов в интерфейсе. Сам бот будет написан на Python, а выполнятся будет на serverless движке Swifty.
Читать дальше →
Total votes 30: ↑24 and ↓6+18
Comments12

Как мы две недели охотились на баг NFS в ядре Linux

Reading time11 min
Views17K

Подробное описание поисков бага из задачи GitLab, которые привели к патчу для ядра Linux


14 сентября служба поддержки GitLab сообщила о критической проблеме, которая возникла у одного из наших клиентов: сначала GitLab работает нормально, а потом у пользователей возникает ошибка. Они пытались клонировать некоторые репозитории через Git, и вдруг появлялось непонятное сообщение об устаревшем файле: Stale file error. Ошибка сохранялась надолго и не давала работать, пока системный администратор вручную не запускал ls в самом каталоге.


Пришлось изучать внутренние механизмы Git и сетевой файловой системы NFS. В итоге мы нашли баг в клиенте Linux v4.0 NFS, Тронд Мюклебуст (Trond Myklebust) написал патч для ядра, и с 26 октября этот патч входит в основное ядро Linux.


В этом посте я расскажу, как мы изучали проблему, в каком направлении думали и какие инструменты использовали, чтобы отследить баг. Мы вдохновлялись отличной детективной работой Олега Дашевского, описанной в посте «Как я две недели охотился за утечкой памяти в Ruby».


Читать дальше →
Total votes 35: ↑35 and ↓0+35
Comments9

Металл-воздушный транзистор продлит действие закона Мура — как работает технология

Reading time4 min
Views23K
Австралийские специалисты представили металл-воздушный транзистор, принцип действия которого напоминает работу вакуумных транзисторов. Рассказываем, в чем суть технологии.

Читать дальше →
Total votes 27: ↑23 and ↓4+19
Comments38

Зависимые типы — будущее языков программирования

Reading time7 min
Views27K
Всем привет!

Несмотря на диковинность и некоторую отвлеченность рассматриваемой сегодня темы — надеемся, что она сможет разнообразить вам выходные. В конце поста помещаем три ссылки от автора, позволяющие познакомиться с зависимой типизацией в Idris, F* и JavaScript
Читать дальше →
Total votes 40: ↑35 and ↓5+30
Comments107

Много бесплатных книг по программированию

Reading time7 min
Views345K
Читать дальше →
Total votes 202: ↑192 and ↓10+182
Comments42

Как рендерится кадр Middle Earth: Shadow of Mordor

Reading time15 min
Views11K

Middle Earth: Shadow of Mordor была выпущена в 2014 году. Сама игра стала большим сюрпризом, и то, что она была спин-оффом сюжетной линии вселенной «Властелина кольца» оказалось довольно неожиданным. Игра обрела большой успех, и на момент написания статьи компания Monolith уже выпустила сиквел — Shadow of War. Графика игры очень красива, особенно учитывая то, что она была выпущена для разных поколений консолей, в том числе Xbox 360 и PS3. Версия для PC довольно хорошо отполирована, содержит дополнительные графические опции и пакеты текстур высокого разрешения, полностью раскрывающие потенциал игры.

В игре используется относительно новый отложенный рендерер DX11. Я воспользовался Renderdoc, чтобы глубоко изучить приёмы рендеринга игры. При работе использовались максимально возможные параметры графики (ultra) и были включены все возможные «примочки», такие как независимая от порядка прозрачность, тесселяция, окклюзия в экранном пространстве и различные motion blur.
Читать дальше →
Total votes 40: ↑40 and ↓0+40
Comments4

Триумф и трагедия «Бурана»

Reading time10 min
Views88K


Ровно 30 лет назад с космодрома Байконур на ракете-носителе «Энергия» в свой единственный полёт отправился корабль «Буран». В полностью автоматическом режиме он совершил 2 витка вокруг Земли и успешно приземлился спустя 205 минут. Это стало несомненным триумфом советской космонавтики, впервые в мире сумевшей посадить многоразовый космоплан в автоматическом режиме на землю.

Но спустя всего год работы по проекту были приостановлены, а в 1993 году — и вовсе прекращены. В 2002 году единственный летавший в космос «Буран» был навсегда погребён под обломками цеха в котором хранился. Об предпосылках к появлению проекта «Энергия-Буран», его ходе и печальном завершении, пойдёт сегодня речь.
Total votes 143: ↑142 and ↓1+141
Comments433

C++: сеанс спонтанной археологии и почему не стоит использовать вариативные функции в стиле C

Reading time18 min
Views22K
Началось все, как водится, с ошибки. Я первый раз работал с Java Native Interface и делал в C++ части обертку над функцией, создающей Java объект. Эта функция — CallVoidMethod — вариативна, т.е. помимо указателя на среду JNI, указателя на тип создаваемого объекта и идентификатора вызываемого метода (в данном случае конструктора), она принимает произвольное число других аргументов. Что логично, т.к. эти другие аргументы передаются вызываемому методу на стороне Java, а методы могут быть разные, с разным числом аргументов любых типов.

Соответственно и свою обертку я тоже сделал вариативной. Для передачи произвольного числа аргументов в CallVoidMethod использовал va_list, потому что по-другому в данном случае никак. Да, так и отправил va_list в CallVoidMethod. И уронил JVM банальным segmentation fault.

За 2 часа я успел перепробовать несколько версий JVM, от 8-ой до 11-ой, потому что: во-первых это мой первый опыт с JVM, и в этом вопросе я StackOverflow доверял больше, чем себе, а во-вторых кто-то на StackOverflow посоветовал в таком случае использовать не OpenJDK, а OracleJDK, и не 8, а 10. И лишь потом я наконец заметил, что помимо вариативной CallVoidMethod есть CallVoidMethodV, которая произвольное число аргументов принимает через va_list.

Что мне больше всего не понравилось в этой истории, так это то, что я не сразу заметил разницу между эллипсисом (многоточием) и va_list. А заметив, не смог объяснить себе, в чем принципиальное отличие. Значит, надо разобраться и с эллипсисом, и с va_list, и (поскольку речь все-таки о C++) с вариативными шаблонами.
Читать дальше →
Total votes 28: ↑27 and ↓1+26
Comments11

Фулстеки — это вечные мидлы. Не идите по этому пути, если не хотите страдать

Reading time4 min
Views135K


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

Читать дальше →
Total votes 249: ↑205 and ↓44+161
Comments733

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

Reading time4 min
Views9.9K

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

Читать дальше →
Total votes 25: ↑21 and ↓4+17
Comments30

Загрузка ядра Linux. Часть 1

Reading time12 min
Views61K
От загрузчика к ядру

Если вы читали предыдущие статьи, то знаете о моём новом увлечении низкоуровневым программированием. Я написал несколько статей о программировании на ассемблере для x86_64 Linux и в то же время начал погружаться в исходный код ядра Linux.

Мне очень интересно разобраться, как работают низкоуровневые штуки: как программы запускаются на моём компьютере, как они расположены в памяти, как ядро управляет процессами и памятью, как работает сетевой стек на низком уровне и многое другое. Итак, я решил написать еще одну серию статей о ядре Linux для архитектуры x86_64.

Обратите внимание, что я не профессиональный разработчик ядра и не пишу код ядра на работе. Это всего лишь хобби. Мне просто нравятся низкоуровневые вещи и интересно в них копаться. Поэтому если заметите какую-то путаницу или появилятся вопросы/замечания, свяжитесь со мной в твиттере, по почте или просто создайте тикет. Буду благодарен.
Читать дальше →
Total votes 69: ↑67 and ↓2+65
Comments40

Как Lisp стал языком программирования для Бога

Reading time12 min
Views78K
Когда программисты обсуждают преимущества тех или других языков программирования, они часто рассуждают о них в прозаических терминах, как об инструментах в наборе различных приспособлений – один больше подходит для системного программирования, другой – для склеивания других программ в целях решения текущей задачи. Так и должно быть. У языков разные сильные стороны, и заявлять, что один язык лучше других языков, не указывая конкретных примеров, — значит, лишь вызывать непродуктивные и резкие споры.

Однако есть один язык, который странным образом вызывает всеобщее уважение: Lisp. Крестоносцы клавиатур, готовые атаковать любого, кто посмеет заявить, что какой-либо язык лучше других, сходятся в том, что Лисп находится на другом уровне. Он выходит за пределы утилитарных критериев, по которым судят другие языки, поскольку средний программист никогда не использовал Лисп для создания чего-либо практического, и, вероятно, никогда не будет этого делать, однако же, уважение к Лиспу настолько глубокое, что ему часто приписывают мифические свойства. Всеми любимые комиксы xkcd изображали таким образом Лисп как минимум дважды: в одном комиксе персонаж достигает Лисп-просветления, которое помогает ему познать фундаментальную структуру Вселенной. В другом старый программист в халате передаёт стопку круглых скобок своему падавану, объясняя, что это – «элегантное оружие для более цивилизованных времён», намекая на присущие Лиспу оккультные возможности Силы.
Читать дальше →
Total votes 52: ↑46 and ↓6+40
Comments58

Python: как уменьшить расход памяти вдвое, добавив всего одну строчку кода?

Reading time5 min
Views71K
Привет habr.

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


Как это работает, продолжение под катом.
Читать дальше →
Total votes 117: ↑107 and ↓10+97
Comments58

Чем заняться процессору, когда нечего делать?

Reading time5 min
Views19K
Разумно было бы предполагать, что для ядра довольно легко будет ничего не делать – но это не так. На конференции Kernel Recipes 2018 Рафаэль Высоцкий рассказал о том, чем занимаются процессоры, когда им нечего делать, как это обрабатывает ядро, какие у текущей стратегии есть проблемы, и как его недавняя работа над циклом бездействия улучшила ситуацию с энергопотреблением систем, которые ничего не делают.

Цикл бездействия, одна из подсистем ядра, которую поддерживает Высоцкий, управляет тем, что делает CPU, когда ему не нужно исполнять никаких процессов. Высоцкий очень точно дал все определения: CPU – это такая сущность, которая может принимать инструкции из памяти и выполнять их одновременно с другими сущностями в той же системе, занимающимися тем же самым. На простейшей однопроцессорной системе с одним ядром этим ядром является CPU. Если у процессора несколько ядер, то каждое из этих ядер – CPU. Если у каждого из ядер есть несколько интерфейсов для одновременного исполнения инструкций – Intel называет такую систему "гиперпоточностью" – тогда каждый из этих потоков будет CPU.
Читать дальше →
Total votes 32: ↑29 and ↓3+26
Comments8

Проблема Windows не в частоте обновлений, а в процессе разработки

Reading time15 min
Views63K
Глючные обновления указывают на более глубокую проблему


Windows 10 на презентации в Токио, июль 2015 года

Очевидно, обновление Windows от 10 октября 2018 года было не самым удачным. Быстро появились сообщения о потере файлов на компьютерах, а Microsoft приостановила распространение обновления. С тех пор баг исправили, сейчас идёт тестирование нового апдейта перед его повторным выпуском.

Это не первое обновление Windows, в котором возникли проблемы — в предыдущих апдейтах мы видели такие вещи, как значительные аппаратные несовместимости — но оно явно стало худшим. Большинство из нас знает о резервном копировании, но в реальности многие данные, особенно на домашних компьютерах, не имеют бэкапа, и их исчезновение весьма неприятно.
Читать дальше →
Total votes 77: ↑69 and ↓8+61
Comments423

Посмотри на тень

Reading time2 min
Views3.5K


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

Хочу сделать небольшой обзор на эту тему. Думаю что будет познавательно и интересно.
Читать дальше →
Total votes 7: ↑5 and ↓2+3
Comments15

Практика использования модели акторов в бэкэнд-платформе игры Quake Champions

Reading time9 min
Views12K
Продолжаю выкладывать доклады с Pixonic DevGAMM Talks — нашего сентябрьского митапа для разработчиков высоконагруженных систем. Много делились опытом и кейсами, и сегодня публикую расшифровку выступления backend-разработчика из Saber Interactive Романа Рогозина. Он рассказывал про практику применения акторной модели на примере управления игроками и их состояниями (другие доклады можно посмотреть в в конце статьи, список дополняется).

Total votes 27: ↑27 and ↓0+27
Comments11

Простейшая игра на Arduino с дисплеем 1602 — Часть #2

Reading time17 min
Views11K

ЧАСТЬ #2 от начала до конца


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

Что бы понять, что нам сейчас нужно писать, мы должны составить план, что же мы будем иметь и в каком виде. У нас есть главный герой, у него два кадра анимации и это мы уже в прошлом уроке уже разобрали. Делать ему изменение спрайта прыжка я не стал, не потому что мне лень, просто не вижу пока что в этом смысла. Далее у нас должно быть обозначение жизни, делать просто сердечки в ряд не интересно, и цифры тоже банально, давайте сделаем три очка жизни и обозначим их, например уровнем заряда батарейки. И для радости глаза сердечко, которое будет биться возле этой батарейки. Количество очков за раунд, установим слева экрана, чисто в цифровом виде и враг у нас будет злой кактус, для начала пойдет.

С объектами мы определились и давайте их отрисуем, сразу все спрайты и запишем их.




Читать дальше →
Total votes 24: ↑22 and ↓2+20
Comments9

10 самых распространенных ошибок безопасности в Python и как их избежать

Reading time8 min
Views19K
Всем привет!

Наша очередная группа по Python успешно запустилась в понедельник, но у нас остался ещё один материальчик, который мы не успели разместить до старта. Исправляем нашу оплошность и надеемся, что он вам понравится.

Поехали!

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

Total votes 33: ↑31 and ↓2+29
Comments6

Почему компилятор превратил мой цикл с условием в бесконечный?

Reading time4 min
Views21K
Один из пользователей компилятора Visual C++ привёл следующий пример кода и спросил, почему его цикл с условием выполняется бесконечно, хотя в какой-то момент условие должно перестать выполняться и цикл должен закончиться:

#include <windows.h>

int x = 0, y = 1;
int* ptr;

DWORD CALLBACK ThreadProc(void*)
{
  Sleep(1000);
  ptr = &y;
  return 0;
}

int main(int, char**)
{
 ptr = &x; // starts out pointing to x

 DWORD id;
 HANDLE hThread = CreateThread(nullptr, 0, ThreadProc, 0, &id);

 // Ждём, пока другой поток изменит значение по указателю ptr
 // на некоторое ненулевое число
 while (*ptr == 0) { }

 return 0;
}
Читать дальше →
Total votes 37: ↑33 and ↓4+29
Comments51
1
23 ...

Information

Rating
Does not participate
Registered
Activity