LINUX.ORG.RU

Сообщения deep-purple

 

Где почитать HOWTO по реализации (circular/ring) буфера?

Форум — Development

Нужно именно про буфер с несколькими «читателями»

Не могу нагуглить. Попадается все время только где читает один поток. А мне нужно чтобы читали несколько.

Сам я додумываю только что должно как-то определяться по последнему, самому медленному читателю. Тогда не только пишущий поток должен ориентироваться на позицию чтения самого медленного, но и остальные читатели должны «не торопитьтся». Верно ли?

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

 ,

deep-purple
()

Посоветуйте либу для парсинга/генерации JSON

Форум — Development

Посоветуйте какую-нибудь небольшую либу для парсинга/генерации JSON. Не бросайтесь ссылками просто так, нагуглить я и сам могу - либ куча. Хотелось бы увидеть рекомендации.

Покажите какую сами юзали (или даже написали свою). Почему выбрали именно её? Как она себя показала?

 ,

deep-purple
()

Теперь про сокеты

Форум — Development

Собсно:

Получаю дескриптор сокета (socket(AF_INET...), биндю его, листю его. Подключаюсь телнетом, отправляю текст, сервер его получает, все чики-пуки.

Но, после того как вырубаю сервер через Ctrl+C, при повторном его запуске он фейлится на бинде. А через несколько запусков «отходит». В данный момент запилил с goto retry_connect; с sleep(3); но этж кастыль еще какой.

Да, я уже загуглил. Есть SO_REUSEADDR но про него говорят нехорошее вот тут.

У меня таки вопрос - а как эту «проблему» решали вы?

 , , ,

deep-purple
()

Хабровброс?

Форум — Talks

 ,

deep-purple
()

Запутался в указателях на указатели

Форум — Development

0) Выходные, чо ))

1) Возможно то, чего я хочу уже есть, а я и не знаю. Поэтому опишу задачу.

Хочу ф-цию которая:

char *x;
fn(&x, "abcde", 2);
printf("X: %s\n", x); // X: ab

2) Даже если такая есть, всеравно хочу понять как оно работает. Поэтому пишу свою.

void
fn(char **dst, const char *src, const size_t len)
{
    size_t src_len = strlen(src);
    size_t dst_len = (len >= src_len ? src_len : len);
    *dst = (char *) malloc(dst_len + 1);
    // часть закомментирована, падает на **dst++
    while (dst_len-- /*&& (**dst++ = *src++)*/);
    // так работает
    *dst = "ljhg";
    // еще ж в конец *dst надо '\0' воткнуть
}

ЧЯДНТ?

 ,

deep-purple
()

Не понял прикола fopen()

Форум — Development
#include <stdlib.h>
#include <errno.h>
#include <stdio.h>


int
main(int argc, char **argv)
{
    FILE *fp1 = NULL;
    FILE *fp2 = NULL;

    char *abs1 = "/test.bin";
    char *abs2 = "/home/test.bin";

    fp1 = fopen(abs1, "r");
    if (!fp1) {
        printf("Cannot open file %s (%d)\n", abs1, fp1);
    } else {
        printf("Success open file %s (%d)\n", abs1, fp1);
    }

    fp2 = fopen(abs2, "r");
    if (!fp2) {
        printf("Cannot open file %s (%d)\n", abs2, fp2);
    } else {
        printf("Success open file %s (%d)\n", abs2, fp2);
    }

    return 0;
}

Файлов нет, ни того ни другого. При указании «abs1» отрабатывает Success, вот выхлоп:

Success open file /test.bin (8671248)
Cannot open file /home/test.bin (0)

Чо за прикол? ЧЯДНТ?

 

deep-purple
()

Какие сигналы перехватывать обязательно?

Форум — Development

Пилю дальше свое поделие.

Теперь задача - перехватывать сигналы, т.к. надо завершится мягко, что-то сохранить, а не падать трупом.

// SIGKILL - Не перехватывается, не игнорится, не обрабатывается, сразу труп
// SIGSTOP - Не перехватывается, не игнорится, не обрабатывается, просто стоп, freeze чтоли?
// SIGTSTP - Это rerise(?) от VSUSP (Ctrl+Z) может быть блокирован, перехвачен, игнорирован
// SIGCONT - Продолжить после стопа, но нет смысла вешать обработчик

// SIGTERM - Может быть блокирован, перехвачен, игнорирован
// SIGINT  - Это Ctrl+C
// SIGQUIT - Ctrl+\ какой-то дамп, я так понял отладочный коредамп

// SIGHUP  - Отвалился терминал? а как потом вернуться в терминал если он отвалился?

// SIGTTOU - Попытка писать в терминал из фона

// SIGPIPE - Брокнутые FIFO или отвалился сокет
// SIGLOST - Потеряно соединение с сервером(?) с любым ли?

// SIGXCPU - Превышен лимит процессорного времени
// SIGXFSZ - Превышен лимит величины размера файла (если к файлу то м.б. ограничение для fat32, а как насчет дисковой квоты?)

// SIGINFO - Кагдила

Какие еще сигналы надо учесть?

 , ,

deep-purple
()

Кастомные потоки

Форум — Development

Читаю про кастомные потоки.

Во первых смущает:

Portability Note: The facilities described in this section are specific to GNU. Other systems or C implementations might or might not provide equivalent functionality.

Во вторых смущает - а правильного ли я хочу?

А хочу я сделать обертку, которая и выведет в stdout/stderr, и запишет в лог, то что ей передали. Вообще даже три типа хочу кастомных - xx_info, xx_err, xx_debug

Насколько это вменяемо? Реализуемо? Если не вменяемо или не реализуемо, то как правильно? А можно на пальцах? Ато я не особо петрю.

 , , ,

deep-purple
()

Чем занимаешь своих детей, Лоровец?

Форум — Talks

Собственно, вопрос в заголовке. Ребенку 2 года.

Играем в NES-эмулятор (ну, пытаемся с переменным успехом), читаем книги (нормально прёт)..

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

А чем еще интересным занять чадо в домашних условиях?

 , ,

deep-purple
()

Что насчет dwm? Кто юзал/юзает?

Форум — Desktop

Хочу запробовать чего-то такого http://dwm.suckless.org/

Кто это дело уже щупал? Поделитесь впечатлениями. Минусы, плюсы, удобство?

 , ,

deep-purple
()

xpath выбрать ближайших потомков

Форум — General

Есть XML вида:

<root>
    <x>
        <xa></xa>
        <x>
            <xa></xa>
            <xb></xb>
        </x>
        <xb></xb>
    </x>
    <x>
        <xa></xa>
        <xb></xb>
    </x>
</root>
Так:
//x
естессно выбирает всё вне зависимости от вложенности. Есть ли хитрый expression в xpath (с каким-нибудь отрицанием?) чтобы выбрать только те «tagName» которые не являются потомками таких же «tagName»?

 ,

deep-purple
()

Как правильно запилить звуковой буфер с кроссфейдером?

Форум — Development

Мои размышления:

Хочу запилить штуковину, которая будет держать в буфере некоторое кол-во RAWPCM фреймов. Для простоты будем считать что у нас mono.

К примеру внутренняя частота даунмикса будет 44100, тогда если длина кроссфейдера равна 5 секундам, значит надо хранить 44100*5, причем для обоих входных сигналов. Ведь в тот момент когда трек А заканчивается, мы должны начать его заглушать, а трек Б поднимать в громкости. Тестово я уже прогонял этот прикол, волны суммирует, все ок.

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

Для нормальной работы мне нужно забить данными как минимум CrossfadeTime*2 времени. Почему? Потому, что допустим трек Б за 5 сек поднялся в громкости на 100% и где-то далее будет флажок «вот на таком то фрейме пора делай fadeout т.к. трек заканчивается». В этот момент в буфере А я уже типа положил данные для fadein.

А вот если на вход подается мп3, тем более в VBR то хрен я подсчитаю его длину, распакованные данные вообще возвращаются как попало, за одну отправку пачки фреймов в декодер на его выходе может быть вообще 0 (НОЛЬ!) PCM-фреймов. Тут конечно каждый может сказать - читай заголовки. Я их читаю. А ты можешь на 100% доверять инфе в заголовках?

Как быть? Что делать? Есть мысли?

 , ,

deep-purple
()

Присоветуйте реализацию для бекенда

Форум — Web-development

Появилась необходимость запилить систему с подписчиками на события/сообщения. Но перед тем как что-то начинать изучать и расковыривать, хотел поинтересоваться у лоровцев, кто какой опыт имеет в этом деле, какие решения использовались, и почему. Какие плюсы и минусы.

Варианты о которых я немного в курсе: nginx push module и realplexor. Тем не менее вопрос глубоко не изучал. Т.е. полезной будет любая информация от вас.

Если немного детальнее - рассылкой будет заниматься только сервер. На клиенте, либо аякс, либо вебсокеты. Необходима возможность рассылки данных как всем листенерам, так и конкретным. Листенеров будет около 1-2 тыс. Сообщения будут вида: «Уважаемые коллеги, пора на обед!» или «Василий Иванович, занесите к директору договор на подпись».

В любом случае - было бы удобно получать не тупо строку, а JSON, т.к. хрен его знает что еще вдруг понадобиться передавать.

 , ,

deep-purple
()

За что не любят пхпшников

Форум — Talks

Открываю сегодня один проект. Перехожу в мастер ветку, делаю гит пулл. И вижу такую картину в одном из файлов:

            $id = 0;
            for(; $id < 1000000; $id++) {
                if($_GET['key'] == md5($id . 'security')) {
                    break;
                }
            }
            if($id) {
                $file = query("select * from files where id='" . $id . "'");
                header("Content-type: " . $file['type']);
                header('Content-Length: ' . $file['size']);
                header('Content-Disposition: attachment; filename="' . $file['name'] . '"');

Для тех кто не понял что тут происходит: получаем значение ключа из гета и в цикле перебираем варианты от 0 до 1 млн, если присланный ключ совпал с хешем, тогда «бряк» :)

Не-не, а дальше то - if($id) т.е. если $id больше нуля, что будет однозначно, т.к. хотябы одна итерация но будет - лезем в базу и отдаем файл.

А цикл - видимо сделана задержка а-ля comet, мол, ты прислал какашку - на тебе мильён итераций в цикле!

 

deep-purple
()

Решил поковырять генту, скока ей места то надо?

Форум — Linux-install

Вобщем скачал я лайф-сиди минимал, запилил разделы, примонтировался, чрутнулся, распаковал третий стейдж, кароч система взлетела. Ах да, все это в виртуалбоксе. Дал ей 256м рамы и 4гб диска.

И чота я не понял, получаю дерево (emerge-webrsync), оно успешно прилетает, и... При распаковке фейлится ругаясь что нет места на диске.

Ей чо, 4гб мало на дерево? А еси я еще компилять начну? Чо эт за минимал такой? Доки сижу читаю. Чую есть вариант не тащить к себе весь мир. Подскажете?

 ,

deep-purple
()

Создать уникальный строковый ключ-идентификатор для DOM-элемента

Форум — Web-development

Предположим есть:

var itemsData = {};
function addItemData(item, data) {
    var iKey = ???;
    if (!itemsData[iKey]) {
        itemsData[iKey] = data;
    }
}
var elem = document.getElementById('my-elem');
addItemData(elem, [1,2,3]);
Откуда кроссбраузерно взять уникальный ключ так, чтобы если ниже по коду передается DOM-элемент, данные для которого уже есть в itemsData, то повторно их уже не добавлять? Не засирая при этом сами DOM-элементы левыми свойствами.

 , ,

deep-purple
()

Пыхопроблема

Форум — Web-development

Есть такой тестовый код:

class a {

    protected $data = array();

    public function set($key, $value) {

        if (!array_key_exists($key, $this->data)) {
            $this->data[$key] = $value;
        }

    }

}


class b extends a {}
class c extends a {}


$b1 = new b();
$b2 = new b();
$b3 = new b();
$c1 = new c();
$c2 = new c();


$b1->set('x', 'b1x');
$b2->set('x', 'b2x');
$b3->set('x', 'b3x');
$c1->set('y', 'c1y');
$c2->set('y', 'c2y');

Пример сильно упрощен, на деле потомки тащат кучу зависимостей (всякие «статичные» данные) которые одинаковые потомки же и используют одинаково. Было бы хорошо эти данные сложить в общее место, попутно проверяя, если такой же потомок (в примере проверяется тупо по ключу) уже насрал своих данных в это общее место, то повторно не вызывать тучу говна, которое пойдет куда-то и будет получать эти данные заново.

В идеальном случае требуется такое поведение, чтобы эта $this->data была для всех классов-потомков глобальной.

Педалить еще одну сущность которая будет все это дело хранить? Блин, костыль же. А завтра мне понадобится аналогичное поведение в другом месте. Опять педалить дополнительную сущность?

 , , ,

deep-purple
()

Денискины мемуары

Форум — Talks

Люди, подскажете где почитать что-то вроде автобиографии Денниса Ритчи? Конкретно - как он допетрил написать сю, о чем думал, какие предположения строил. Не в том плане что, мол, взял, поставил список задач и запилил. И не в том что перед тем как выйти издома он обязательно проверял выключил ли утюг. А в плане каких-то личных, не сказать что переживаний, но размышлений, разговоров с коллегами, обсуждений. Т.е. важны психологический портрет и атмосфера того времени, нежели какие-то сухие факты.

 , ,

deep-purple
()

Обновил ненужно до 4.3

Форум — General

Ага, вобщем Debian 6 на борту. Скачал dynamic-версию этого некрософачного поделия, воткнул ему нужные либы (libphonon.so, libQtWebKit.so, libQtXmlPatterns.so) - взлетело, НО!

Запуск выглядит так:

$ LD_LIBRARY_PATH=/home/deep/Bin/skype-4.3.0.37/ /home/deep/Bin/skype-4.3.0.37/skype
Без установки переменной LD_LIBRARY_PATH оно не взлетает, прописать её в .bashrc не помогло, оно хочет устанавливать непосредственно при запуске. И никак не могу отвязать процесс от терминала. Пробовал перенаправления, nohup, daemon и их комбинации - эта тварь не отвязывается от терминала. Как отвязать? Может скрипт какой запилить?

 , , ,

deep-purple
()

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

Форум — General

Причина:

Работаю с канвасами. Необходимо класть в канвас картинки с чужих доменов, в частности - инстаграм. Однако, по причине политики безопасности в ФФ и хроме (в других наверное тоже) этого делать нельзя. Почитать об ентом можно тут. Собственно инстаграм не отправляет таких спецефичных заголовков.

Следствие:

Т.к. домены там всегда разные (статика разбросана), то средствами своего сервера, например проксировать через nginx, насколько я знаю - будет невозможно. А дергать курлом/вгетом полученную через АПИ сотню картинок - расточительно, к тому же это еще нужно дернуть как внешнюю прогу, в цикле... Буээээ..

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

Посоветуйте самый легкий и простой в настройке прокси. Есть ли другие варианты решения задачи?

 , ,

deep-purple
()

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