20.02.2014
kaa.python
Довольно часто возникает необходимость разобрать новый большой проект и не совсем очевидно с какой стороны подступиться к огромной горе исходных кодов которая свалилась на вас. Если вам повезло и проект написан на C++, C, Objective-C, Python, Java, PHP, C#, Фортран или VHDL то простое решение есть – Doxygen + GraphWiz.

Я не буду вдаваться в такие базовые вещи, как создание проектов в Doxygen, с этим и так все очень просто. Заметка базируется на предположении что базовый проект создан, пути к исходным кодам, которые необходимо изучить, прописаны и осталось сделать так, что бы по генерируемой Doxygen документации можно было быстро легко разобраться в проекте.

http://sysdev.me/learning-new-project/
22.03.2014
kaa.python
Думаю, ни для кого не секрет то, что основная реализация языка программирования Python фактически не поддерживает многопоточности. Есть модули которые позволяют эмулировать потоки посредствам процессов, но подобный путь крайне требователен к ресурсам и поэтому его применимость крайне ограниченна, особенно для большого количества операций ввода/вывода. При этом, в подавляющем большинстве случаев, распараллеливание задач не несет какого-то серьезного практического смысла и просто является одним из возможных архитектурных решений. В качестве альтернативы потокам могут выступать асинхронные операции, а с учетом ограничений интерпретатора, подобный подход должен бы был быть родным подходом в Python уже много лет как. Тем не менее, появился долгожданный модуль asyncio только в Python 3.4, но это в любом случае лучше чем никогда.
http://sysdev.me/python-asyncio/
16.02.2014
scale_tone
Здравствуйте, Аноним, Вы писали:

А>Мне кажется второй способ более простой и удобнее для чтения отладки и т.п.

А>Есть ли какая-то эффективность у 1го способа или это уже можно считать как устаревший подход ?

На нынешнем этапе развития науки и техники устаревшим считается скорее второй подход.

Во всех трех вариантах:

1) Begin/End-методы,
2) обертка Task.FromAsync над ними, упомянутая TK
и
3) синхронные сетевые вызовы в теле таски,

непосредственно вызовы и ожидания ответов действительно происходят в потоках из IO-пула. Но вариант №3 потребляет _еще_один_ поток, в дополнение к уже потребляемым IO-потокам. Т.е. в общем случае требует в два раза больше потоков (=> в два раза больше памяти) и рано или поздно упрется в лимит на их число.

Преимущества первых двух вариантов над третьим особенно хорошо видны, если принудительно ограничить размер ThreadPool-а:

[c#]
class Program
{
const int CallCount = 30;
16.02.2014
kaa.python
На днях компания Apple представила новый документы: Secure Coding Guide. Вышло у них немного "водянисто", но в целом стоит отметить хорошую структурированность и продуманность документа.
11.02.2014
ShaggyOwl
В Компьютерре вчера была опубликована статья Михаила Ваннаха "Так зачем DARPA открывает всему свету закрома инноваций?".
31.01.2014
kaa.python
Да, на сайте не так давно появилась поддержка раскраски Objective-C. Тэга нет в в панеле редактирования, так что вставлять вручную [ objc ], само собой без пробелов, и будет вам счастье


@interface Rect : NSObject
{
    float     width;
    float     height;
}
- (float) width;
- (float) height;
@end
04.02.2014
kochetkov.vladimir
Проект довольно известного криптографа Jean-Philippe Aumasson представляющий собой набор правил, позволяющих избежать ошибок при реализации/использовании криптографических функций в своем коде: https://cryptocoding.net/index.php/Cryptography_Coding_Standard

В качестве бонуса, наглядная иллюстрация последствий нескольких подобных ошибок.
03.02.2014
kaa.python
Реализуемая Rust модель памяти оставляет свой отпечаток на всем, включая такие вещи как замыкания и функции обратного вызова. Привычные по другим языкам концепции в случае с Rust начинают вести себя иначе и далеко не с первого взгляда очевидно почему такое происходит.

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

http://sysdev.me/callbacks-closures-and-rust-memry-model/
01.02.2014
kaa.python
В Rust используется разрушающее сопоставление с образцом, что в купе с моделью памяти Rust, иногда, дает очень занятные эффекты. Для примера возьмем структуру MyStruct и создадим две переменные типа Option в которых будет лежать наша структура, в одном случае в виде стекового объекта, а во втором в виде уникального указателя.
struct MyStruct {
    val: int
}
let stack_data = Some(MyStruct{val:42});
let own_data = Some(~MyStruct{val:42});


http://sysdev.me/destructive-pattern-matching
01.02.2014
kaa.python
Теперь RSDN поддерживат и Rust!
extern mod std;

use std::{task, io, uint, libc};
use std::comm::{SharedChan};

struct TestInfo {
    mode: task::SchedMode,
    tasks_count: i32,
    timeout: i64
}


Как несложно догадаться, нобходимо использовать тег rust в квадратных скобочках.
<  1  …  30  31  32  33  34  35  36  …  50  > rss