LINUX.ORG.RU

Сообщения kulti

 

Как лучше сделать демо-вход и «отдельную таблицу» для каждого пользователя

Прошу помощи в организации работы с базой данных по двум вопросам.

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

Лично мне видится такой вариант: после нажатия «Демо-вход» создается новый пользователь и для него генерируется рыба. Когда сессия завершается, демо-пользователь удаляется(и все следы его деятельности тоже через удаление зависимостей).

2. «Отдельная таблица» для каждого пользователя Есть, к примеру, таблица тэгов, но у каждого пользователя должен быть свой собственный набор тэгов. Вижу два варианта решения:

  • Можно создать дополнительную таблицу user_id <-> tag_id, проиндексированную по user_id.
  • Или же создавать каждому пользователю отдельную таблицу(звучит странно, но мало ли, вдруг так делают).

Где находится граница применимости первого варианта? Как еще можно решить эту задачу?

 

kulti
()

Поделитесь опытом тестирования многопоточных приложений

Главный вопрос: можно ли сделать порядок выполнения многопоточной программы детерминированным?

Судя по всему, ответ - нет. Тогда что можно сделать, чтобы увеличить вероятность срабатывания теста? Т.к. это, видимо, единственный путь: запускать тест 10+ раз (в зависимости от вероятности срабатывания).

Как я понял, все доступные в системе планировщики работают в kernel-space, и максимум что можно сделать - это управлять приоритетом потока. Можно, конечно, написать свой планировщик с дополнительными системными вызовами, но мне эта задача не представляется простой.

Еще есть yield, но это может помочь далеко не всегда. И управлять этим всем хозяйством будет совсем непросто.

 ,

kulti
()

[GoogleTest][QTestLib]Совместное использование

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

1. Есть ли у кого success-story использования QTestLib? Лично я планирую для своих форм добавить метод возвращающий указатель на ui, а всякие всплывающие окна (QDialog's children) получать через QApplication::ActiveWindow, кастить к нужному и типу и таким образом добраться до управления окном в тесте.

2. Стоит ли объединять тесты написанные на гуглотесте и QTestLib? Как я понял, QTestLib предполагает, что приложение - test case(набор тестов), а в GoogleTest приложение - это test suite(набор test case'ов). Теоретически можно извратиться и написать обвязку для QTest::qExec(), чтобы оно выглядело, как гуглотетовый test case. Если этого не делать, то как лучше поступить с тестами на QTestLib: создавать для каждого тест-кейза отдельное приложение или же поместить вызов всех тест-кейзов в одно? Тут в первую очередь играет роль удобства добавления и фильтрации тестов(а-ля gtest-filter).

kulti
()

[Coverage][C++]Есть что-нибудь лучше gcov?

Gcov меня не устраивает тем, что, например, в строчке:

std::string salutation("hello world!")
он показывает два брэнча. И сколько я не пытался понять как его отучить от этого, так ничего и не вышло. А искать реально пропущенные брэнчи среди всего этого шлака очень тяжело...

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

 

kulti
()

[The legend of Edgar]Если вдруг кто-то хочет помочь, но не знает где и чем.

Currently, The Legend of Edgar is available in English with partial Polish and Spanish translations. Translating the game into other languages would allow it to be played by others who don't speak English.

There is a project on Launchpad to assist with this

https://translations.launchpad.net/edgar/trunk

kulti
()

[rpmbuild]2 проблемы «частично решаемые» --nodeps и --force

Есть такой rpm-spec

Summary: summary
Name: name
Version: %{version}
Release: %{release}
Group: Applications/System
License: GPL

URL: yandex.ru

%description
Such of words about...


%prep

%build

%install

%clean

%files
%defattr(-,root,root)
%doc
/*

%changelog
Но собранный им rpm не хочет устанавливаться.

1. Сначала пишет, что нет в системе log4cxx. Где он смотрит? ldconfig знает об этой либе и я только что на этой же системе собрал этот rpm.

2. Если указать --nodeps, то пишет что файл /etc/init.d конфликтует с файлом из пакета chkconfig. Если указать --force, то в /etc/init.d моего скрипта не появляется.

Все веселье происходит в centos6. log4cxx устанавливал через ./confugre && make && make install

 

kulti
()

[gentoo][nethack]не работает menucolors

  • Взял патч
  • Скопировал себе ебилд в local/portage и добавил туда этот патч
  • Патч наложился, все собралось, установилось
  • Включил в ~/.nethackrc OPTIONS=menucolors и добавил всяких MENUCOLOR
  • Запускаю nethack - в меню подсветки нет

ЧЯДНТ?

 ,

kulti
()

[lcov]Branch data в строках с объявлением переменных

Например, он мне пишет, что мол такой-то бранч taken n раз, а другой 0 на следующей строке:

static const std::string nameKey = "name";
Откуда здесь бранч?

Или парой строк ниже

    if (nameIt == m_keyValues.end())
        return "";
Про if все хорошо - все бранчи пройдены. Но где он нашел бранч в return?

Может я его как-то не так готовлю? В качестве примера использовал https://github.com/gergap/helloworld

kulti
()

[кроссплатформенность]bind не возвращает EADDRINUSE

Примерно такой код:

    boost::asio::ip::tcp::endpoint endpoint(boost::asio::ip::address(), port);
    m_acceptor.open(endpoint.protocol());
    m_acceptor.set_option(boost::asio::ip::tcp::acceptor::reuse_address(true));

    boost::system::error_code ec;
    m_acceptor.bind(endpoint, ec);
    if( EADDRINUSE == ec.value() )
    {
        ...
    }
Под линуксом при повторном вызове попадает в if. Под офтопиком он этого делать не хочет.

В интернетах накопал, что в случае INADDR_ANY оно по идее может и в listen вывалиться. Ничего подобного. Пробовал указывать локалхост - ноль эмоций. Убирать опцию reuse_address тоже.

Какие еще варианты могут быть?

PS. еще кто-то описывал странную проблему: EADDRINUSE на 100500 + 1 итерации чтения/записи происходит. Если такое действительно возможно, то может быть можно как-то еще определить под виндой, что порт уже забинден?

 

kulti
()

[Android][Activity test]sendKey в UI-thread

Был у меня тест, который делал несколько performClick. Естественно, нужно было дождаться, когда оно там в UI-thread отработает - наворотил на wait-notify приблуду и пользовался, пока не узнал про @UiThreadTest. Радостно заюзал, но через 10 минут мне понадобилось добавить в тест sendKey, что в UI-thread работать не будет. Пытаться запустить это дело в другом треде и дождаться завершения, я так понял, не получится, т.к. sendKey сам ждет главный тред.

Вопрос: какие-нибудь еще варианты есть, кроме как убрать @UiThreadTest и дожидаться результатов performClick через wait-notify?

 

kulti
()

[совет-тред]книги/кино Англия XIX век

Мне нравятся «Ярмарка тщеславия», «Becoming Jane», «Jane Eyre». Интересует что-либо подобное.

P.S. Если есть ресурс, где указаны «похожие» книги/кино, то буду благодарен (что-то вроде, если вам нравится «Санта-Барбара», то вам также может понравится «Путеводный свет»).

kulti
()

[HTC Hero]Проблема с wi-fi

Сначала все работало, как часы, но в один непрекрасный момент перестал работать wi-fi. IP по dhcp получает, но ни один сайт не открывается.

Сеть открытая с фильтрацией по макам. По IP сайты не открываются. Роутер не пингуется. Пробовал и статикой все прописывать и сетку пересканивать.

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

В итоге обнулил все - ноль эффекта.

ЛОР, посоветуй, что и как еще проверить?

kulti
()

[ЖЖ]Посоветуйте онлайн-букмекера

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

 

kulti
()

[NTP]Что делать с hwclock?

ЛОР, я немного запутался. Ситуация такая:

ntpd в течение недели скомпенсировал опережение в две минуты, но после перезагрузки время стало вновь неверным. Посмотрел hwclock - действительно время отличается от того, что показывает date. Т.е. на выключении системы hwclock --systohc не случился. Посмотрел в /etc/conf.d/hwclock

# If you want to set the Hardware Clock to the current System Time # (software clock) during shutdown, then say «YES» here. # You normally don't need to do this if you run a ntp daemon. clock_systohc=«NO»

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

Что я не так понимаю/делаю?

 

kulti
()

sched_yield не работает?

Столкнулся с такой проблемой. Есть многопоточная программа. Один из тредов работает по следующему циклу: 1. Залочить мьютекс 2. Поработать 3. Отдать мьютекс 4. sched_yield, т.к. после этого выполятеся 1, т.е. мьютекс бы сразу залочился, что не дало бы возможности поработать другому треду

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

Пока, как временное решение, заменил на usleep(1).

В инете нашел, что вроде как и вправду не на всех ядрах этот вызов работает, как следует... Может, аналитики ЛОРа просветят более подробно?

kulti
()

Как узнать нестандартные dhcp опции на клиенте?

В конфиге dhcp-сервера прописано что-то вроде:

option space TEST;
option TEST.address  code 1 = ip-address;
option TEST.port     code 2 = integer 16;
option TEST.fw_ver   code 3 = text;
option TEST.ui_ver   code 4 = text;
class "TEST-1" {
    match if (option vendor-class-identifier="TEST1");
    vendor-option-space TEST;    
    option TEST.address 225.100.100.100;
    option TEST.port 1234;
}

Как на клиенте узнать эти опции, чтобы использовать в sh-скрипте?

Клиент - dhcpсd

kulti
()

[cramfs][mtd]Как правильно записать образ fs?

Есть embedded устройство с NAND памятью. При обновлении прошивки мы делали очень eraseall /dev/mtd0, а затем dd if=new.img of=/dev/mtd0. На сколько я понял, erase нужен из-за особенностей NAND, т.е. ее нужно перевести в специальное состояние, чтобы можно было писать.

Но теперь мне это нужно делать не тулзами, а самому написать код. Естественно взял исходники соответствующих тулзовин, но в процессе вычитал, что если на флэшке образуется badblock, то cramfs уже нельзя будет просто записать с помощью dd. Но вот тут, например, в разделе 7.1.2.5 Writing and reading ничего такого не говорится, а про бэд-блоки только в следующем разделе про DiskOnChip рассказывается. Моя железяка на mipsel, т.е. видимо там CFI и «беспокоится» о бэд-блоках не надо?

Если кто разбирается в этом, скажите правильно я понимаю или нет.

 

kulti
()

[syslog]клиент для отправки на удаленный сервер

То, что в <sys/syslog.h>, я так понял только на локальный syslog-сервер может писать, а уже его можно настроить, чтобы он на удаленный сервер переслал.

А можно ли без сервера обойтись? Готовых либ на С/С++ найти пока не могу. Самому написать вроде как можно, протокол не сложный, но велосипедить не охота.

 

kulti
()

/bin/sh: line 0: .: .config: file not found

Пытаюсь компилировать ядро под одну железяку. В build.mk файле есть строчки

(. .config; \
		cp -f vendors/${CONFIG_VENDOR}/${CONFIG_PRODUCT}/config.linux-2.6.x ${CONFIG_LINUXDIR}/.config; \
	)
На которых все заканчивается с ошибкой из сабжа. Если .config заменить на ./.config, то команда отрабатывает. Пробовал, к примеру, (cat .config) - работает. Т.е. видимо какая-то трабла именно с source...

kulti
()

Не могу кросс-скомпилировать shared library

Мне нужно собрать libdvbpsi под mips. Но собирается только static. Когда я пишу ./configure --host=mips, то в логах

checking whether the /opt/toolchains/uclibc-crosstools/bin/mipsel-linux-uclibc-gcc linker (/opt/toolchains/uclibc-crosstools/bin/mipsel-linux-uclibc-ld) supports shared libraries... yes
checking if libtool supports shared libraries... no
checking whether to build shared libraries... no

Как ее заставить собирать shared library?

kulti
()

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