LINUX.ORG.RU

Сообщения redbaron

 

Какой у Perl аналог питоновского iter(callable, sentinel)?

Форум — Development

Неожиданно для себя оказался посреди перловского болота. Взываю к коллективному разуму ибо сам я слаб в гугл-фу.

Есть итератор, который предполагается использовать так:

while (my $item = $iter->()) {...}

Хочется собрать все значения из него в массив и передать его map (ну или напрямую как-нибудь хитро вызвать map чтобы оно само подергало итератор). Сейчас я делаю так:

my @arr
while (my $item = $iter->()) push @arr, $item

map sub {} @arr;

Но может быть можно короче/красивее это записать?

 ,

redbaron
()

как измерить эффект от изменений

Форум — Development

Хотел бы проконсультироваться с форумчанами о том, кто как меряет эффект от оптимизаций.

Дано: Логи с указанием времени ответа бэкенда. Произведена некоторая оптимизация от которой это время зависит (в моем случае это была база данных).

Требуется: Каким-то образом подсчитать эффект произведенного изменено. Иными словам и надо отобразить «стало быстрее» в какой-либо осязаемой форме.

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

Но:

1. Такой подход не масштабируется на пару тысяч страниц

2. Не все страницы одинаково часто используются. Иными словами ускорение на 100 мс страницы просматриваемой миллион раз в день это лучше чем ускорение на 10 секунд страницы с 10 посещениями.

3. У бэкенда множество зависимостей, посему некоторые страницы показывают слишком большой разброс в результатах, чтобы было на глазок понятно стало лучше или нет конкретно для нее.

Интуитивно понятно, что тут надо применять методы анализа численных рядов _для каждой страниицы_ в отдельности. Но какие и как? Возможно надо анализировать два ряда «до» и «после», вычислять какие-то ветрики для них и сравнивая их находить те страницы на которых виден эффект. Но какие? Просто среднее за день сработало неплохо для «стабильных» страниц, но ничего не показало для более шумных.

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

 

redbaron
()

(пере-)синхронизация тредов с повторением порядка

Форум — Development

Господа, подскажите, существует ли в природе примитив синхронизации, паттерн или волшебный алгоритм, что бы засинхронизировать треды один раз, затем разойтись каждый сам по себе, а затем сойтись снова и закоммитить результат в том же порядке, в котором была первая синхронизация?

Т.е. для каждого треда хочется такого:

while(true) {
   int id = get_seq_id();  # threadsafe, id монотонно возрастают
   compute(); # runs in parallel
   commit(id); # threadsafe, но в порядке возрастания id
   cleanup()
}

Пока в голову пришло только, что можно было в `get_seq_id` возвращать promise и помещать future от него в очередь на другом конце которой сидел бы отдельный поток, который и делал бы commit. Вроде бы должно работать, но надо заморачиваться с возвращением результата коммита обратно в каждый тред, это выглядит переусложненным, да и дергать контексты просто чтобы записать в файл в нужном порядке (commit именно это и делает) не выглядит как нечто хорошее.

В общем, можно ли обойтись без дополнительных тредов и какое слово гуглить для этого?

Предпочтительно Java/Scala, но не так важно, т.к. если найдется решение в других языках, то идля Java/Scala что-то подобное тоже будет.

Спасибо.

 ,

redbaron
()

Значительный CPU idle time при высоком LA

Форум — Admin

Столкнулся с интересным поведением, имеется сервер на котором крутится множество java процессов, 2 CPU 10 ядер в каждом + HyperThreading итого 40 ядер видно в Linux

Load average 75-100, при этом local io практически отсутствует, и никто не застрял в uninterruptible sleep, при всем при этом довольно значительный idle time в vmstat.

Проверим, что количество runnable потоков примерно соответствует load average:

$ ps  Hh -eo stat,pid,command |egrep '^R' |wc -l
109

В разные моменты выдает разные значения понятное дело, но всегда в интервале 60-120

вывод mpstat -P ALL 1 (поймал момент, когда idle минимальный, обычно 10-13):

12:20:23     CPU    %usr   %nice    %sys %iowait    %irq   %soft  %steal  %guest   %idle
12:20:24     all   89.38    0.00    2.12    0.00    0.95    0.00    0.00    0.00    7.55
12:20:24       0   78.79    0.00    4.04    0.00   10.10    0.00    0.00    0.00    7.07
12:20:24       1   98.99    0.00    0.00    0.00    0.00    0.00    0.00    0.00    1.01
12:20:24       2   88.12    0.00    1.98    0.00    0.99    0.00    0.00    0.00    8.91
12:20:24       3   94.00    0.00    2.00    0.00    0.00    0.00    0.00    0.00    4.00
12:20:24       4   89.90    0.00    1.01    0.00    0.00    0.00    0.00    0.00    9.09
12:20:24       5   91.09    0.00    3.96    0.00    0.99    0.00    0.00    0.00    3.96
12:20:24       6   99.01    0.00    0.99    0.00    0.00    0.00    0.00    0.00    0.00
12:20:24       7   97.03    0.00    0.99    0.00    0.00    0.00    0.00    0.00    1.98
12:20:24       8   98.02    0.00    0.99    0.00    0.99    0.00    0.00    0.00    0.00
12:20:24       9   97.03    0.00    0.99    0.00    0.00    0.00    0.00    0.00    1.98
12:20:24      10   90.00    0.00    1.00    0.00    0.00    0.00    0.00    0.00    9.00
12:20:24      11   94.00    0.00    3.00    0.00    0.00    0.00    0.00    0.00    3.00
12:20:24      12   86.00    0.00    2.00    0.00    0.00    0.00    0.00    0.00   12.00
12:20:24      13   97.00    0.00    1.00    0.00    0.00    0.00    0.00    0.00    2.00
12:20:24      14  100.00    0.00    0.00    0.00    0.00    0.00    0.00    0.00    0.00
12:20:24      15   95.96    0.00    1.01    0.00    0.00    0.00    0.00    0.00    3.03
12:20:24      16   98.00    0.00    2.00    0.00    0.00    0.00    0.00    0.00    0.00
12:20:24      17   91.92    0.00    5.05    0.00    0.00    0.00    0.00    0.00    3.03
12:20:24      18   94.00    0.00    1.00    0.00    0.00    0.00    0.00    0.00    5.00
12:20:24      19   97.00    0.00    2.00    0.00    0.00    0.00    0.00    0.00    1.00
12:20:24      20   83.00    0.00    3.00    0.00   10.00    0.00    0.00    0.00    4.00
12:20:24      21   82.83    0.00    4.04    0.00    7.07    0.00    0.00    0.00    6.06
12:20:24      22   98.99    0.00    0.00    0.00    0.00    0.00    0.00    0.00    1.01
12:20:24      23   88.00    0.00    2.00    0.00    9.00    0.00    0.00    0.00    1.00
12:20:24      24   94.00    0.00    4.00    0.00    0.00    0.00    0.00    0.00    2.00
12:20:24      25   77.23    0.00    2.97    0.00    0.00    0.00    0.00    0.00   19.80
12:20:24      26   77.23    0.00    3.96    0.00    0.00    0.00    0.00    0.00   18.81
12:20:24      27   63.00    0.00    1.00    0.00    0.00    0.00    0.00    0.00   36.00
12:20:24      28   91.92    0.00    1.01    0.00    0.00    0.00    0.00    0.00    7.07
12:20:24      29   83.00    0.00    2.00    0.00    0.00    0.00    0.00    0.00   15.00
12:20:24      30   84.85    0.00    1.01    0.00    0.00    0.00    0.00    0.00   14.14
12:20:24      31   95.00    0.00    3.00    0.00    0.00    0.00    0.00    0.00    2.00
12:20:24      32   88.00    0.00    3.00    0.00    0.00    0.00    0.00    0.00    9.00
12:20:24      33   97.98    0.00    2.02    0.00    0.00    0.00    0.00    0.00    0.00
12:20:24      34   76.00    0.00    2.00    0.00    0.00    0.00    0.00    0.00   22.00
12:20:24      35   83.17    0.00    2.97    0.00    0.00    0.00    0.00    0.00   13.86
12:20:24      36   73.00    0.00    3.00    0.00    1.00    0.00    0.00    0.00   23.00
12:20:24      37   86.00    0.00    5.00    0.00    0.00    0.00    0.00    0.00    9.00
12:20:24      38   83.00    0.00    1.00    0.00    0.00    0.00    0.00    0.00   16.00
12:20:24      39   92.00    0.00    4.00    0.00    0.00    0.00    0.00    0.00    4.0

что это может быть? грешу на scheduler, но непонятно как его крутить, чтобы он успевал занимать CPU под задачи. Не очень приято терять 10% CPU на задаче, которая как раз очень жадная до этого CPU.

 , ,

redbaron
()

shell по-новому - Xiki

Форум — Talks

Ребята из Xiki собирают деньги на кикстартере, я закинул, может кто-то еще присоедениться.

Xiki это переосмысление, каким мог бы быть шелл. Написано на ненужном Руби, что печалит, но задумка здравая.

3 минутное промо видео: https://www.youtube.com/watch?v=bUR_eUVcABg#t=57

redbaron
()

Форматируем код своим любимым стилем в 80 колонок

Форум — Development

Хочется посмотреть, кто как код форматирует. Накидайте пожалуйста следующий код, отформатированный по вашему вкусу:

template<typename Begin, typename End>
struct copy_seq_loop {
    template<class foldF, class resT, class sessT>
    static inline void
    call(resT& res, const sessT& sess) {
	copy_impl<typename Begin::type, foldF>(res, sess, mpl::false_());
	copy_seq_loop<typename mpl::next<Begin>::type, End
		      >::template call<foldF>(res, sess);
    }
};

 , ,

redbaron
()

Как смержить дублирующийся код? (решение: использовать gold)

Форум — Development

Заглянул тут в вывод «objdump -C» и немало удивился: оказалось, что для различных параметров шаблона генерируются отдельные копии кода, даже если сам код абсолютно идентичный.

Довольно искусственный пример кода, демонстрирующий проблему:

#include <cstddef>
#include <ctime>

template<int I, class T>
struct V {
	typedef T value_type;
};


template<class T>
struct func {
void __attribute__((noinline))
operator()(typename T::value_type& v) { v+= 1; } 
};


int main() {
	int i = time(NULL);
	func< V<10,int> >()(i);
	func< V<20,int> >()(i);
	return i;
}

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

 ,

redbaron
()

как поднять ограничение на 50 элементов в fusion vector?

Форум — Development

Может быть кто-нибудь сталкивался? Скармливаю довольно длинную MPL sequence и хочу получить fusion vector, но вываливается с

fusion/container/vector/convert.hpp:26:13: error: invalid use of incomplete type ‘struct boost::fusion::detail::as_vector<55>’

Там в заголовках вакханалия из Boost.Preprocessing макросов с которой пытаюсь разобраться, но пока безуспешно.

Пробовал и -DFUSION_MAX_VECTOR_SIZE=100 и -DBOOST_FUSION_DONT_USE_PREPROCESSED_FILES в разных комбинациях, все одно.

 boost.fusion,

redbaron
()

Каким образом оно возвращает lvalue?

Форум — Development
template<class T>
struct V {
  V() = default;
  V(const T& v): val(v) {};
  T val;
};

struct A {
  V<int> a;
  int b;
};

V<int> wtf(const A& c) {
  return c.a;
}

int return_rvalue(const A& c) {
  return c.b;
}

int main() {
        A c;
        wtf(c) = 0xbabe;  //< Почему не ругается здесь?
        return_rvalue(c) = 0xdead;  //< Здесь ругается, как и положено 
}

Отловил неожиданную для себя проблему в коде, когда функция возвращается значение по значению, но каким-то образом присвоение этому временному объекту отрабатывает без ошибок, даже без варнингов. Как это вообще возможно? Ниже функция return_rvalue не компилируется, как ей и положено,я ожидал схожего поведения от wtf, но оказался неправ и был жестко наказан: присвоенное значение просто съедалось и исчезало в бездне небытия.

Думал, что проблема из-за implicit конструктора принимающего оборачиваемый тип, убрал его, заменил на перегруженный operator=, все осталось по прежнему.

Прошу помощи зала, спасибо.

 , ,

redbaron
()

Что б почитать для начинающего нач. отдела?

Форум — Talks

Впервые предстоит рулить отделом сисадминов, всвязи с чем ищутся маны и howto :) Что почитать в общем? Сисадминский опыт есть в достаточном количестве, а вот управленческого немного )

redbaron
()

Анализ и сопоставление записей в логах

Форум — Development

Добрый день!

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

Задачи что-то вроде «если в логе 1 появилась запись X, в логе 2 появилась Y, а в логе 3 до записи Z1 не появлялас Z2, то делаем вывод что случилось нечто и генерируем событие»

redbaron
()

[СПб][yota] дайте поносИть yota на пару недель

Форум — Talks

Привет всем! Приехал в Питер на пару недель, снял квартиру, купил USB свисток от МТС и вернулся назад в конец девяностых - нестабильные 5-10 кб/сек , обрывы и прочие радости :)

Комплект yota выглядит как серебряная пуля, только стоит непомерно. Может кто-нибудь даст yota модемчик, а я интернет оплачу на месяц из которых попользуюсь до 22 ноября.

Если вдруг кто заинтересуется напишите на ivanov.maxim@gmail.com =)

 

redbaron
()

[питер][аренда] квартира на 2 недели

Форум — Talks

Добрый день! Может кто подскажет пути, а может и предложит варианты как снять квартиру в Питере с 6-8 Ноября (дата заезда гибкая) по 22? Жить будем вдвоем с девушкой, решили вот посетить культурную столицу России (и удивиться безкультурию).

Посуточные квартиры стоят заоблачно и скидок давать нехотят :) Хотелось бы уложиться в 15-17 тыс.

Если вдруг мне несказанно повезло и кто-то знает возможные варианты то просьба скинуть на ivanov.maxim@gmail.com контакты.

 

redbaron
()

Embed online store

Форум — Web-development

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

Существуют ли какие-нибудь сторонние сервисы, куда б загрузил свой альбом, встроил виджет в сайт и отстегиваешь небольшую комиссию с продаж?

redbaron
()

[Qt] как пропорционально вписать виджет в другой виджет?

Форум — Development

Есть виджет, у него понятное есть родной sizeHint(). Если мы его помещаем в другой виджет (я юзаю VBoxLayout с одним элементом внутри), то есть ли какой нибудь родной способ, что б пропорционально (согласно sizeHint())вписать дите в родителя? Или городить костыли с resizeEvent?

 

redbaron
()

LGA1156 vs AM3 - какой сокет долговечнее?

Форум — Talks

Задумал брать себе новый комп. По производительности i5-760 получше, при равной цене Phenom X6 ему сливает в игрушках, а компилять что-нибудь массовое мне не так часто надо. Материнки стоит примерно одинакого в районе 130 долларов.

В то же время X4 подешевле, а производительность вроде устраивает.

В итоге выбирать похоже приходится по долговечности: какой дольше проживет? В какой можно будет супер мега проц через годика полтора два?

redbaron
()

Сокеты и FD

Форум — Development

Открытие сетевого сокета уменьшает ли остаток свободных FD?

redbaron
()

Честная неподконтрольная электронная система выборов

Форум — Talks

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

Возможно ли это впринципе? Можно ли придумать такую систему в которой даже взятка мега главному админу следящему за всем и вся ничего не сможет изменить?

redbaron
()

[Qt] Послать искусственный QMouseEvent?

Форум — Development

Демо код тут: http://gist.github.com/517445

Пытаюсь отправить событие типа «левые клик» виджету, а он его не принимает =( Настоящей мышкой работает как надо.

Вот код моего виджета, который просто в себе содержит QCalendarWidget и QPushButton.

#include "calendar.h"

Calendar::Calendar(QWidget *parent) :
    QWidget(parent)
{
    qCal = new QCalendarWidget;
    qBtn = new QPushButton(tr("Press me"));

    connect(qBtn, SIGNAL(clicked()), this, SLOT(testCustomClick()));

    QVBoxLayout *layout = new QVBoxLayout;
    layout->addWidget(qCal);
    layout->addWidget(qBtn);

    setLayout(layout);
    qDebug() << "Date:" << QDate::currentDate();
}

Calendar::~Calendar()
{
}

void Calendar::testCustomClick()
{
    QMouseEvent qm2(QEvent::MouseButtonPress, QPoint(qCal->width()/2,qCal->height()/2), Qt::LeftButton , Qt::LeftButton, Qt::NoModifier);
    QApplication::sendEvent(qCal, &qm2);
}


void Calendar::mousePressEvent(QMouseEvent* ev)
{
    qDebug() << "mouse event: " << ev << "x=" << ev->x() <<" y=" << ev->y();
    QWidget::mousePressEvent(ev);
}

При нажатии на кнопку пытаюсь сгенерировать клик в центре виджета-календаря, но вместо того что б выбралась там дата, событие все-равно приходит в мой виджет (срабатывает mousePressEvent, видно по выводу qDebug() ) при этом если настоящей мышкой ткнуть в календарь, то Calender::mousePressEvent не срабатывает, что логично, т.к. событие обрабатывается календарем и наверх не посылается.

Посылаю событие через QApplication::sendEvent прямо на виджет календаря, но no luck =( Может у кого идеи будут?

 

redbaron
()

LOR API

Форум — Linux-org-ru

Всем хай! Никто случайно на коленке потихоньку не пилит LOR API? REST подобное было бы идеальным конечно.

redbaron
()

RSS подписка на новые темы