LINUX.ORG.RU

Избранные сообщения cryptohedge

Можно ли купить концентрированный сок в розницу (подробности ниже, т.к. кое-какой можно)?

Форум — Talks

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

Поинтересовался, можно ли купить данные концентраты простым смертным. Удалось купить вишнёвый и клубничный в специализированном магазине для самогонщиков, причём по не очень выгодной цене (литр готового 50% нектара обошёлся где-то в 55 рублей). Однако нужны других нужных мне вкусов (например, яблоко и апельсин) там нет.

Нашёл вот этот ресурс: http://www.tdtriada.ru/koncentriroannyy_sok_v_butylkah-_1_, написал им, они сказали, что минимальная партия — 6 бутылок одного вкуса (это выйдет 42 литра готового сока), однако, как утверждают, работают и с физическими лицами, не являющимися ИП.

Помимо экономии данный продукт нужен мне для приготовления газированного сока. Кстати, Linux тут притом, что в США газированный яблочный сок называют шипучим сидром, а данный напиток фигурирует в My Little Pony.

Неизвестно ли кому-нибудь тут о возможности приобретения продукта более мелкими партиями?

 

Ttt
()

Лучшая СУБД для CQRS+Event Sourcing.

Форум — Development

Добрый день, мои дорогие любители архитектуры распределенных систем.

Сразу накидаю ссылочек, кто хочет интересное чтиво.

http://martinfowler.com/bliki/CQRS.html

http://habrahabr.ru/post/146429/

http://habrahabr.ru/post/149464/

http://blog.jonathanoliver.com/2011/05/why-i-still-love-cqrs-and-messaging-an...

http://msdn.microsoft.com/en-us/library/jj554200.aspx

Вкратце. CQRS - более общий вариант CRUD, мы не обязательно в DAO записываем те же обЪекты что и читаем (Entities). Вместо этого отправляем асинхронные Command и через время, когда он раздуплится, можем делать Query. Тоесть вместо одного DAO у нас Read Model и Write Model.

Event Sourcing, Write Model. У нас нет сущностей, есть Aggregate, которые реально не сохранены в базе, но определяются общим ID. Так вот, когда мы получаем Command на определенный ID, то мы достаем предыдущие Command на этот ID, реплеим их в памяти, они имеют доступ к общему обьекту Aggregate, который конструируется с нуля поглощая эти Command. Потом мы добавляем к нему новый Command и сохраняем его в базу.

Добавление последнего Command порождает много Event, которые разлетаются к чертям асинхронно во все стороны и там какие-то куски кода сферически в вакууме обновляют Read Model. Например в реальном времени обновляют таблицы, делают real time MapReduce, обновляют карту мира, пишут письма, пофиг.

Read Model может быть бесконечно разнообразным и его можно стереть, перепрограммировать и воспроизвести заново все Event. Их можно добавлять потом и делать сколько угодно штук. Они могут быть даже не в вашей компании. С письмами повторную отправку иногда нужно отключать.

А теперь вопрос. Какая СУБД, желательно из бесконечно масштабируемых, для такого подходит.

Mongo, РСУБД прямо утыканы single point of failure, так что отбросим пока.

Cassandra. Идеально, неубиенная, линейно масштабируется, no single point of failure. Первый ключ (parition/row key) - command id. Второй, поддающийся сортировке - timestamp. Но все омрачает один факт. Не смотря на рекламу что с помощью R+W>N можно достичь strong consistency, это простите брехня. Потому что нет rollback, и потом вылазят проблемы что если write неуспешен, то некоторые чтения могут все же увидеть новые данные. А следующее чтение - старые. А потом опять новые. Нужно просто правильные узлы выбирать. Для вебни - самое то. Но когда CQRS+Event Sourcing система будет наивно колбасить миллион комманд в автоматическом режиме, то может неслабо бабахнуть.

Riak - то же самое вроде, не? Очень хотел бы послушать.

HBase? Очень мало знаю о этой СУБД.

Короче нужна кассандра с роллбеком

 , ,

vertexua
()

ооп и функциональщина кратко, внятно.

Форум — Development

Дабы не слать напраслину на любителей создавать классы и объекты, пытаюсь разобраться в плюсах, которые отличаются от родителя, на первый взгляд, только названиями файлов, функций и приемами организации мышления погромиста. Так вот, эти ваши классы даже в учебнике называют почти структурами, а мизерное отличие сомнительного профита легко можно решить и в анси си(далее - ансися) при ближайшем обновлении. Ансися страдает перегрузкой названий функций для каждого из подлежащих обработке типов, отсутствием удобной иногда перегрузки функций, что, конечно минус, но не критично, ибо решаемо. Сиплюсик конечно удобен школьникам, тяжело принимающим всякие %s %d %x и так далее в качестве аргументов принтфов и сканфов, но зачем создавать для этого отдельный язык? Ведь << и >> становится лишним препятствием при освоении, если параллельно сдвиги битов читать. Итого, я вывел для себя, что в попытке облегчить участь программиста, разработчики языка усложнили его до степени родителя, не получив особенного профита. Чем же ооп так всем нравится, если оно не облегчает код?

 , , ,

minakov
()

А давайте создадим нормальную опенсурсную систему проектирования ПО?

Форум — Development

Как правило в линуксах когда речь заходит о визуальном проектировании ПО, или графическом представлении документации к ПО - то все сводится к нескольким словам типа DIA, Inkscape или Gimp. Эти приложения конечно не плохие, но я считаю что они совсем не удобны для этих задач.

А давайте попробуем обсдудить и создать ПО для переноса мыслей из головы на бумагу? Предлагаю взять за основу идею IDEF0 (Очень удачный способ функционального моделирования), убрать лишнее и добавить туда возможность проектирования ООП и прочих финтиплюшек.

Считаю что проект можно сделать в виде веб-сервиса, поэтому потребуются: Бэкэндщики, жабаскриптеры, верстальщики/рисовальщики и просто люди с нормальным вкусом кто может нарисовать вменяемый внешний вид.

Как вам идея?

З.ы. для любителей не читать комменты: проект стремится быть опенсурсным до мозга костей поэтому будут не просто исходники с меткой ЖПЛ. Требуется участие в обсуждении и рождении проекта - все подробности описаны в комментах.

 , , ,

Siado
()

Бета-версия SteamOS доступна для загрузки

Новости — Проприетарное ПО
Группа Проприетарное ПО

В пятницу по американскому времени, совместно с отгрузкой первой партии SteamBox для бета-тестеров в США, была представляена для общественности первая открытая бета-версия SteamOS.

Что стало известно:

  • Основу составляет Debian 7 (Debian Wheezy)
  • ОС не является полностью свободной, закрытыми компонентами является сам клиент Steam и драйвер видеокарты
  • ОС не тивоизирована, и доступна для кастомизации обычными средствами (установка новых пакетов с помощью apt)
  • ОС не нацелена на замену десктопа, она позиционируется как «ОС для гостиной»
  • Интересным фактом является что что в SteamOS поставляется дополнительный Steam Runtime, который позволяет обеспечивать бинарную совместимость с любой программой, скомпилированой для Ubuntu 12.04 LTS с Steam Runtime. Наконец-то при обновлении не будет ломаться бинарная совместимость!

Системные требования:

  • 64 битный процессор Intel или AMD
  • 4GB ОЗУ
  • Минимум диск на 500ГБ (именно диск, так как установщик создает новую таблицу разделов)
  • Видеокарта от NVIDIA (поддержка AMD и Intel ожидается позже)
  • Поддержка UEFI
  • USB порт для установки

Скачать через torrent:

magnet:?xt=urn:btih:1e4dae83371ba704d5d89e1828068ef0c4151e32&dn=SteamOSInstaller.zip&tr=udp%3A%2F%2Ftracker.openbittorrent.com%3A80%2Fannounce&tr=udp%3A%2F%2Ftracker.publicbt.com%3A80%2Fannounce

>>> Подробности

 , , ,

Gordon01
()

VAX отправлен на пенсию

Галерея — Рабочие места

Шесть лет назад я опубликовал фотографию на LOR с видом на VAXы. Фирма DEC, их выпускавшая, испустила дух 15 лет назад и только сейчас «VAX Station 4000 60» через 22 года после запуска модели в серию с 19" экраном и тактовой частотой процессора 55 МГц отправлена на пенсию. VMS сидит теперь в виртуальной машине.

 , живая история

Evgueni
()

DEC уже мёртв, а VAX ещё жив \ldots

Галерея — Скриншоты

На самом деле даже два VAX.

Внизу куда тянется куча проводов (обслуживается свыше пятидесяти CAMAC-крейтов) - это microVAX, а сверху на свиче стоит VAX Station и текстовый терминал к microVAX, развёрнутый к зрителю обратной стороной.

Evgueni
()

Redis 2.8.0

Новости — Open Source
Группа Open Source

Спустя почти год с момента предыдущего стабильного релиза наконец-то вышел долгожданный Redis 2.8.0, быстрое и легкое масштабируемое хранилище данных вида ключ:значение с продвинутыми структурами данных (строки, списки, множества, отсортированные множества), методами доступа к ним и внутренним скриптовым движком на Lua.

Основные изменения:

( читать дальше... )

>>> Подробности

 

ins3y3d
()

С++ API в интернет

Форум — Development

Допустим, есть сервер на крестах, и его нужно выставить каким-то чистым апи в интернет.

Как это правильно сделать?

Какие есть готовые либы?

Есть что-нибудь, что по классам сможет генератором сгенерить апи и документацию?

Есть что-нибудь мягкое и пушистое, или сразу по-хардкору, Xerces, SOAP, WSDL, ковровые бомбардировки, wget в цикле?

Особенно интересно что-то для быстрой коммуникации. Т.е. ладно, совсем риалтайм надо пейсать руками, но для просто быстрого обмена сообщениями. А то пока там мегабайтная иксымелина персидским царем Ксерксом просрется. Царь пошел в сортир жевать иксэмэлину, а у игроков воооот такущий пинг пока он свои королевские дела не доделает, а там может и смысл запроса был в no-op :) Этот запрос НЕ относится к первым абзацам про чистое API.

Боюсь спросить, может у крестовиков вообще какой-нибудь application server типа node.js для таких дел имеется, который в один клик в софтину вклеивается (запустить в отдельном треде или процессе, чтобы сидел там и похрюкивал)?

 , , , stateful

stevejobs
()

Книжка по глубокому жаваскрипту

Форум — Web-development

Посоветуйте книжку по глубинам жаваскрипта!

Т.е. не референс по апи (оно на сайте мазилы), а что-нибудь типа философии, организации/паттернов, деталей реализации виртуальной машины, итп. Н-р очень интересно, как работает сборка мусора, как писать нетормозящий жирный код, как симулировать многозадачность на браузерных реализациях, итп.

Если вы произносите JavaScript как CoffeeScript, неплохо бы получить про него то же самое, особенно про борьбу с Недожсом с помощью сабжа. Ну и ссылку на ваш инстаграм, конечно!

Спс

 in depth, ,

stevejobs
()

Методы структурирования заметок

Форум — Talks

Привет, ЛОР.

Дело в том, что я люблю заниматься накоплением полезной информации в текстовом и графическом виде. Информация самого разного рода: полезные скрипты, принципиальные схемы, цитаты, номера автобусов, планы на будущее, интересные мысли, пришедшие в состоянии измененного сознания, и т.д. До недавнего времени все это хранилось в файлах на разных устройствах, закладках браузера, caldav, gnote, zim и на бумаге. Я решил, что пора собрать и структурировать все в одном месте. Для этого поднял dokuwiki, и в моем распоряжении появились перекрестные ссылки, пространства имен, теги и форматирование с формулами в LaTeX.

И вот со структурированием в целях дальнейшего удобного представления у меня возникла проблема. Поясню на примере. Я написал себе папу заметок по поводу цитаты. Эти заметки с цитатами относятся к определенной теме и к определенной книге, книга относится к автору. Тема книги относится к интересным и неоднозначным историческим событиям, которыми я заинтересовался после просмотра документального фильма, из которого тоже выписал пару цитат. Т.е. у меня есть куча заметок, которые группируются в связанные между собой группы и подгруппы, некоторые заметки можно отнести к нескольким подгруппам. Как-то так.

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

Поделитесь своими соображениями и ссылками по поводу методов решения данной проблемы.

 ,

Deleted
()

Тёмные углы C и C++

Форум — Development

Изначально даный пост предназначался для habrahabr, но местные модераторы его не пропустили без объяснения причин:

Увы, ваш топик «Тёмные углы C и C++» не был одобрен и не попал в общую ленту. Причин этому может быть много, но просим не терроризировать службу технической поддержки, так как там вашу статью даже не видели. Расстраиваться тоже не стоит - попробуйте опубликовать что-нибудь еще.

С уважением, Хабрахабр

В связи с этим выкладываю его сюда.

Я, как и многие из вас, работаю программистом. Официально моя должность не привязана к какому-либо конкретному языку программирования, что, кстати говоря, прекрасно, ведь для каждой задачи должны быть свои инструменты. Но довольно часто выбора просто нет (например, из-за особенностей реализации той или иной платформы), в связи с чем подавляющее большинство моих проектов пишутся на C++.

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

Думаю, вы со мной согласитесь, что C++ — язык с очень высоким порогом вхождения. Серьёзно! Я изучаю этот язык уже больше 3 лет, и практически каждую неделю открываю в нём что-то новое и удивительное. Именно об этом «новом и удивительном» и пойдёт речь в данной статье.

За то время, пока я изучал C++, у меня потихоньку накапливались интересные задачки, сниппеты и просто необычные куски кода, которыми я делился с коллегами по работе и знакомыми. У нас даже появилась своего рода традиция — каждый рабочий день с того момента, как я пришёл в компанию, я выкладывал по две новых задачки, которые мы старались по возможности обсудить в перерывах. Постепенно их набиралось всё больше и больше, пока, наконец, я не стал забывать некоторые из них. Именно в тот момент я решил предпринять попытку составления сборника так называемых «тёмных углов» C и C++. Я собрал воедино все те куски кода, что видел до сих пор, дополнил их цитатами из различных стандартов и продолжил копить свою «коллекцию». Изначально моей целью было собрать вместе всего 100 задачек, но я и оглянуться не успел, как их стало уже 200, 300 и вот теперь 400. На самом деле, их даже больше, но на данном этапе я решил ограничиться именно этим количеством.

Итак, представляю Вашему вниманию книгу «C and C++ Dark Corners». Конечно, назвать её книгой можно с натяжкой, ведь это, как я уже и сказал, сборник интересных и для кого-то малоизвестных мест C и С++.

Не откладывайте её в сторону после пары-тройки вопросов, ответы на которые Вы уже итак знаете — я уверен, что хоть какие-то из них заставят Вас задуматься, а ответы на другие могут удивить и даже шокировать.

В качестве примера приведу несколько вопросов из книги:

97. Что попадёт в stdout в результате выполнения след. кода и почему?

#include <iostream>
#include <memory>

#include <boost/smart_ptr/scoped_ptr.hpp>

class Foo
{
public:
 ~Foo() { std::cout << "Foo::~Foo() \n"; }
};

class Bar : public Foo
{
public:
 ~Bar() { std::cout << "Bar::~Bar() \n"; }
};

class Baz : public Bar
{
public:
 ~Baz() { std::cout << "Baz::~Baz() \n"; }
};

int main()
{
 std::cout << 1 << '\n';
 {
  Foo* instance = new Baz;
  delete instance;
 }

 std::cout << 2 << '\n';
 {
  std::shared_ptr<Foo> instance(new Baz);
 }

 std::cout << 3 << '\n';
 {
  std::shared_ptr<Foo> instance(false ? new Bar : new Baz);
 }

 std::cout << 4 << '\n';
 {
  boost::scoped_ptr<Foo> instance(new Baz);
 }

 std::cout << 5 << '\n';
 {
  std::unique_ptr<Foo> instance(new Baz);
 }

 std::cout << 6 << '\n';
 {
  std::auto_ptr<Foo> instance(new Baz);
 }
}

A: Первый случай уже обсуждался ранее – здесь UB в чистом виде (как правило, это приводит к тому, что не будет вызван деструктор производного класса).

Второй случай выдаст на экран следующее:

Baz::~Baz()

Bar::~Bar()

Foo::~Foo()

Почему? Что произошло? Ведь мы же ясно видим, что деструкторы у данных классов не являются виртуальными. Или это один из частных случаев UB? На самом деле, тут всё вполне законно и должно работать так, как указано выше. Посмотрим в документацию к std::shared_ptr и boost::shared_ptr:

http://en.cppreference.com/w/cpp/memory/shared_ptr/shared_ptr

Proper delete expression corresponding to the supplied type is always selected, this is the reason why the constructors are implemented as templates using a separate parameter Y.

http://www.boost.org/doc/libs/1_51_0/libs/smart_ptr/shared_ptr.htm

This constructor has been changed to a template in order to remember the actual pointer type passed. The destructor will call delete with the same pointer, complete with its original type, even when T does not have a virtual destructor, or is void.

Третий случай выдаст:

Bar::~Bar() Foo::~Foo()

Почему? Ведь мы только что обсуждали поведение std::shared_ptr! Что тут не так? Вспомните поведение тернарного оператора в C++ — он требует, чтобы второй и третий его операнды были одинакового типа. Более того, каст от базового к производному касту без лишних действий не выполнить, в отличие от обратной ситуации:

#include <iostream>

class Base
{
};

class Derived : public Base
{
};

int main()
{
 Base* first;
 Derived* second;

 Base* foo = second; // Ok
 Derived* bar = first; // Error: invalid conversion from 'Base*' to 'Derived*'
}

Наткнуться на данный момент, связанный с тернарным оператором, можно также и в подобном случае:

#include <iostream>
#include <typeinfo>

template <typename T, typename U>
auto foo(bool b, T t, U u)-> decltype(b ? t : u)
{
 return b ? t : u;
}

int main()
{
 auto _1 = foo(true, 0, 'c');
 std::cout << typeid(_1).name() << '\n';
 auto _2 = foo(false, 0, 'c');
 std::cout << typeid(_2).name() << '\n';
}

Переменные _1 и _2 будут одного и того же типа – int.

Именно поэтому Baz в данном случае будет приведён к Bar.

4, 5 и 6 случаи ничем не отличаются от первого – здесь UB. Надо помнить, что поведение std::shared_ptr отличается от остальных умных указателей.

43. Зачем может понадобиться писать так

#define DO_JOIN(FOO, BAR) DO_JOIN1(FOO, BAR)
#define DO_JOIN1(FOO, BAR) FOO##BAR

вместо

#define DO_JOIN(FOO, BAR) FOO##BAR

A: Потому что препроцессор отработает конкатенацию не так, как того ожидал программист, в том случае, если в качестве аргумента(-ов) мы передадим в макрос DO_JOIN другой макрос:

#include <iostream>

#define DO_JOIN(FOO, BAR) DO_JOIN1(FOO, BAR)
#define DO_JOIN1(FOO, BAR) FOO##BAR

#define MY_MACRO 5

int main()
{
 std::cout << DO_JOIN(1, MY_MACRO) << '\n';
}

Output:

15

#include <iostream>

#define DO_JOIN(FOO, BAR) FOO##BAR

#define MY_MACRO 5

int main()
{
 std::cout << DO_JOIN(1, MY_MACRO) << '\n';
}

error: unable to find numeric literal operator 'operator"" MY_MACRO'

Получается, макрос MY_MACRO не успел раскрыться, в результате чего была попытка провести конкатенацию с 1 и MY_MACRO, что, разумеется, привело к ошибке.

ISO/IEC 14882:2011

16.3.1 Argument substitution [cpp.subst]

1 After the arguments for the invocation of a function-like macro have been identified, argument substitution takes place. A parameter in the replacement list, unless preceded by a # or ## preprocessing token or followed by a ## preprocessing token (see below), is replaced by the corresponding argument after all macros contained therein have been expanded. Before being substituted, each argument’s preprocessing tokens are completely macro replaced as if they formed the rest of the preprocessing file; no other preprocessing tokens are available.

44. Что попадёт в stdout в результате выполнения след. кода?

#include <iostream>
#include <stdexcept>

struct Foo
{
 Foo() { std::cout << "Foo::Foo()" << std::endl; }
 ~Foo () { std::cout << "Foo::~Foo()" << std::endl; }
};

void foo()
{
 Foo bar;
 throw std::runtime_error("Error");
}

int main ()
{
 foo();
}

A: Зависит от реализации.

// 1

Foo::Foo()

// 2

Foo::Foo() Foo::~Foo()

ISO/IEC 14882:2011

15.3 Handling an exception [except.handle]

9 If no matching handler is found, the function std::terminate() is called; whether or not the stack is unwound before this call to std::terminate() is implementation-defined (15.5.1).

Например, в документации к gcc сказано, что раскрутки стека не произойдёт:

The stack is not unwound before std::terminate is called.

Сборник выкладывается на бесплатной основе, желающим помочь каким угодно образом буду безумно признателен и благодарен. По любым вопросам, рекомендациям и пожеланиям Вы можете обращаться на мой электронный ящик nikita.trophimov@gmail.com. Буду рад услышать абсолютно любое мнение по данному поводу.

В книге ещё много чего можно и даже нужно дорабатывать. Обещаю, что если сообщество проявит хоть какой-то интерес к данному проекту, я продолжу развивать его согласно Вашим предпочтениям и пожеланиям, дополнять новыми задачками и исправлять ошибки. У меня есть много мыслей по поводу улучшения «C and C++ Dark Corners» — среди них добавление тематических разделов, workaround'ы для различных компиляторов и т.д. Главное, чтобы этот интерес был не только с моей стороны.

Жду Ваших положительных и отрицательных отзывов, рекомендаций и, конечно, новых задачек.

Внимательно ознакомьтесь с тем, что указано во «введении», и приятного чтения!

 ,

NikitaTrophimov
()

Говнокод ли?

Форум — Development

Что-то мне посказывает, что я тут наговнокодил. Слишком много раз проверяю imageXX [!=]= SML_NOTASSIGNED. Как сократить?

int SmlWindowIconSet(int index, int image16, int image32)
{

    if ((warehouse.win.count <= index) ||
        (warehouse.win.alive[index]) == SML_DEAD)
    {
        return SML_ERR_BADWINDOW;
    }

    if ((image16  == SML_NOTASSIGNED) &&
        (image32  == SML_NOTASSIGNED))
        return SML_ERR_BADIMAGE;

    if ((image16 != SML_NOTASSIGNED) &&
        ((warehouse.img.count <= image16) ||
         (warehouse.img.alive[image16] == SML_DEAD) ||
        (warehouse.img.ptr[image16]->width  != 16) ||
        (warehouse.img.ptr[image16]->height != 16)))
    {
        return SML_ERR_BADIMAGE;
    }

    if ((image32 != SML_NOTASSIGNED) &&
        ((warehouse.img.count <= image32) ||
         (warehouse.img.alive[image32] == SML_DEAD) ||
        (warehouse.img.ptr[image32]->width  != 32) ||
        (warehouse.img.ptr[image32]->height != 32)))
    {
        return SML_ERR_BADIMAGE;
    }

    int memsize = 0;

    if (image16  != SML_NOTASSIGNED) memsize += 2 + 16  * 16;
    if (image32  != SML_NOTASSIGNED) memsize += 2 + 32  * 32;

    int * data = malloc(memsize * 4);

    if (data == NULL)
        return SML_ERR_BADALLOC;

    int count = 0;

    if (image16 != SML_NOTASSIGNED)
    {
        data[count++] = 16;
        data[count++] = 16;
        memcpy(data + count, warehouse.img.ptr[image16]->data, 16 * 16 * 4);
        count += 16 * 16;
    }

    if (image32 != SML_NOTASSIGNED)
    {
        data[count++] = 32;
        data[count++] = 32;
        memcpy(data + count, warehouse.img.ptr[image32]->data, 32 * 32 * 4);
        count += 32 * 32;
    }

    int err = XChangeProperty(warehouse.display,
                              warehouse.win.ptr[index].window,
                              warehouse.atoms.wmicon,
                              warehouse.atoms.cardinal,
                              32,  PropModeReplace,
                              (const unsigned char *) data, count);

    SML_CHECKERROR(err);

    return SML_ERR_SUCCESS;
}

 

inn
()

Накидайте языков с необычными концепциями, альтернативам ООП.

Форум — Development

Одна концепция — один язык.

По мотивам Подскажите ЯП. (комментарий) .

Lisp, форт, пролог и хаскелл будем считать уже названными.

next_time
()

доведенный до ума less

Галерея — Скриншоты

давеча выдались свободные минутки, наконец-то доконфигурировал less до приемлемого состояния, когда им можно заменить дефолтный просмотрщик в mc.

что сделано:

  • написан фильтр для LESSOPEN - http://pastebin.com/keGVyn6S
  • выставлены нормальные дефолтные аргументы
    LESSHISTFILE=-
    LESS=-cRSM~#1PMФайл\: ?f%F:stdin. | Строки\: %lt-%lB?L/%L. ?PB(%PB\%) .| Страница\: %d?L/%D.
    
  • добавлены пара кейбиндингов для разных удобств, типа переключения режима переноса строк и показа номеров строк
     \e\e    quit
    ^[[19~  toggle-option N
    ^[OQ    toggle-option S
    
    эта гадость скармливается lesskey
  • чтобы не портилась статусная строка у man был сделан алиас для zsh - alias man='nocorrect LESS= man'
  • ну и напоследок - убрана галка «использовать встроенный просмотр» в mc

внутренний перфекционист жутко протестовал против коряво-обрезанной нижней строки в less, потому его (less, а не внутреннего перфекциониста) пришлось малось пропатчить

--- less-458/command.c.orig	2013-04-04 19:55:05.000000000 +0300
+++ less-458/command.c	2013-11-01 10:40:03.189045787 +0200
@@ -741,14 +741,19 @@
 	if (is_filtering())
 		putstr("& ");
 	if (p == NULL || *p == '\0')
+	{
 		putchr(':');
+		clear_eol();
+	}
 	else
 	{
+		int i;
+		char *ptr;
 		at_enter(AT_STANDOUT);
 		putstr(p);
+		clear_eol();
 		at_exit();
 	}
-	clear_eol();
 }
 
 /*

пока результатом доволен

 

ananas
()

Как искать узкие места (bottleneck)

Форум — Development

Какое то неприличное название у темы получилось, ну да ладно.

Хотел бы спросить совета, как вы профилируете свои программы? Как ищите bottleneck'и? В первую очередь интерестно как это делается для сетевых event driven приложений.

valgring + callgrind, очевидно в этом плане не подходит. Так как он замеряет процессорное время. Т.е. он не позволит определить что у вас два потока постоянно тыкаются в один мютекс и ждут его. Helgrind вообще не понятно как применять если в проекте есть что то кроме стандартного мютекса (даже бустовый с его atomic уже наверно вызовет проблеммы).

Google CPU Profiler, уже лучше, хотя я таки тоже не уверен, что он сможет показать, что кто то уткнулся в мютекс. Я спциально попробывал все свои обработчики в приложении стравить на один mutex под которым еще и sleep происходит. Но в результате профилирования, этого участка вообще нету, а большую часть захвал именно IO хотя стреляю все локально.

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

Большинство статей которые у нашел/прочитал это самые азы использования профайлера. Так же встречаются статью на счет особенностей ошибочного отображения/подсчета данных профайлером.

Я все больше склоняюсь к тому, что профилирование, это как дезасемблирование. Тут нужны годы снаровки что бы понастоящему извлекать из этого пользу, а не просто тыкаться в непонятные циферки и годать, а гдеж тут жопа зарыта.

 ,

Cupper
()

что творят девелоперы

Форум — Talks

Решаю задачку на talentbuddy.co, а там...

Задача: смёрджить два отсортированных масива. Больше двух третей ответов в духе return sorted(a+b).

В задании посчитать корень числа без использования библиотечных функций один чувак как-то пропихнул ответ def sqrt(x): return 4 . Не знаю как у него это получилось. Видимо, поймал момент когда не было дополнительных тестов.

У меня есть смутное подозрение что люди неправильно понимают зачем это всё нужно. Вспомнился анекдот:

Недалёкое будущее. Программист:
-- Компьютер, сделай базу данных.
Исправленная версия:
-- Компьютер, сделай базу данных. Чтобы работала.

 

true_admin
()

Хочу самостоятельно разработать новое PCI-устройство для компьютера: с чего начать?

Форум — Development

Появилась у меня недавно идея-фикс, кратко описанная в заголовке темы. Естественно, знания по теме у меня практически отсутствуют, так что прошу население ЛОР'а подсказать годных книжек по следующим темам:

  • Принципы работы шин и интерфейсов современного компьютера. Конкретно интересующие темы: PCI и PCI-Express.
  • Работа операционных систем с железом. Желателен уклон в сторону Linux.
  • FPGA и разработка под них.

Если что-то упустил - прошу дополнить.

Есть ещё вопрос. Погуглив, я заметил, что в основном логику для FPGA пишут на Verilog'е и VHDL'е. Что из этого выбрать мне? Или не принципиально, что больше понравится?

Deleted
()

Вышла новая плата для разработки с FPGA для проекта OpenRISC

Новости — Hardware and Drivers
Группа Hardware and Drivers

Разработчики проекта OpenRISC анонсировали создание платы для разработки, созданной специально для построения SoC на базе OpenRISC. Плата поддерживает большинство распространённых интерфейсов, имеет малые размеры (80 x 40 мм), проста в использовании и отладке. Разработчики позиционируют её как бюджетное решение для работы с FPGA, нацеленное, в первую очередь, на сообщество. Основная цель этого шага — привлечение к проекту новых пользователей и разработчиков.

( читать дальше... )

>>> Подробности

 , , ,

prozium
()

Новая реализация пакетного фильтра nftables будет добавлена в ядро Linux 3.13

Новости — Ядро Linux
Группа Ядро Linux

В ветку linux-next, на базе которой будет сформировано ядро версии 3.13, добавлена новая реализация подсистемы пакетной фильтрации nftables. Разработка системы ведётся с 2009 года, её целью является замена подсистем iptables, ip6table, arptables и ebtables. Результата разработчики желают добиться путём сокращения количества (и дублей) кода уровня ядра, упрощения взаимодействия ядра и userspace-приложений, а также использования байт-кода для компилирования правил фильтрации и исполнения их в ядре.

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

( читать дальше... )

>>> Подробности

 , , , ,

Lothlorien
()