LINUX.ORG.RU

Сообщения TaranSergey

 

Хитрый макрос

Давно не писал на чистом Си (С++ либо python обычно), а тут вот возникла необходимость написать маленького демона, но т.к. привык к разработке через TDD, то захотелось мне так и в Си сделать, краткий обзор тестовых фреймворков для Си показал, что кое что есть, но после gtest/gmock как-то всё не понравилось и начал я городить свой маленький велосипед посмотрев презентацию о разработке через тесты в Си. Вобщем всё довольно просто, написал один макрос вида :

#define check(expr) assert((expr) && __FILE__ && __LINE__)
И потом просто одна функция - один тест, в котором один или несколько этих самых check, типа
void test_fibonachi() {
  check(fibonachi(0) == 1);
  check(fibonachi(1) == 1);
  check(fibonachi(2) == 2);
  printf("%s %s .... PASS\n", __FILE__, __func__);
}
, а в main вызываеться каждая функция, для наглядности в конце каждой функции:
printf("%s %s .... PASS\n", __FILE__, __func__);
А значит дубляж кода и я должен это отрефакторить и пришла мне в голову мысль навеянная gtest, а не написать-ли мне макрос который такое:
TEST(testname) {
some test code
}
превратит в такое:
void testname() {
some test code
}
тут что-то сделать чтобы запомнить адресс функции и её название
в какой-то массив структур 
а потом бы в main что-то типа
int main(int argc, char **argv) {
  run_all_tests();
  return EXIT_SUCCESS;
}
ну а сам run_all_tests() нечто вроде
void run_all_tests() {
  for(int i=0; i < tests_count; i++) {
     tests[i].func_ptr();
     printf("%s %s .... PASS\n", tests[i].file_name, tests[i].func_name);
  }
}
И всё бы вроде хорошо, всё понятно но как так выкрутиться чтобы заполнить эту самую структуру, а именно как заставить выполняться некий код написанный рядом с функцией? Смотрел исходники gtest, то там всё проще - они классы новые создают, а тут я даже не знаю как поступить..

TaranSergey ()

Софт для активного шумоподавления

Есть-ли такой? Технически ж вроде нету проблем при наличии микрофона и наушников. В опенспейсе на работе частенько довольно шумно (скайпится народ и просто т рындит), наушники закрытые но если не вклюяать музыку всё равно прорываются звуки офиса, музыка конечно спасает но отвлекает, хочется гробовой тишины.. PS: под линукс конечно.

 

TaranSergey ()

coproc, в чем сила?

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

 

TaranSergey ()

Библиотека по управлению системными сервисами

Подскажите есть-ли такая? Хочется легко получать список всех сервисов, список запущенных, иметь возможность останавливать, запускать, перезапускать и т.д. вобщем делать всё, чего можно добится в RedHat-based дистрах при помощи комманд chkconfig и service.

 

TaranSergey ()

просмотр DVD

Чем посмотреть DVD не с компакта, а уже переписанный каталог на диск?

>>>

TaranSergey ()

Проблемы со скролом

 Перестаёт работать склон на мышке вниз, вверх работает сколько угодно, а в низ только несколько оборотов, причём можно покрутить вверх и он опять работает (смотрел xev-ом). Вот конфиг из xorg.conf:
Section "InputDevice"
        Identifier  "Mouse0"
        Driver      "evdev"
        Option      "Name" "Logitech USB Gaming Mouse"
        Option      "HWHEELRelativeAxisButtons" "6 7"
EndSection

>>>

TaranSergey ()

xorg, nvidia, 1366x768, возможно?

 Уже долго мучаюсь с подключением телика через переходник DVI-HDMI к 
компу. Всё время не получается выставить родное разрешение. Видеокарта 
FX5200, телик Philips 37pf3321/10. Вписывал ModeLine посчитанные gtf и 
те что нашёл гуглом - не помогает.
 Вот  кусок xorg.conf:
Section "Monitor"
    Identifier     "Monitor1"
    VendorName     "Philips"
    ModelName      "Philips"
    HorizSync      30.0 - 83.0
    VertRefresh    56.0 - 75.0
    UseModes       "Modes[0]"
    Option         "ExactModeTimingsDVI" "True"
    Option         "DPMS"
    Option         "ModeValidation" "NoVertRefreshCheck,NoHorizSyncCheck"
EndSection
Section "Modes"
    Identifier "Modes[0]"
    Modeline "1368x768_60.00"  85.86  1368 1440 1584 1800  768 769 772 795  -HSync +Vsync
    Modeline "1360x768" 60.25 1360 1392 1526 1784 768 771 781 798 +HSync +Vsync    
    Modeline "1360x768@60" 84.50 1360 1392 1712 1744 768 783 791 807
    ModeLine "1366x768" 85.5 1360 1440 1552 1792 768 771 777 795
EndSection
Section "Device"
    Identifier     "Videocard1"
    Driver         "nvidia"
    VendorName     "NVIDIA Corporation"
    BoardName      "GeForce FX 5200"
    BusID          "PCI:1:0:0"
    Option         "RenderAccel"
    Option         "HWcursor"
    Option         "CursorShadow"
    Option         "CursorShadowAlpha" "32"
    Option         "CursorShadowXOffset" "3"
    Option         "CursorShadowYOffset" "3"
    Option         "ExactModeTimingsDVI"
    Option         "UseEDIDFreqs" "FALSE"
    Option         "DPMS"
    Screen          1
EndSection

Section "Screen"
    Identifier     "Screen1"
    Device         "Videocard1"
    Monitor        "Monitor1"
    DefaultDepth    24
    Option         "TwinView" "0"
    SubSection     "Display"
        Depth       24
        Modes      "1366x768" "1360x768@60" "1368x768_60.00" "1360x768" "1280x720"
    EndSubSection    
EndSection

Вот лог xorg-а:
(--) NVIDIA(1): Philips (DFP-0): 135.0 MHz maximum pixel clock
(--) NVIDIA(1): Philips (DFP-0): Internal Single Link TMDS
(II) NVIDIA(1): Mode Validation Overrides for Philips (DFP-0):
(II) NVIDIA(1):     NoHorizSyncCheck
(II) NVIDIA(1):     NoVertRefreshCheck
(II) NVIDIA(1): Assigned Display Device: DFP-0
(WW) NVIDIA(1): No valid modes for "1366x768"; removing.
(WW) NVIDIA(1): No valid modes for "1360x768@60"; removing.
(WW) NVIDIA(1): No valid modes for "1368x768_60.00"; removing.
(WW) NVIDIA(1): No valid modes for "1360x768"; removing.
(II) NVIDIA(1): Validated modes:
(II) NVIDIA(1):     "1280x720"
(II) NVIDIA(1): Virtual screen size determined to be 1280 x 720

Ставит только 1280x720 :(. Что делать?

>>>

TaranSergey ()

Гы :)

Переходим по ссылке и наблюдаем http://www.linux.org.ru/group.jsp.
Для труъ которые по ссылкам не ходят, там
java.lang.NumberFormatException: null
at java.lang.Integer.parseInt(Integer.java:415)
at java.lang.Integer.parseInt(Integer.java:497)
at org.apache.jsp.group_jsp._jspService(group_jsp.java:71)
at org.apache.jasper.runtime.HttpJspBase.service(HttpJspBase.java:98)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:803)
at org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:328)
at org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:315)
at org.apache.jasper.servlet.JspServlet.service(JspServlet.java:265)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:803)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFil terChain.java:269)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain .java:188)
at org.tuckey.web.filters.urlrewrite.UrlRewriteFilter.doFilter(UrlRewriteFilter.ja va:738)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFil terChain.java:215)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain .java:188)
at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java: 210)
at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java: 174)
at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:127)
at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:117)
at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:10 8)
at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:151)
at org.apache.jk.server.JkCoyoteHandler.invoke(JkCoyoteHandler.java:200)
at org.apache.jk.common.HandlerRequest.invoke(HandlerRequest.java:283)
at org.apache.jk.common.ChannelSocket.invoke(ChannelSocket.java:773)
at org.apache.jk.common.ChannelSocket.processConnection(ChannelSocket.java:703)
at org.apache.jk.common.ChannelSocket$SocketConnection.runIt(ChannelSocket.java:89 5)
at org.apache.tomcat.util.threads.ThreadPool$ControlRunnable.run(ThreadPool.java:6 85)
at java.lang.Thread.run(Thread.java:595)

>>>

TaranSergey ()

Драйвера ATI и xvideo :(

Подключил HD-телевизор через DVI->HDMI, в надежде смотреть HD-видео, но
не тут-то было - тормоза. Смотрю mplayer-ом, если пускать через -vo x11,
тормозов нету, но нету и масштабирования, если через -vo xv, то
масштабируется, но тормоза дикие. В xorg.conf вписал
Section "Extensions"
Option "XVideo" "Enable"
EndSection
Section "Device"
.....
Option "VideoOverlay" "on"
EndSection

glxinfo говорит, что direct rendering: YES.
Видеокарта X1950Pro, драйвера проприетарные (я так понял что открытых
на эту линейку нет), в мастдае работало всё без тормозов. В принципе
смотреть обычные avi-шки можно, но вот видео в разрешении 1920x1080
тормозит ужасно.
Что делать? Или надо смирится с тем, что пока у меня ATI мне видео не
посмотреть..
PS: обидно, то что на работе стоит FX5500 + celeron и не тормозит, а дома X1950Pro + C2D6600..

>>>

TaranSergey ()

В чём прикол?

tarik@tarik_host ~ $ cd //
tarik@tarik_host // $ pwd
//
tarik@tarik_host // $ ls
bin boot dev etc home lib mnt opt proc root sbin sys tmp usr var

Что за каталог такой "//" ? Реально это корень..

>>>

TaranSergey ()

Образ из CloneCD, запись в линуксе

Есть образ с двухслойного DVD сделанный этой программой в виндах, там два файла (может быть больше), один из файлов описывает структуру диска- всего одно значение LayerBreak, насколько я понял это номер дорожки на которой пора прекратить запись на первом слое и перейти на второй. Можно-ли как-то например при помощи dvdrecord записать такое?

>>>

TaranSergey ()

потеря передачи значения по ссылке

Обновил пхп до версии 5.2.4, перестали работать такие конструкции:
function func(&$x)
{
$var = 1;
}

func($var = 2); // в $var после завершения остаётся 2, раньше было 1
func($var); // в $var будет 1
Похоже php в первом случае игнорирует передачу по ссылке..
Кто не прав я или php? Или это настраивается?

>>>

TaranSergey ()

mc shell link и ssh версии 1

Как заставить mc делать shell link по протоколу первой версии и указать файл с ключём? Или подскажите чем вообще можно копировать файлы на удалённую машину, учитавыя то что там стоит ssh первой версии и авторизация по ключам. Пробовал примонтировать по sshfs - не получилось заставить его работать с первой версией, пробовал FileZilla - вообще ни чего не умеет..

>>>

TaranSergey ()

C++ обработка html шаблонов

Есть-ли какая-то либа для C/C++ наподобие smarty, чтобы было легко обрабатывать шаблоны html-я?

TaranSergey ()

pidgin(gaim) и url-лы

Стоял gaim, потом он начал вываливаться если навести, выделить или нажать на присланную кем-то ссылку (причём не на любую, но большинство). Надоело - поставил pidgin, и он так же выпадает.. Что это может быть и как с этим бороться? Другой клиент не предлагать, очень привык к нему :).

TaranSergey ()

iptables, owner, INPUT (PREROUTING)

На сервере сидит много пользователей, всё они жрут канал, как регулировать скорость (да и вообще фильтрацию) канала индивидуально каждому? Идеально бы подошёл owner из iptables, но его нельзя поцепить на вход, только в OUTPUT.. ОС Linux, ядро 2.6.18.

TaranSergey ()

mpd и русские теги

mpd не хочет отдавать в правильной кодировке русские теги (отдаёт в битой какой-то). Писал id3v1_encoding "cp1251" - не помогло (вообще ни чего не поменялось). Потом взял mp3info и переконвертировал все теги в utf8 при помощи iconv. Результат остался тот же.. То что выводит mpc можно переконвертировать в cp866, потом удалить символы псевдографики и получается нечто читабельное. Решил что проблема в libId3tag, проверил написав программку которая получала теги при помощи libId3tag - действительно libId3tag отдаёт такую ерунду, т.е. mpd вроде как и не виноват.. Куда копать и что делать? Плееры которые читают теги при помощи taglib работают правильно. Можно ли как-то прикрутить taglib к mpd(самому править исходники mpd влом, мож есть уже патч)?

TaranSergey ()

Проброс ssh наружу

Понимаю что вопрос глупый и всё делается элементарно, но ни как не могу допереть как :). Есть машина в локальный сети (моя домашняя), выходит наружу через nat, есть мой сервер снаружи, есть вторая локальная сеть, и машина в ней (тоже nat). Как мне через внешний сервер, прокинуть доступ по ssh со второй машины на первую через внешний сервер?

TaranSergey ()

gcc проблемы с вещественной арифметикой

Начали вылазить какие-то странные вещи. Есть некая переменная типа
double, к ней постоянно прибавляется вещественное число из диапазона [0..1]. Современем получается nan. Решается проблема тупым созданием неиспользуемой переменной.
Вот так получается nan:
x += delta;
А так всё хорошо:
double someVar;
x += delta;
Но после этого следующее по коду вещественное выражение становится nan.
У меня сложилось мнение что компилятор неправильно вычисляет адрес.
Может кто сталкивался с таким? Кстати на 64-ой машине всё хорошо.
Версия gcc на 32-ной машине 3.4.3 и 4.0.0.
Но глюк проявляется только в одной довольно большой программе, писал маленький main там всё хорошо.

TaranSergey ()

gcc и освобождение памяти

Есть прога которая довольно много выделяет и освобождает памяти. Сегодня увидел что память не освобождается (вернее она то освобождается - valgrind не матерится), но если посмотреть в top-е то прога как занимала так и занимает. Далее при выделении памяти судя по всему используется та память которая должна была быть удалена. Написал маленькую тестовую програмку которая просто выделяла произвольное количество блоков блоков, потом удаляла - размер занимаемой памяти до выделения и после различный (во втором случае больше). Запустил через strace, посмотрел на вызовы mmap2 и munmap - так и есть память повторно используется и окончательно удаляется только по завершению программы. Как это побороть, очень надо чтобы программа удаляла память по честному.

TaranSergey ()

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