Обновить
144.94

Ненормальное программирование *

Извращения с кодом

Сначала показывать
Порог рейтинга
Уровень сложности

Удалённое парное программирование с использованием GNU Screen

Время на прочтение4 мин
Количество просмотров6.2K
Перевод этой статьи может послужить хорошей пошаговой инструкцией для тех, кто регулярно пользуется парным программированием, или хотя бы совместным просмотром кода, и при этом знаком и готов использовать текстовые редакторы, работающие в текстовом режиме (Emacs, vi и т.п.). В статье дано много интересных ссылок, советую по ним пробежать глазами, а первый комментарий содержит ссылку на аналогичный опыт, но с более чистым аналогом GNU Screen — tmux.

У нас в Siyelo две распределённых команды, одна в Кейптауне, вторая в Скопье. Нам приходится придумывать, как заниматься удалённым парным программированием между офисами. Существует много возможностей (отличный обобщающий пост здесь).
Раньше мы постоянно пользовались Skype'ом для разделения экрана, но у нас при этом возникали следующие проблемы:

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

Загрузка динамической библиотеки из памяти в Linux

Время на прочтение6 мин
Количество просмотров7.3K
В одном моем кроссплатформенном проекте мне понадобилась возможность проверять цифровые подписи плагинов перед загрузкой. Ни один из вариантов с созданием файла не является безопасным, так как можно подменить файл между проверкой подписи и его загрузкой, так же нельзя проверить подпись после загрузки, так как уже выполнились статические конструкторы. Поэтому необходимо загружать плагин, не создавая файла.

Перехватить функции open, mmap и прочие невозможно, так как ld.so слинкован с библиотекой си статически, исполняемые файлы, загруженные же своим загрузчиком, «неполноценны» (даже с перехватом функций в libdl): они не регистрируются в списке загруженных библиотек и/или их символы не видны через dlsym. Следовательно, остается только перехват системных вызовов.
Here be dragons

Эмулятор i8080 на bash

Время на прочтение4 мин
Количество просмотров8.1K
Сегодня они пишут xonix, а завтра напишут на баше отдельную операционную систему с фреймворком и СУБД.

Наконец, завтра наступило. В bash (после некоторого допиливания) можно запустить серьезную ОС, например, CP/M. А для CP/M определенно есть СУБД, компиляторы и многое другое.



Почему не нужно и зачем нужно делать эмуляторы на bash, работающий эмулятор i8080 на bash и несколько советов по ускорению работы bash-скриптов -
под катом.

CubeStormer II собирает «Кубик Рубика» за 5 секунд

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


В детстве у меня было две или три этих игрушки, и я более-менее научился приводить «Кубик» в первоначальное состояние, но только в том случае, если хаос был не слишком уж и велик. В противном случае приходилось действовать при помощи грубой силы, разбирая «Кубик», и собирая его снова в буквальном смысле слова. Так приходилось делать потому, что кубик все же нужно было привести в первоначальное состояние, хотелось порядка. Возможно, на Хабре есть специалисты сборки «Кубика», но сравниться с устройством CubeStormer II вряд ли кому под силу.

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

Результаты конкурса 10k Apart — Responsive Edition

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

Итак, завершился конкурс 10k Apart — Responsive Edition.
Напомню, что по условиям конкурса созданные приложения должны работать и выглядеть одинаково хорошо на различных устройствах — от десктопов до мобильников и планшетов. Требуется поддержка IE10 Platform Preview, свежих версий Firefox и WebKit-браузера по выбору (Chrome или Safari). Допустимый размер приложения — до 10 Кб в zip-архиве (не считая некоторых популярных библиотек).

В этот раз за призовые места боролись 128 приложений (в прошлом году — 367). Как и в прошлом году для победителей были предусмотрены одна главная, три технических номинации и девять Honorable Mentions. В отличие же от прошлого раза, для приложений не проводилось открытого голосования (с выставлением оценок), а вместо этого использовались вездесущие фейсбуковские Like.

Итак, встречаем победителей.
Читать дальше →

Шутер с псевдо-3D графикой на… bash

Время на прочтение5 мин
Количество просмотров23K
Здравствуй, Хабрачеловек!

Решил я как-то, что неплохо бы научиться писать «Hello world!» на bash. Как-никак уже полгода работаю на убунте, стыдно не уметь такого. Поискал на Хабре и понял, что просто почитать мануалы нынче не модно, надо написать свою игру. Осталось выбрать какую. Шахматы, Xonix, Sokoban, Морской бой уже написали, Тетрис вроде тоже (хотя ссылки не нашел), что же выбрать? Первой идеей была стратегия, но была откинута из-за полной безумности (хотя я надеюсь, что один из тех, кто продолжит историю топиков про игры на bash напишет и ее). Поэтому я остановился на шутере.


*На картинке изображен коридор и монстр в нескольких шагах впереди

Ссылка на скрипт: github.com/EvilTosha/labirinth/blob/master/lab2.sh

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

Регистрация\Авторизация через картинку

Время на прочтение1 мин
Количество просмотров2K
Услышав недавно от знакомого, что в новой OS Windows будет авторизация по картинкам решил попробовать реализовать такую же систему но под Web интерфейс.
После 2х часов экспериментов получилась довольна быстрая регистрация, требующая только ввод имени пользователя(login).
Читать дальше →

Команда разработчиков «научила» квадрокоптер ловить шарики для пинг-понга

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


Команда разработчиков из Калифорнийского университета в Беркли уже довольно долгое время работает над созданием программного обеспечения для квадрокоптера. Это программное обеспечение позволяет устройству реагировать на изменения условий окружающей среды, исправляя собственное положение в пространстве. На видео, размещенном в продолжении, хорошо видно, чем отличается «поведение» обычного квадрокоптера, и устройства с программной платформой, разработанной исследователями.

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

Сетевая игра на bash: шахматы

Время на прочтение5 мин
Количество просмотров8.8K
Я давно хотел написать какую-нибудь сетевую игру на bash, причём желательно, чтобы управление было удобное, с клавиатуры, обычными курсорным клавишами. Вообще, тема интерактивного взаимодействия в bash глубже, чем «введите число, нажмите „Enter“» не раскопана. Мне пришлось всё изобретать и исследовать самостоятельно. Я очень старался найти что-то похожее по уровню интерактивности, но не нашёл.

Поскольку тонкости управления с клавиатурой съели очень много моего времени, я не стал заморачиваться с тонкостями совместимости, поэтому игра тестировалась только под Mac OS X, есть ненулевая вероятность, что она заработает и под Linux и уж точно её можно допилить там до рабочего состояния.

Для работы игра требует наличия nc (aka Netcat) и терминала с поддержкой 256 цветов (под Mac OS рекомендую iTerm2). При наличие интереса к игре, допилю до терминала на 16 цветов и /dev/tcp. Кстати начал выкладывать все свои шел-поделки на ГитХаб.

Сетевые шахматы на Bash


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

Играть просто — в каждый момент времени активна только одна доска (на скриншоте — правая, у неё буквы и цифры вокруг доски ярче), на активной доске курсор двигается курсорными клавишами — ←, →, ↑ и ↓, взять фигуру и поставить её на доску — по клавише пробела или Enter. Как только вы поставили фигуру на доску, ход переходит к сопернику. «Съесть» фигуру соперника проще простого — достаточно поставить свою фигуру на чужую. В игре есть защита — нельзя «съесть» свою фигуру.

Ничего помимо этого в игре нет — не производится правильность контроля ходов, нет проверки на завершение игры, можно даже ходить фигурами соперника. Было очень сложно придумать как обрабатывать нажатия в shell, так что остальное сделать я просто не успел, не поместилось в формат «игрушка за вечер».

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

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

Необычные поздравления с днем программиста — 2

Время на прочтение3 мин
Количество просмотров8.2K
Я хочу продолжить традицию, начатую год назад вот этой статьей (кстати, мне очень приятно, что ее еще помнят), и рассказать о еще нескольких способах сделать свое поздравление необычным и профессиональным. На этот раз я вывожу просто «congrats» — условно-нетрудоемкие способы закончились еще в том году.

Способ 1. Магический


В этой номинации традиционно выступают профессиональные фокусы на совершенно нормальных языках, которыми мы пользуемся каждый день, в данном случае — С++ (можно и просто C).

#include <stdio.h>
int main()
{   int A = 10, B = A^1937006968, C = B^337251857;
    printf((char *)&C);
} 


Disclaimer. Этот фокус использует низкоуровневые манипуляции с памятью; результаты могут варьироваться в зависимости от архитектуры компьютера и используемого компилятора.

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

Символ студии Pixar воссоздали в реальности

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


Не помню, когда именно студия Pixar стала использовать в качестве своего символа «ожившую» настольную лампу. Символ этот практически сразу же стал очень узнаваемым — спутать его нельзя ни с чем. Один из умельцев, вооруженный несколькими модулями, деталями и паяльником, решил воссоздать «живую» настольную лампу в реальности.

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

Как писать квайны

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

Многие программисты считают написание квайнов (программ, выводящих свой исходный код) непосильной задачей. И действительно — все эти цепные квайны и квайны различного порядка, при взгляде на которые можно потеряться в, казалось бы, бессмысленном наборе символов…

Однако, на самом деле, написать квайн на каком-либо языке не так сложно, как кажется. Сейчас я расскажу, как сделать это на различных языках программирования. Более того, мы не будем использовать «хаки» интерпретеруемых языков вроде операции вывода исходного кода и функций типа eval и напишем квайны на интерпретируемых и компилируемых языках.
Читать дальше →

Задача о восьми Ферзях на Oracle SQL

Время на прочтение6 мин
Количество просмотров12K
Привет, Хабролюди!

В мае месяце в Москве прошла олимпиада IT-Планета, одной из номинаций которой было «Программирование СУБД Oracle». Задания были интересными и сложными, и хотелось бы поделиться решением некоторых из них.
Первая задача, о которой я расскажу — задача о восьми ферзях, решить ее было необходимо используя для этого только SQL и ничего более, сначала я эту задачу просто вычеркнул из списка тех, которые собираюсь решать, но в последний час все-таки ее решил, что принесло мне первое место и диплом из рук министра связи и массовых коммуникаций РФ.
Читать дальше →

Ближайшие события

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

Время на прочтение2 мин
Количество просмотров6.3K
Изучая вики по эзотерическим языкам я наткнулся на интересный язык программирования Piet. Отличительной особенностью которого является графическое представление программы. Например, эта программа выводит «Hello World!»
image
И показалось мне, что данная программа похожа на QR-Code.
image
Только Piet использует цветовую кодировку. А QR-Code использует комбинацию расположения точек.
Читать дальше →

Пишем вирус на c#

Время на прочтение5 мин
Количество просмотров124K
Доброго времени суток читатели Хабра!
В этой статье я хотел бы поделиться опытом написания вредоносной программы на языке C# в Visual Studio. Для подтверждения своих слов я выложу пример полученного ПО для проверки.
Цели:

  • Написать вредоносную программу, которую не увидят антивирусы
  • Использовать только средства языка C#

Нам понадобится:

  1. Visual Studio 2005-2010 (я использовал 2010 Ultimate)
  2. Знания и опыт работы на языке c#
  3. Компьютер для опытов

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

Как писали програмисты времен «Слово о полку Игореве»

Время на прочтение1 мин
Количество просмотров775
Вот и ответ — какой язык самый-самый правильный и единственно верный.

image

Нестандартное использование Get и Set в Javascript

Время на прочтение2 мин
Количество просмотров5.2K
Многие в курсе, что в Javascript есть так называемые Getter'ы и Setter'ы. Это конструкции для отслеживания изменения значений свойств объекта, а так же возвращения этих значений. «С изнанки» объекта они выглядят как обычные функции:

var obj = {
   get value() {
     return 0;
   },
   set value(s) {
     alert ("Go screw yourself!")
   }
}


* This source code was highlighted with Source Code Highlighter.


Но раз это функции, их можно использовать как душе угодно!

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

Использование семантической аннотации для идентификации требований

Время на прочтение7 мин
Количество просмотров3.8K
Добрый день, %userName%.

В своем предыдущем топике по Управлению требованиями к IT-проектам я затронул тему идентификации требований с использованием концептов и повторное использование уже реализованных требований из одного проекта в другом. В данном топике я бы хотел развить данную тему.

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

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

Небольшая или большая интроспективная программа на C/C++

Время на прочтение1 мин
Количество просмотров2.8K
Под Хабракатом небольшой этюд позволяющий писать маленькие или большие приложения, которые содержат в себе свой же код и выглядят при этом почти адекватно.
Читать дальше →

Property в C++ (с доступом по имени, но без сеттеров)

Время на прочтение1 мин
Количество просмотров993
Другой вариант Property, который был реально использован мною в работе, для передачи параметров командной строки в программу. Не имеет гибкости в используемых типах, но для данной задачи оказался весьма удобен.

DISCLAIMER: не пытайтесь применять данный паттерн в циклах и средах с недостатком ресурсов — на цикл чтение-запись одного параметра уходит 2-5 микросекунд, при большом кол-ве параметров.

В догонку к Property в С++ на С++

Исходник

Вклад авторов