Ghostery вроде больше всягоко дерьма режет, но при нём постоянно что-то не работает, и приходится часто делать pause blocking. Сейчас стал использовать Disconnect. Всё вроде пока работает, но в нём даже нельзя посмотреть список того, что он потенциально может резать, или поконфигурировать этот список. Может я что-то недопонял? Или что-нибудь получше чем эти два варианта есть?
Вот недавно опять решил посмотреть, что там новенького в Go, и наткнулся на следующую статью: https://blog.golang.org/errors-are-values. В ней рассказывается, как в Go обрабатывать ошибки. Типа: «некоторые товарищи» утверждают, что приходится очень часто писать «if err != nil». Они неправы! Мы предлагаем этим товарищам парочку костылей, которые исправят их походку.
Ещё один момент. В Go FAQ (yourself :) написано: «We believe that coupling exceptions to a control structure, as in the try-catch-finally idiom, results in convoluted code.» Как-то мне кажется, что с «if err != nil» на каждом шагу код получается не менее convoluted.
Однако, что-же получается? В Go те же самые проблемы при обработке ошибок, что и в C? В Go, как и в C надо постоянно проверять статус ошибки. А если забыл, то тебя ждут те же самые приятные ощущения, что и в C. Где прогресс, спрашивается? Почему через 30 лет Роб Пайк и Кен Томпсон ничего лучше не придумали? Ведь есть же языки, где такой хернёй заниматься не надо.
Я думаю все знают про TempleOS. Её пишет один сумашедший (с каким-то там шизофреническим диагнозом, всё как надо) с одной единственной целью: донести слово божье до людей (в его понимании, конечно). Она достаточно примитивная если судить по скринам. Но посмотрите, какие у этой OS необычные возможности. До чего только не додумается воспалённый мозг сумашедшего!
...Одному из мэнтейнеров Gentoo, Patrick Lauer-у. Он удосужился прочитать документацию по dbus и офигел от её кривости. Потом он решил посмотреть на код, и тут ему полностью снесло крышу. После чего он основательно напился и решил написать разгромную статью, где проводит подробный разбор опусов авторов dbus. В заключение он говорит (для Ъ):
Хоть я и узнал много нового, мне кажется невероятным, что это недокументированное поделие кто-то может серьезно использовать. Многие концепции либо не определены, либо определены через реализацию. Все API сделаны как попало без какой-либо структуры, часто встречаются дупликаты (какая разница между Terminate и Kill?), а независимая реализация не представляется возможной. Если это будущее, то лучше я останусь в прошлом...
/* Example libCello Program */
#include "Cello.h"
int main(int argc, char** argv) {
/* Stack objects are created using "$" */
var int_item = $(Int, 5);
var float_item = $(Real, 2.4);
var string_item = $(String, "Hello");
/* Heap objects are created using "new" */
var items = new(List, int_item, float_item, string_item);
/* Collections can be looped over */
foreach (item in items) {
/* Types are also objects */
var type = type_of(item);
print("Object %$ has type %$\n", item, type);
}
/* Heap objects destroyed with "delete" */
delete(items);
}