Получение сертификатов сайта

Практически любая, сколь-нибудь не стандартная задача выливается в часы малопродуктивного гугления, что печалит. Сегодня я искал ответ на вопрос, как в OSX получить сертификаты сайта, с которым ты планируешь общаться по HTTPS. До кучи дело осложняется тем, что все должно работать не только напрямую, но и через прокси.
Если говорить о Windows, данная задача решается довольно просто, благодаря библиотеке WinHTTP (кажется, ее так звать) и функции WinHttpQueryOption с флагом WINHTTP_OPTION_SERVER_CERT_CONTEXT, но мне-то нужно решение для OSX! И оно было найдено, как и ожидалось, в дебрях очень любимой мной библиотеки cURL. Continue reading

DateTime и Pandas

В составе модуля Pandas есть очень удобный функционал для чтения CSV-файлов. К сожалению, большинство примеров работы с ним предполагают что одна физическая колонка в CSV-файле соответствует одной логической записи в DataFrame. Предположение отличное, но я сходу наткнулся на то, что дата разнесена по нескольким столбцам, а не записана в формате типа YYYY/MM/DD:

data = """\
    2011,1,10,AAPL,Buy,1500,
    2011,1,13,AAPL,Sell,1500,
    2011,1,13,IBM,Buy,4000,
    """

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

import pandas.io.parsers as pp
from cStringIO import StringIO

pp.read_csv(StringIO(data), names=["year", "month", "day", "symbol", "op", "count", "NA"],
                           parse_dates={'date':["year", "month", "day"]})

Что даст нам правильно представленные данные:

                 date symbol    op  count  NA
0 2011-01-10 00:00:00   AAPL   Buy   1500 NaN
1 2011-01-13 00:00:00   AAPL  Sell   1500 NaN
2 2011-01-13 00:00:00    IBM   Buy   4000 NaN

О двух интересных проектах

В этих ваших интернетах, за последнюю неделю, я узнал о двух проектах которые, на мой взгляд, как минимум заслуживают того, что бы о них прочитать. Речь идет о двух новых “почти ОС”, одна из которых совсем уж наброски, а вторая вполне себе рабочий прототип. Интересны системы, в первую очередь, тем на чем они написаны и в какой среде работают. Continue reading

Я бы в камне высек и каждому разработчику на стол поставил…

НИКОГДА не пиши промышленной код на экзотическом и/или слабо распространенном, в компании где ты работаешь, языке программирования. Например на Perl/Haskell/Clojure или еще какой-то давно/недавно выученной тобой хреновине.

Луч поноса авторам HomeBrew

Довольно давно, а если говорить точнее, то уже лет как 5 я использую MacPorts. Порты, конечно, не без багов, но все же они достаточно хорошо спроектированы и удобны в использовании. В них всегда можно найти несколько версий компиляторов и т.д. И тут, внезапно, мне понадобился HomeBrew. Да, я знаю, что писать пакеты для MacPorts трудно, а для HomeBrew легко. Да, я в курсе того, что заставить работать MacPorts через прокси не так уж и просто, а HomeBrew очень легко. Но…

КАКОГО ХЕРА HomeBrew требует что бы пользователь был Admin?! Что за жопорукий дебил это придумал?! Системное приложение ОБЯЗАНО уметь работать через sudo или каким-то иным способом повышать свои права!

Что бы такое посмотреть, что бы такое почитать? IV

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

Ну и Майерс с Саттером понарассказали всякого:

  • An Effective C++11/14 Sampler. Первый, похоже что делает наброски к новой книге по эффективному использованию C++11;
  • One C++. А второй всячески хвалит C++ демонстрируя его пригодность для всего-всего на свете. Да, это выступление можно и не смотреть, я скорее промотал, нежели просмотрел.

Переменные окружения в 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

Итераторы в Rust

Реализация итераторов в Rust вышла довольно удобная, да и сама коллекция доступных итераторов обширна и вполне сравнима с коллекцией итераторов из библиотеки BOOST.

let mut xs = ~[1, 2, 3];
{
    let it = xs.iter();  // (1)
    //xs.push(4);        // (2)
}

Continue reading

Что бы такое посмотреть, что бы такое почитать? III

Надо сказать, эта неделя выдалась довольно интересной: несколько отличных статей по C++, обзор состояния C++1Y и пара выступлений о Rust.

Если говорить о C++, то отличился Саттер, выдавший одну интересную статью и небольшую головоломку:

А новости относительно Rust вообще необычайно приятны:

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