Дизассемблер под OSX

Иногда бывыет нужно что-то по-быстрому дизассемблировать, понять как работает или почему работает не так, как ожидалось. Недавно, в очередной раз вознила такая задача и я стал думать чем же мне воспользоваться. По большому счету, под OSX с дизассемблерами не очень: возможности OTool как дизассемблера (им я раньше и пользовался, но уж больно не удобно что-либо дизассемблировать в командной строке) очень скудные, IDA Pro за $1129 (да, именно Pro, а не Starter, которую я еще согласен оплатить из своего кармана) и очень понравившееся мне приложение с великолепным соотношением цена/качество – Hopper Disassembler.
Безусловно, по возможностям Hopper Disassembler основательно уступает IDA Pro, но, в большинстве случаев вся мощь IDA Pro не очень-то нужна и возможностей Hopper вполне хватает. Так что, будет кому-то нужен недорого дизассемблер под OSX – поглядите в сторону Hopper.

Pip, update all

Хотелось бы, да? А нету. Нашлось вот такое решение:

import pip
import sys
from subprocess import call

def pip_ver():
    if sys.version_info.major == 3:
        return "pip3"
    else:
        return "pip"

cmd_line = pip_ver() + " install --upgrade "

for dist in pip.get_installed_distributions():
    call(cmd_line + dist.project_name, shell=True)

Использовать просто:

python script_name.py

Делать файл исполнимым не стал, т.к. при явном вызове Python можно указать нужную версию 2.X или 3.X

Явное удаление функций в C++11

Думаю что все помнят что в C++03 для того, что бы сделать какой-либо класс защищенным от копирования было необходимо объявить его конструктор копирования и защищенными.

class Foo {
public:
    Foo(){}
    ~Foo(){}
private:
    Foo(const Foo&);
    Foo& operator=(const Foo&);
};

Continue reading

Переменные окружения в OSX

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

Стандартный путь довольно прост: необходимо вписать в файл /etc/launchd.conf новые пути, следующим способом.

setenv PATH /new/path/a:/new/path/b

Собственно, я так делал всегда и все было нормально. Но, внезапно, а может и не очень, к примеру после какого-то обновления, ряд приложений (тот же Eclipse и Wireshark) перестал видеть что-либо за пределами переменных, прописанных в /etc/launchd.conf. В итоге, по мнению этого ряда приложений “исчезло” все, VJM, dir, ls да совсем-совсем все.

Гугла подсказала, что пользовательские переменные, которые должны стать доступны всем, можно добавить еще в пару файлов, например в /private/etc/paths. Формат файла прост: одна линия – один путь.

/new/path/a
/new/path/b

Удобный Vim

С тех пор, как научился пользоваться Vim, при пользовании любым другим редактором кода возникает ощущение того, что что-то не так. В то же время, большое количество народу боится этот редактор и считает затраты времени на его изучение совершенно не оправданными. На самом деле это не так, изучить как пользоваться Vim очень просто и по первому времени, больше всего, не хватает нормальной конфигурации, так как Vim, по большому счету, это конструктор из которого можно собрать почти что угодно. Этот пост будет о том, что стоит прочитать про Vim и как его настроить. Каких-то рассказов о том, почему именно Vim я писать не собираюсь, так как цели убедить кого-то у меня нет. Continue reading

Слегка разочаровался в Scala

Когда-то, довольно давно, я взялся за поиск альтернативы для C++, который во все времена был и, как мне думается на данный момент, будет моим основным рабочим инструментом. Само собой, эта альтернатива мне была нужна не для того, что бы перейти в какую-то иную сферу, а для тех случаев, когда либо хочется написать что-то свое, либо нужно быстро создать какой-то прототип, проверить ту или иную концепцию. В такой ситуации JVM-based язык очень удобен и, по большому счету, безальтернативен, конкуренцию может составить разве что Python со своим простым синтаксисом и безграничным набором библиотек. Continue reading

MemCardsBuilder готов

Завершил работу над экспериментом по написанию кода на Scala и знакомством с библиотекой LuceneMorphology – проектиком MemCardsBuilder. Дабы не тратить время совсем уж впустую, я старался сделать эксперимент максимально полезным при минимальном функционале. Поэтому, функций не так уж и много:

  1. Анализ заданных текстов и выявление частот вхождения слов с учетом морфологии. Благодаря учету морфологии see, saw, seen расцениваются как одно слово, а не 3.
  2. Загрузка переводов с lingvo.yandex.ru для полученного словаря.
  3. Построение ментальных карт в формате разделения при помощи табуляций. Данный формат воспринимает такое замечательное приложение как Anki. При импорте карт в Anki, необходимо выставить галочку “Allow HTML in fields”.

На данный момент, да и скорей всего не только на данный момент, приложение поддерживает только en -> ru построение карт. В принципе, библиотека LuceneMorphology позволяет организовать ru -> en построение без особых проблем и в MemCardsBuilder заложена такая возможность, просто она не реализована. А вот для организации поддержки чего-то за пределами русский<->английский я не вижу возможностей, т.к. я не нашел какой-то аналогичной библиотеки поддерживающий морфологический анализ для, например, испанского или немецкого языков.

Пример того, как можно запустить приложение:

java -jar MemCardsBuilder-1.0-SNAPSHOT-jar-with-dependencies.jar --from-pos 100 --to-pos 110  -s /path/to/analysed/file/data.txt -d ~/out.txt

Приложение понимает следующие ключи:

  • –from-pos (не обязательный параметр, по умолчанию равен 0) минимальный индекс обрабатываемого слова. Например, был построен словарь из 1000 слов, при задании ключа –from-pos 100, все слова с индексом от 0 до 99 не войдут в результирующую выборку.
  • –to-pos (не обязательный параметр, по умолчанию равен количеству слов) максимальный индекс обрабатываемого слова.
  • –meanings-count (не обязательный параметр, по умолчанию равен 2) максимальное количество значений слова, для каждой из частей речи, включаемых в ментальную карту.
  • -s (обязательный параметр) файл с данными для анализа. Ключ -s может быть использован несколько раз в этом случае все указанные файлы будут обработаны как единый объект.
  • -d (обязательный параметр) файл для записи ментальных карт.

Собранное приложение можно загрузить в двух форматах:

  1. Все в одном флаконе: MemCardsBuilder-1.0-SNAPSHOT-jar-with-dependencies.jar
  2. Только сам проект: MemCardsBuilder-1.0-SNAPSHOT.jar