20.02.2014
|
|
Довольно часто возникает необходимость разобрать новый большой проект и не совсем очевидно с какой стороны подступиться к огромной горе исходных кодов которая свалилась на вас. Если вам повезло и проект написан на C++, C, Objective-C, Python, Java, PHP, C#, Фортран или VHDL то простое решение есть – Doxygen + GraphWiz.
Я не буду вдаваться в такие базовые вещи, как создание проектов в Doxygen, с этим и так все очень просто. Заметка базируется на предположении что базовый проект создан, пути к исходным кодам, которые необходимо изучить, прописаны и осталось сделать так, что бы по генерируемой Doxygen документации можно было быстро легко разобраться в проекте. http://sysdev.me/learning-new-project/ |
|
22.03.2014
|
|
Думаю, ни для кого не секрет то, что основная реализация языка программирования Python фактически не поддерживает многопоточности. Есть модули которые позволяют эмулировать потоки посредствам процессов, но подобный путь крайне требователен к ресурсам и поэтому его применимость крайне ограниченна, особенно для большого количества операций ввода/вывода. При этом, в подавляющем большинстве случаев, распараллеливание задач не несет какого-то серьезного практического смысла и просто является одним из возможных архитектурных решений. В качестве альтернативы потокам могут выступать асинхронные операции, а с учетом ограничений интерпретатора, подобный подход должен бы был быть родным подходом в Python уже много лет как. Тем не менее, появился долгожданный модуль asyncio только в Python 3.4, но это в любом случае лучше чем никогда.
http://sysdev.me/python-asyncio/ |
|
16.02.2014
|
|
Здравствуйте, Аноним, Вы писали:
А>Мне кажется второй способ более простой и удобнее для чтения отладки и т.п. А>Есть ли какая-то эффективность у 1го способа или это уже можно считать как устаревший подход ? На нынешнем этапе развития науки и техники устаревшим считается скорее второй подход. Во всех трех вариантах: 1) Begin/End-методы, 2) обертка Task.FromAsync над ними, упомянутая TK и 3) синхронные сетевые вызовы в теле таски, непосредственно вызовы и ожидания ответов действительно происходят в потоках из IO-пула. Но вариант №3 потребляет _еще_один_ поток, в дополнение к уже потребляемым IO-потокам. Т.е. в общем случае требует в два раза больше потоков (=> в два раза больше памяти) и рано или поздно упрется в лимит на их число. Преимущества первых двух вариантов над третьим особенно хорошо видны, если принудительно ограничить размер ThreadPool-а: [c#] class Program { const int CallCount = 30; |
|
16.02.2014
|
|
На днях компания Apple представила новый документы: Secure Coding Guide. Вышло у них немного "водянисто", но в целом стоит отметить хорошую структурированность и продуманность документа.
|
|
11.02.2014
|
|
В Компьютерре вчера была опубликована статья Михаила Ваннаха "Так зачем DARPA открывает всему свету закрома инноваций?".
|
|
31.01.2014
|
|
Да, на сайте не так давно появилась поддержка раскраски Objective-C. Тэга нет в в панеле редактирования, так что вставлять вручную [ objc ], само собой без пробелов, и будет вам счастье
|
|
04.02.2014
|
|
Проект довольно известного криптографа Jean-Philippe Aumasson представляющий собой набор правил, позволяющих избежать ошибок при реализации/использовании криптографических функций в своем коде: https://cryptocoding.net/index.php/Cryptography_Coding_Standard
В качестве бонуса, наглядная иллюстрация последствий нескольких подобных ошибок. |
|
03.02.2014
|
|
Реализуемая Rust модель памяти оставляет свой отпечаток на всем, включая такие вещи как замыкания и функции обратного вызова. Привычные по другим языкам концепции в случае с Rust начинают вести себя иначе и далеко не с первого взгляда очевидно почему такое происходит.
В Rust имеются два вида замыканий: стековые и уникальные и указатели на функции. В некоторых случаях замыкания взаимозаменяемы и совместимы с указатели на функции, в некоторых нет. Поведение данных замыканий идентично поведению стековых данных и данных адресуемых посредствам уникальных указателей. Так как весь этот набор выглядит довольно обширным, то мне кажется что лучше всего разбираться на примерах. http://sysdev.me/callbacks-closures-and-rust-memry-model/ |
|
01.02.2014
|
|
В Rust используется разрушающее сопоставление с образцом, что в купе с моделью памяти Rust, иногда, дает очень занятные эффекты. Для примера возьмем структуру MyStruct и создадим две переменные типа Option в которых будет лежать наша структура, в одном случае в виде стекового объекта, а во втором в виде уникального указателя.
http://sysdev.me/destructive-pattern-matching |
|
01.02.2014
|
|
Теперь RSDN поддерживат и Rust!
Как несложно догадаться, нобходимо использовать тег rust в квадратных скобочках. |
|