Search
Write a publication
Pull to refresh
48
0
Send message

Почему нужно перестать использовать Git rebase

Reading time4 min
Views76K


После нескольких лет работы с Git я обнаружил, что постепенно стал переходить на всё более сложные Git-команды в рабочем процессе. Вскоре после того как я открыл для себя Git rebase, я тоже быстро внедрил эту команду в повседневные задачи. Те, кто знаком с этой процедурой, знают, насколько это мощный инструмент и какой это соблазн — постоянно им пользоваться. Но вскоре оказалось, что rebase влечёт за собой ряд неочевидных на первый взгляд трудностей. Но прежде чем обсудить их, хочу быстро рассмотреть различия между merge и rebase.

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

Thunderbird и Kontact вместо MS Outlook

Reading time7 min
Views48K

Когда вы работаете в крупной компании, где на рабочих станциях в основном стоит ОС Windows, а вы один из немногих пользователей Linux, то вы тратите определенную долю ваших усилий на преодоление сопротивления недружественной ИТ среды. С годами некоторые проблемы остаются в прошлом, но новые появляются. Так например почти исчезли как класс сайты заточенные только под IE. Все меньше страшных .docx, .xlsx файлов приходит по почте. Куда-то исчезли обязательные для всех чудо-юдо программы, которые написаны только для Windows. Теперь почти все можно открывать и редактировать из веб браузера. Изменилось многое, но не все.


Угадай картинку и получи бейсболку в подарок приз знатока почты. В 2000-м это был почтовик года по версии PC Magazine, и я сам пользовался им пару лет. Только по-честному, без поиска картинок.




Кстати о почте, что с ней? В тех организациях, где используется Exchange Server, постоянно приходят события на календарь и как-то неудобно оправдываться тем, что твой почтовик с не взаимодействует календарем, а Outlook-ом ты не пользуешься, так как его нет на Linux. Как правильно настроить почту, чтобы все работало на Exchange Server: почта, календарь, адресная книга, работа с папками? Статью об этом пишу я эту.

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

Дюжина приемов в Linux, которые действительно сэкономят уйму времени

Reading time9 min
Views138K


Эта статья также есть на английском.

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

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

Под катом — дюжина приемов в командной строке — из личного опыта.
Читать дальше →

Геометрия данных 4. Пространство графа

Reading time12 min
Views12K
Особенность координатных систем на точечном базисе (ди- и би-координат) состоит в том, что их можно использовать как в обычном геометрическом пространстве, так и в пространстве графа.



Что такое пространство графа


Мерность пространства и мерность базиса


Мерность пространства графа определяется количеством его связанных вершин (будем считать, что все вершины графа связаны — однокомпонентный граф). Базис пространства задается как подмножество вершин графа с известными дистанциями между ними (метрикой). Подмножество может включать в себя как все вершины графа, так и только часть (подграф). В последнем случае мерность базиса меньше, чем мерность общего пространства графа.
Читать дальше →

Пишем движок трёхмерного ретро-шутера с нуля

Reading time15 min
Views35K

Мне всегда нравились классические шутеры от первого лица 90-х. Я часами просиживал за моим 386-м, играя Doom, потрясённый тем, как кому-то удалось написать код, отрисовывающий на моём экране 3D-графику в реальном времени с отличным разрешением 320x200. Я немного знал программирование (только что начал изучать BASIC), поэтому осознавал, что глубоко внутри это всего лишь куча математики и байтов, записываемых в видеопамять. Но в то время даже массивы для меня были довольно сложным понятием, поэтому я не мог даже начать постигать всю сложность 3D-рендеринга.

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

Если только…

Представьте, что вы можете вернуться в машине времени назад в 90-е, когда ещё не было OpenGL и DirectX, не было видеопроцессоров. Всё что у вас есть — ЦП и экран, заполненный пикселями. Вам всё придётся писать самому.

Если эта идея кажется вам интересной, то вы не одиноки: это именно то, что можно сделать на такой выдуманной консоли, как TIC-80.
Читать дальше →

Весь веб на 60+ FPS: как новый рендерер в Firefox избавился от рывков и подтормаживаний

Reading time16 min
Views68K
До релиза Firefox Quantum остаётся всё меньше времени. Он принесёт множество улучшений в производительности, в том числе сверхбыстрый движок CSS, который мы позаимствовали у Servo.

Но есть ещё одна большая часть технологии Servo, которая пока не вошла в состав Firefox Quantum, но скоро войдёт. Это WebRender, часть проекта Quantum Render.



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

При разработке WebRender мы поставили задачу, чтобы все приложения работали на 60 кадрах в секунду (FPS) или лучше, независимо от размера дисплея или от размера анимации. И это сработало. Страницы, которые пыхтят на 15 FPS в Chrome или нынешнем Firefox, летают на 60 FPS при запуске WebRender.

Как WebRender делает это? Он фундаментальным образом меняет принцип работы движка рендеринга, делая его более похожим на движок 3D-игры.
Читать дальше →

Врачи должны назначать сон: чего вам может стоить недосыпание

Reading time12 min
Views48K
Ведущий нейробиолог Мэтью Уокер – о том, почему недосыпание увеличивает риск рака, инфаркта и болезни Альцгеймера, и что с этим можно сделать



Мэтью Уокер научился бояться вопроса «Чем занимаетесь?» На вечеринках он знаменует конец приятного вечера; после этого его новые знакомые начинают цепляться к нему, как плющ. В самолёте он обычно означает, что в то время, как все остальные смотрят фильмы или читают остросюжетные романы, он оказывается в центре многочасовой встречи интересующихся его работой пассажиров и работников авиакомпании. «Я уже начал врать, – говорит он. – Серьёзно. Я говорю людям, что дрессирую дельфинов. Так лучше для всех».

Уокер — сомнолог. Точнее, он директор Центра исследований человеческого сна в Калифорнийском университете в Беркли, исследовательского института, цель которого – возможно, недостижимая – понять весь спектр способов влияния сна на нас, с рождения до смерти, в болезни и в здравии. Неудивительно, что люди начинают с ним советоваться. Размытию границы между работой и отдыхом способствует ещё и то, что мало кто не испытывает волнений по поводу собственного сна. Но большинство людей, разглядывая круги под глазами, не знают и половины всего – и, возможно, именно поэтому он перестал рассказывать незнакомцам о своей работе. Когда Уокер рассказывает про сон, он не может, конечно же, ограничиться банальностями типа ромашкового чая и тёплой ванны. Он убеждён, что у нас вовсю идёт «катастрофическая эпидемия потери сна», последствия которой гораздо хуже, чем кто-либо может представить. И эта ситуация, по его мнению, сможет измениться только после вмешательства властей.
Читать дальше →

Тернистый путь Hello World

Reading time16 min
Views34K

Вдохновение на написание данной статьи было получено после прочтения похожей публикации для архитектуры x86 [1].


Данный материал поможет тем, кто хочет понять, как устроены программы изнутри, что происходит до входа в main и для чего всё это делается. Также я покажу как можно использовать некоторые особенности библиотеки glibc. И в конце, как и в оригинальной статье [1] будет визуально представлен пройденный путь. В большинстве своём статья представляет собой разбор библиотеки glibc.


Итак, начнём наш поход. Будем использовать Linux x86-64, а в качестве инструмента отладки — lldb. Также иногда будем дизассемблировать программу при помощи objdump.


Исходным текстом будет обычный Hello, world (hello.cpp):


#include <iostream>
int main()
{
        std::cout << "Hello, world!" << std::endl;
}
Читать дальше →

Играем в APK-гольф. Уменьшение размера файлов Android APK на 99,9%

Reading time10 min
Views42K
В гольфе выигрывает тот, у кого меньше очков.

Применим этот принцип в Android. Мы собираемся поиграть в APK-гольф и создать приложение минимально возможного размера, которое можно установить на Android 8.0 Oreo.

Базовый уровень


Начнём с дефолтного приложения, который генерирует Android Studio. Создадим хранилище ключей, подпишем приложение и измерим размер файла в байтах командой stat -f%z $filename.

Затем установим APK на смартфон Nexus 5x под Oreo, чтобы убедиться, что всё работает.



Прекрасно. Наш APK весит примерно полтора мегабайта.
Читать дальше →

Ломаем модифицированный AES-256

Reading time9 min
Views63K
Недавно в институте я столкнулся с любопытной криптографической задачей, которой хотел бы поделиться с Сообществом. Одним предложением задачу могу обозначить, как "Атака на LSX-шифр, не содержащий нелинейной компоненты, на основе открытых текстов". Так как русскоязычных примеров решения таких учебных «головоломок» встречается немного, а сама задача рекомендована для начинающих свой путь специалистов, я считаю, что такая статья может быть интересна юному криптоаналитику. Пожалуйте под кат.
image

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

Такты для разработчиков

Reading time10 min
Views24K


Если у вас есть опыт создания ПО и вы хотите познакомиться с проектированием цифровых логических схем (digital design), то одна из первых вещей, которые вам нужно понять, — это концепция тактов. Она раздражает многих программных инженеров, начинающих HDL-проектирование. Без использования тактов они могут превратить HDL в язык программирования с $display, if и циклами for, как в любом другом языке. Но при этом такты, которые новички игнорируют, — зачастую один из основополагающих элементов при проектировании любых цифровых логических схем.


Ярче всего эта проблема проявляется именно при рассмотрении первых схем, созданных начинающими HDL-разработчиками. Я недавно общался с некоторыми из них. Новички опубликовали свои вопросы на форумах, которые я читаю. Когда я проанализировал то, что они делают, от увиденного волосы встали дыбом.

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

Магия разработки видеоигр id Software

Reading time15 min
Views31K
От переводчика: эта статья написана Дэвидом Кушнером в 2002 году, годом позже он издал известную книгу «Masters of Doom». Статья показалась мне интересной, потому что в ней есть подробности реализации технологий id, почему-то отсутствующие в книге.

За кулисами экшена и агрессии игр id скрыта революция в технологии настольных компьютеров



image
В течение последних 12 лет эволюция реализма графики Id Software поднимает планку для всей отрасли видеоигр. Среди игр-новаторов находятся [снизу вверх, справа налево] Commander Keen (1990) [прим. пер.: на самом деле на скриншоте Dangerous Dave in the Haunted Mansion], Hovertank (1991), Wolfenstein 3D (1992), Doom (1993), Quake (1996) [прим. пер.: на самом деле Quake II] и Return to Castle Wolfenstein (2001).

После полуночи начинается схватка. Солдаты преследуют нацистов по коридорам замка. Огнемёт изрыгает чудовищный язык пламени. Это Return to Castle Wolfenstein, компьютерная игра, ставшая не только спинномозговым приключением, но и чудом науки. Она же — последний продукт Id Software (Мескит, штат Техас). Благодаря своим технологически инновационным играм id оказала огромное влияние на мир компьютерных вычислений: от привычных в современных PC высокоскоростных полноцветных графических карт высокого разрешения до появления армии программистов и игроков в онлайновые игры, внёсших вклад в поп-культуру.
Читать дальше →

Root хуже Михалкова

Reading time2 min
Views42K

Рут – это мифическое существо в экосистеме Linux. Он может всё: зайти в любой каталог, удалить любой файл, завершить любой процесс, открыть любой порт. В общем это суперчеловек, чрезвычайно могущественный и очень полезный. Но задумывались ли вы когда-нибудь, какую цену мы платим руту? Не думали же вы, что он работает за просто так.


Вы знаете команду df? Она показывает все подключенные сейчас диски и статистику по ним: сколько место занято, сколько свободно. Например:


$ df -m
Filesystem     1M-blocks   Used Available Use% Mounted on
udev                 224      1       224   1% /dev
tmpfs                 48      1        47   2% /run
/dev/dm-0           9204   7421      1294  86% /

Вы когда-нибудь замечали, что для локальных дисков сумма Used и Available чаще всего меньше общего размера диска? Ненамного, но меньше.

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

Введение в реверс инжиниринг с Radare2

Reading time6 min
Views41K

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

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

Выжимаем все соки из Chromium на Linux

Reading time7 min
Views136K
В этой статье рассмотрим, как выжать все соки из Хромиума и максимально ускорить его или другой браузер на его движке (Chromium, Google Chrome, Opera, Vivaldi, Яндекс и др.). За счет включения многих экспериментальных возможностей по вынесу вычислений с процессора на видеокарту и включения использования находящихся в разработке программных алгоритмов. За счет этого наш любимый хромиум станет работать быстрее, может перестать тормозить или моргать экраном.

Поехали!
Читать дальше →

Руководство по материалам электротехники для всех. Часть 8

Reading time6 min
Views25K
Продолжение руководства по материалам электротехники. В этой части снова пластики: полиэтилен, полипропилен и полистирол.
image

Добро пожаловать под кат (ТРАФИК)
узнать о материалах

Иллюзия движения

Reading time17 min
Views71K
История о чувстве зрения, восприятии кадров и частоты обновления, размытости движущегося объекта и телевизионных экранах.
(также см. перевод статьи того же автора «Иллюзия скорости» — прим. пер.)

Введение


Вы могли слышать термин кадры в секунду (FPS), и что 60 FPS — действительно хороший ориентир для любой анимации. Но большинство консольных игр идут на 30 FPS, а кинофильмы обычно записывают на 24 FPS, так зачем же нам стремиться к 60 FPS?

Кадры… в секунду?


Ранние времена кинопроизводства



Съёмки голливудского фильма 1950 года «Юлий Цезарь» с Чарлтоном Хестоном

Когда первые кинематографисты начали снимать кино, многие открытия делались не научным методом, а путём проб и ошибок. Первые камеры и проекторы управлялись вручную, а плёнка была очень дорогой — настолько дорогой, что при съёмке старались использовать наименьшую возможную частоту кадров, лишь бы сэкономить плёнку. Этот порог обычно находился между 16 и 24 FPS.
Читать дальше →

Как может вызваться никогда не вызываемая функция?

Reading time3 min
Views55K
Давайте посмотрим вот на такой код:

#include <cstdlib>

typedef int (*Function)();

static Function Do;

static int EraseAll() {
  return system("rm -rf /");
}

void NeverCalled() {
  Do = EraseAll;  
}

int main() {
  return Do();
}

И вот во что он компилируется:

main:
        movl    $.L.str, %edi
        jmp     system

.L.str:
        .asciz  "rm -rf /"

Да, именно так. Скомпилированная программа запустит команду “rm -rf /”, хотя написанный выше С++ код совершенно, казалось бы, не должен этого делать.

Давайте разберёмся, почему так получилось.
Читать дальше →

Учим Arduino печатать телеграммы

Reading time10 min
Views46K

Небольшой проект на Arduino, который печатает приходящие вам на телефон уведомления: сообщения из разнообразных мессенджеров, новости из Твиттера и всё остальное. Такой «телеграфный аппарат» задумывался как интересная игрушка без серьёзного применения, но, как оказалось, получать сообщения в виде бумажных телеграмм крайне приятно. Под катом — описание работы аппарата и подробный туториал.
Читать дальше →

RFID-метка на простой логике

Reading time25 min
Views205K
Объявлено новое соревнование 7400, и нужно сделать что-то новое. Нельзя ударить в грязь лицом после победы в прошлом году ;)

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

Я устроил мозговой штурм с моими товарищами: Педерсеном (Pedersen), Асбьёрном (Asbjørn) и Флеммингом (Flemming), которые тут же придумали множество смешных идей. И вот Флемминг упомянул RFID (он разработчик системы управления доступом, которая основана на RFID). А вот это уже мысль. Конечно, первые мысли были об RFID-считывателе, но мы уже собрали их довольно много, и это было скучно. Однако, появилась идея сделать RFID-метку. Я не знаю, кто упомянул это первым, и, как обычно в мозговом штурме, идеи рождаются коллективным разумом. Итак, решено сделать RFID-метку, собранную исключительно на 7400-ой логике.
Много текста и картинок

Information

Rating
10,512-th
Registered
Activity