LINUX.ORG.RU

Сообщения tri10bit

 

C++. Поверхностная проверка синтаксиса.

Поставил плагин Syntastic к Vim, хочу проверку синтаксиса моего C++ кода при сохранении. Поскольку проект для которого я пишу довольно сложный и громоздкий, хочется чтобы проверка синтаксиса осуществлялась только в текущем файле, без подключения include'ов и выполнялась «сквозь пальцы». Достаточно будет проверить, что код структурно правильный, не вдаваясь в смысл имён.

Например:

  • «FakeType var = val;» - правильная строка, даже если FakeType не определен в текущем файле
  • «func(a, b c);» - неправильная строка, поскольку пропущена запятая

Я пробовал:

  • gcc -fsyntax-only - не смог настроить его на поверхностную проверку. Всё равно подключает include'ы и сопоставляет имена
  • cppcheck - вообще почти ничего не умеет

Что ещё можно попробовать или как настроить gcc?

 ,

tri10bit
()

Зависает примонтированная smb share

Помогите, пожалуйста, советом. У меня постоянно какие-то пролемы с smb. Вот сейчас следующая.

Есть машина с Debian 7, есть машина с Windows 7. Делаю следующее (это уже упрощение, первоначально воспроизвелось с autofs и не в tmp):

sudo mount -t cifs //win7machine/C\$ /tmp/win_c -o credentials=/etc/domain_credentials
sudo mount -t cifs //win7machine/D\$ /tmp/win_d -o credentials=/etc/domain_credentials

Работаю с файлами (через gvim), оставляю машину на полчаса-час в бездействии. После этого возвращаюсь и вижу, что gvim завис и все запросы к точке монтирования (типа `ls /tmp/win_c`) зависают и не откликаются на Ctrl+C.

В dmesg сообщения вида:

[10890.534102] INFO: task gvim:3735 blocked for more than 120 seconds.
[10890.534106] "echo 0 > /proc/sys/kernel/hung_task_timeout_secs" disables this message.
[10890.534110] gvim            D ffff88023e2d3780     0  3735      1 0x00000000
[10890.534115]  ffff880231ba6340 0000000000000082 0000000000000000 ffff880235ba6f60
[10890.534121]  0000000000013780 ffff880232efbfd8 ffff880232efbfd8 ffff880231ba6340
[10890.534126]  0000000000000000 0000000100000000 0000000000000000 ffff880231a56c20
[10890.534132] Call Trace:
[10890.534141]  [<ffffffff8134f36c>] ? __mutex_lock_common.isra.5+0xff/0x164
[10890.534146]  [<ffffffff8134f25a>] ? mutex_lock+0x1a/0x2d
[10890.534151]  [<ffffffff81154f36>] ? load_nls_default+0xe/0x1f
[10890.534159]  [<ffffffffa04a30d2>] ? cifs_reconnect_tcon+0x197/0x2b0 [cifs]
[10890.534165]  [<ffffffff811aabfc>] ? cpumask_next_and+0x28/0x34
[10890.534170]  [<ffffffffa04a3af6>] ? smb_init+0x24/0x69 [cifs]
[10890.534178]  [<ffffffffa04a87fb>] ? CIFSSMBQPathInfo+0x63/0x21c [cifs]
[10890.534183]  [<ffffffff810ecae3>] ? kmem_cache_alloc_trace+0xbe/0xce
[10890.534192]  [<ffffffffa04b94a0>] ? cifs_get_inode_info+0x108/0x417 [cifs]
[10890.534200]  [<ffffffffa04b2270>] ? build_path_from_dentry+0xc1/0x1ea [cifs]
[10890.534204]  [<ffffffff810eca13>] ? __kmalloc+0x100/0x112
[10890.534211]  [<ffffffffa04b22d0>] ? build_path_from_dentry+0x121/0x1ea [cifs]
[10890.534217]  [<ffffffff8110869f>] ? poll_freewait+0x97/0x97
[10890.534225]  [<ffffffffa04baa4b>] ? cifs_revalidate_dentry_attr+0x11e/0x16a [cifs]
[10890.534229]  [<ffffffff81110006>] ? mntget+0x17/0x1c
[10890.534236]  [<ffffffffa04baac4>] ? cifs_revalidate_dentry+0xa/0x1f [cifs]
[10890.534243]  [<ffffffffa04b2164>] ? cifs_d_revalidate+0x23/0x6e [cifs]
[10890.534248]  [<ffffffff81103547>] ? walk_component+0x28f/0x406
[10890.534252]  [<ffffffff81103d05>] ? link_path_walk+0x174/0x421
[10890.534257]  [<ffffffff8110433c>] ? path_lookupat+0x53/0x2bd
[10890.534261]  [<ffffffff81036628>] ? should_resched+0x5/0x23
[10890.534264]  [<ffffffff8134ea6c>] ? _cond_resched+0x7/0x1c
[10890.534269]  [<ffffffff811045c2>] ? do_path_lookup+0x1c/0x87
[10890.534273]  [<ffffffff8110604b>] ? user_path_at_empty+0x47/0x7b
[10890.534279]  [<ffffffff81280de8>] ? sys_recvfrom+0xfd/0x12a
[10890.534283]  [<ffffffff810fe09e>] ? vfs_fstatat+0x32/0x60
[10890.534288]  [<ffffffff8112c607>] ? eventfd_read+0x33/0x5e
[10890.534291]  [<ffffffff810fe1d4>] ? sys_newstat+0x12/0x2b
[10890.534294]  [<ffffffff811095c2>] ? sys_poll+0x43/0xab
[10890.534298]  [<ffffffff8104b362>] ? sys_time+0xc/0x39
[10890.534302]  [<ffffffff81354d92>] ? system_call_fastpath+0x16/0x1b

Пока писал это сообщение - все развисло :). Но все таки дело непонятное. Вопросы:

- Как мне это побороть?

- Как можно насильно перезапустить ?модуль отвечающий за монтирование cifs (чтобы не перезагружать систему в таких случаях)? `killall -9 cifsd` не имеет никакого эффекта

//Есть предположение, что развисает после перезапуска LanmanServer на венде

 

tri10bit
()

xmonad multiscreen. workspace per monitor

У меня два монитора, Debian 7 и xmonad 0.11

Пишут, что в xmonad для multiscreen по-умолчанию один workspace на монитор. Но у меня workspace растягивается на оба (т.е. половина на одном мониторе, половина на другом). Как починить?

multiscreen я сделал с помощью xrandr. В .xinitrc - «xrandr --output HDMI3 --auto --left-of VGA1 --auto»

xrandr -q выводит

Screen 0: minimum 320 x 200, current 2560 x 1024, maximum 8192 x 8192
VGA1 connected 1280x1024+1280+0 (normal left inverted right x axis y axis) 376mm x 301mm
   1280x1024      60.0*+   76.0     75.0     72.0  
   1152x864       75.0  
   1024x768       75.1     70.1     60.0  
   832x624        74.6  
   800x600        72.2     75.0     60.3  
   640x480        72.8     75.0     66.7     60.0  
   720x400        70.1  
   640x350        70.1  
HDMI1 disconnected (normal left inverted right x axis y axis)
DP1 disconnected (normal left inverted right x axis y axis)
HDMI2 disconnected (normal left inverted right x axis y axis)
HDMI3 connected 1280x1024+0+0 (normal left inverted right x axis y axis) 376mm x 301mm
   1280x1024      60.0*+   76.0     75.0     72.0  
   1152x864       75.0  
   1024x768       75.1     70.1     60.0  
   832x624        74.6  
   800x600        72.2     75.0     60.3  
   640x480        72.8     75.0     66.7     60.0  
   720x400        70.1  
   640x350        70.1  
DP2 disconnected (normal left inverted right x axis y axis)
DP3 disconnected (normal left inverted right x axis y axis)

Как видно, здесь один screen, к которому подключены два monitor'а. Возможно нужно сделать так чтобы на один monitor приходился один screen?

 ,

tri10bit
()

Обновить PATH для wm

Захотелось странного - поставил xmonad

  • 1. Сделал cabal install. Получил исполняемый файл в /home/<user>/.cabal/bin
  • 2. Описал /usr/share/xsessions/xmonad.desktop
  • 3. Добавил :/home/<user>/.cabal/bin к PATH в /etc/profile и /etc/sudoers

Теперь я могу из lightdm загрузить xmonad. Но в некотрых случаях я получаю ошибки о том, что xmonad отсутствует в PATH

  • 1. Если настраиваю autologin в lightdm
  • 2. Если из процесса xmonad вызываю «xmonad --recompile»

Почему для этих случаев PATH не обновился? Для чистоты эксперимента даже перезагрузился

 , ,

tri10bit
()

Облегченное монтирование сетевых ресурсов

Пользуюсь linux-ом в windows сети. Порой испытываю неудобства, когда нужно открыть smb-шару. Для этото я - создаю в /tmp директорию, монтирую туда шару, ввожу доменные креды.

Не люблю выполять лишние действия, поэтому написал скриптик, который делает все это автоматом. Использую, как-то так:

$ ls `ex smb://server/share/path`

Мне нравится, но наверняка дальше потребности будут расти. Может уже есть такая easy-mount utility с кэшированием кредов?

 

tri10bit
()

CLI абстракция над архиваторами

Хочется в command line команду unpack (как минимум), которая бы распаковывала любой переданный ей архив в отдельный каталог (с защитой от tar-бомб).

Раньше я пользовался roller-ом в nautilus, и он это умел по rclk.

Есть что-нибудь такое готовое или самому скрипт придется писать?

tri10bit
()

cups add Windows printer via SAMBA with domain user

Дано:

  • smb windows-сервер с расшаренным принтрером
  • доменные креды
  • машина с linux и cups. У нее /usr/lib/cups/backend/smb -> ../../../bin/smbspool

Делаю пробный коннект к принтеру с помощью smbspool, uri составляю, как в `man smbspool` - smb://user:pass@domain/srv/printer . Авторизация проходит успешно.

Теперь хочу добавить этот принтер в cups через web-интерфейс. Выбираю Add machine -> Windows printer via SAMBA . Далее получаю ошибку при добавлении NT_STATUS_BAD_NETWORK_NAME. Если из uri убрать домен - машина добавится, но при печати получу ошибку при аутентификации.

<Printer 4floor>
UUID urn:uuid:43a4a07b-caa6-31c2-749d-5c0725d61997
AuthInfoRequired username,password
Info 4floor
MakeModel HP LaserJet 1320 series Postscript (recommended)
DeviceURI smb://someuser:somepass@somedomain/somesrv/some\ printer
State Idle
StateTime 1379247060
Type 8425556
Accepting Yes
Shared No
JobSheets none none
QuotaPeriod 0
PageLimit 0
KLimit 0
OpPolicy default
ErrorPolicy retry-job
</Printer>

Почему с заданным uri smbspool работает, а cups нет? Где пошаманить?

 ,

tri10bit
()

Remap Caps Lock - true way

Привет, недавно я решил попробовать замапить Ctrl на клавишу Caps Lock и мне понравилось, оказалось, что это очень удобно.

У меня Ubuntu и, когда я сидел на Unity, я делал remap в гуевом конфигураторе (гномовский наверное какой-то). Потом я решил перейти на fluxbox и сделал remap в /etc/default/keyboard. Но и этого оказалось недостаточно так как в моих виртуальных машинах CapsLock Так и остался CapsLock'ом

Вопросы:

* Почему в WM-ах есть модуль дублирующий функционал реализованный в xorg (переключение раскладки, переназначение клавиш)

* Можно ли спуститься на уровень ниже, не перекомиплируя драйвер клавиатуры и переназначить CapsLock так, чтобы он стал Ctrl-ом во всех приложениях

tri10bit
()

Как проще всего временно ограничить объем ОЗУ

Есть linux-хост. Нужно временно ограничить объем свободной ОЗУ. Для этого написал программу на C с malloc и memset, которая отъедает заданный объем памяти.

Можно сделать это как-нибудь по-проще?

tri10bit
()

Перенос хостовой win7 на Xen

Есть желание из хостовой win7 сделать виртуалку и пускать ее из под линукс. В линукс мне работать комфортнее, но венда все равно нужна, причем важно сохранить высокую производительность.

Сперва я сделал образ диска с помощью vmware утилит. Затем загрузил его в Virtualbox, хорошо покопался в настройках, но производительность такой системы все равно слишком сильно упала.

Теперь у меня появилась идея попробовать Xen с драйверами для паравиртуализации. Для пробы настроил загрузку xen-домена с реальной партиции, но при старте винда выпадает в синий экран - видимо что-то не так с конфигурацией. Выставил количество памяти, процов, acpi, achi, но к успеху не пришел.

У кого-нибудь был подобный опыт? Что-еще можно настроить в xen, на что зависит венда? Получится ли у меня виртуализовать свой win7 на xen, так чтобы он работал шустрее, чем под virtualbox?

 

tri10bit
()

За счет чего повторный вызов find работает быстрее?

Shell. Допустим что-то нужно найти в большой файловом дереве. Делаю find ... , возможно добавляю grep ... . Поиск занимает какое-то время.

Теперь если повторить поиск, то он пойдет значительно быстрее. За счет чего это происходит, где и что кэшируется?

tri10bit
()

Правила substitute-path не выполняются

Есть у gdb такая опция substitute-path (http://sourceware.org/gdb/onlinedocs/gdb/Source-Path.html) и она отказывается у меня работать.

Покажу на примере:

$ cd /some/path
$ mkdir -p gdb/sub
$ cd gdb
$ vim sub/main.cpp # тут делаю тупой while(true);
$ g++ -g sub/main.cpp
$ ./a.out &
$ cd ..
$ mkdir gdb_
$ mv gdb/* gdb_
$ sudo gdb -p <pid>
...
main () at sub/main.cpp:14
14	sub/main.cpp: Нет такого файла или каталога.
(gdb) set substitute-path sub /some/path/gdb_/sub
(gdb) f
#0  main () at sub/main.cpp:14
14	in sub/main.cpp    # то есть не подхватил
(gdb) directory /some/path/gdb_
(gdb) f
#0  main () at sub/main.cpp:14
14	  while (true);    # то есть подхватил

Вот и проблема, что substitute-path не работает, а directory - пожалуйста. Надеюсь понятно объяснил, кто-нибудь еще это использует?

 

tri10bit
()

Железо для музыкального сервера

Добрый вечер ЛОР, обращаюсь за советом.

У меня был старый ноут, я его использовал как музыкальный сервер с MPD и Subsonic. Теперь я его отдал и ищу замену. Собственно размышляю над вариантами:

1. Купить какую-нибудь железяку со звуковухой (уж если нетбуки за 10тыр продают, наверняка за дешевле можно что-то удовлетворяющее моим целям найти). Посоветуете что-нибудь?

2. Перепрошить свой роутер asus RT-N56 на благородный линукс, поставить туда Subsonic и подключить по usb hdd с музыкой. Реально сделать робастное решение?

3. ?????

Что вы используете для этих целей?

tri10bit
()

Ошибка «No instance», не смотря на то, что instance определен в подключаемом модуле

Решил забавы ради потыкать haskell'ем MPD. Поставил с hackage libmpd, но не могу скомпилировать код в три строки:

import Control.Monad.Error
import Network.MPD

main = withMPDEx "192.168.1.102" 6600 "" $ throwError noMsg

Здесь последним аргументом в withMPDEx передается монада MPD, у которой, судя по исходникам libmpd, определен instance MonadError MPDError

Интерпретатор выводит:

$ runhaskell MPDError.hs 

MPDError.hs:4:44:
    No instance for (MonadError e0 MPD)
      arising from a use of `throwError'
    Possible fix: add an instance declaration for (MonadError e0 MPD)
    In the second argument of `($)', namely `throwError noMsg'
    In the expression:
      withMPDEx "192.168.1.102" 6600 "" $ throwError noMsg
    In an equation for `main':
        main = withMPDEx "192.168.1.102" 6600 "" $ throwError noMsg

С явным указанием типов получаю более конкретную ошибку - «No instance for (MonadError MPDError MPD)»

Куда мог деться instance MonadError MPDError MPD, если я вижу использование того же throwError в исходниках libmpd?

 

tri10bit
()

Ultrabook с linux

Я так понимаю, что единственный ультрабук с объявленной поддержкой линукс это Dell XPS13?

Его в России с предустановленной Ubuntu можно где-нибудь купить?

 

tri10bit
()

Классы типов их инстанцирование, как читать?

Привет, здесь есть специалисты по haskell?

Сам я пишу на C++ и привык читать инстанцирование класса, как «ConcreteObject - это SomeClass». Как мне показалось, в haskell так делать нельзя.

Спрошу на конкретном примере класса Functor:

class Functor f where
   fmap :: (a -> b) -> f a -> f b

Инстанцирование для списка (как-то так)

instance Functor [] where
  fmap = map

говорит о том что для типа [] определен функтор осуществляющий отображение стрелок над элементами списка в стрелки над списками

Правильно ли что запись instance Functor Something я должен читать, как - «для типа Something инстанцирован/описан/реализован Functor», но не «Something - это Functor»?

Статья http://en.wikibooks.org/wiki/Haskell/Applicative_Functors , к примеру, мне рвет шаблон высказываниями вида «apply functions inside the functor», «The most well-known functor is the list». Как могут быть корректны такие высказывания, если функтор - это отображение из категории в категорию?

Ну и почему в классе Functor описано отображение для стрелок, но не описано отображение для объектов (как pure из класса Applicative)?

 

tri10bit
()

[c++][qt4] Объявление char константы - overflow in implicit constant conversion

такая проблема, не могу определить кириллическую char константу

char a='Ъ';

warning: multi-character character constant
In function ‘int main(int, char**)’:
warning: overflow in implicit constant conversion

локаль utf-8

наверное туплю где-то, подскажите пожалуйста, что делать?

 

tri10bit
()

Распределение трафика по интерфейсам

Есть два сетевых интерфейса - eth0 и ppp0, необходимо распределить исходящий трафик по интерфейсам в зависимости от протокола, порта или конечного адреса.
Подскажите, как это сделать?) Я так понял нужно пользоваться iproute, но вот в ip rule нельзя указывать порты.

>>>

tri10bit
()

undefined reference

Собственно ощибка undefined reference при компиляции простенького qt4 проекта (пишу в kdevelop)

cd '/home/yk/Projects/ssau/zelenko/TypeTrain' && make -k
cd src && /usr/bin/qmake-qt4 src.pro -unix -o Makefile
cd src && make -f Makefile
/usr/bin/uic-qt4 logindialog.ui -o ui_logindialog.h
/usr/bin/uic-qt4 userwindow.ui -o ui_userwindow.h
g++ -c -pipe -O2 -Wall -W -D_REENTRANT -DQT_NO_DEBUG -DQT_GUI_LIB -DQT_CORE_LIB -I/usr/share/qt4/mkspecs/linux-g++ -I. -I/usr/include/qt4/QtCore -I/usr/include/qt4/QtCore -I/usr/include/qt4/QtGui -I/usr/include/qt4/QtGui -I/usr/include/qt4 -I. -I. -I. -o main.o main.cpp
g++ -c -pipe -O2 -Wall -W -D_REENTRANT -DQT_NO_DEBUG -DQT_GUI_LIB -DQT_CORE_LIB -I/usr/share/qt4/mkspecs/linux-g++ -I. -I/usr/include/qt4/QtCore -I/usr/include/qt4/QtCore -I/usr/include/qt4/QtGui -I/usr/include/qt4/QtGui -I/usr/include/qt4 -I. -I. -I. -o typetrain.o typetrain.cpp
g++ -c -pipe -O2 -Wall -W -D_REENTRANT -DQT_NO_DEBUG -DQT_GUI_LIB -DQT_CORE_LIB -I/usr/share/qt4/mkspecs/linux-g++ -I. -I/usr/include/qt4/QtCore -I/usr/include/qt4/QtCore -I/usr/include/qt4/QtGui -I/usr/include/qt4/QtGui -I/usr/include/qt4 -I. -I. -I. -o userwindow.o userwindow.cpp
g++ -c -pipe -O2 -Wall -W -D_REENTRANT -DQT_NO_DEBUG -DQT_GUI_LIB -DQT_CORE_LIB -I/usr/share/qt4/mkspecs/linux-g++ -I. -I/usr/include/qt4/QtCore -I/usr/include/qt4/QtCore -I/usr/include/qt4/QtGui -I/usr/include/qt4/QtGui -I/usr/include/qt4 -I. -I. -I. -o logindialog.o logindialog.cpp
/usr/bin/moc-qt4 -DQT_NO_DEBUG -DQT_GUI_LIB -DQT_CORE_LIB -I/usr/share/qt4/mkspecs/linux-g++ -I. -I/usr/include/qt4/QtCore -I/usr/include/qt4/QtCore -I/usr/include/qt4/QtGui -I/usr/include/qt4/QtGui -I/usr/include/qt4 -I. -I. -I. logindialog.h -o moc_logindialog.cpp
g++ -c -pipe -O2 -Wall -W -D_REENTRANT -DQT_NO_DEBUG -DQT_GUI_LIB -DQT_CORE_LIB -I/usr/share/qt4/mkspecs/linux-g++ -I. -I/usr/include/qt4/QtCore -I/usr/include/qt4/QtCore -I/usr/include/qt4/QtGui -I/usr/include/qt4/QtGui -I/usr/include/qt4 -I. -I. -I. -o moc_logindialog.o moc_logindialog.cpp
/usr/bin/moc-qt4 -DQT_NO_DEBUG -DQT_GUI_LIB -DQT_CORE_LIB -I/usr/share/qt4/mkspecs/linux-g++ -I. -I/usr/include/qt4/QtCore -I/usr/include/qt4/QtCore -I/usr/include/qt4/QtGui -I/usr/include/qt4/QtGui -I/usr/include/qt4 -I. -I. -I. userwindow.h -o moc_userwindow.cpp
g++ -c -pipe -O2 -Wall -W -D_REENTRANT -DQT_NO_DEBUG -DQT_GUI_LIB -DQT_CORE_LIB -I/usr/share/qt4/mkspecs/linux-g++ -I. -I/usr/include/qt4/QtCore -I/usr/include/qt4/QtCore -I/usr/include/qt4/QtGui -I/usr/include/qt4/QtGui -I/usr/include/qt4 -I. -I. -I. -o moc_userwindow.o moc_userwindow.cpp
g++ -o src main.o typetrain.o userwindow.o logindialog.o moc_logindialog.o moc_userwindow.o -L/usr/lib -lQtGui -lQtCore -lpthread
typetrain.o: In function `classUser::Instance()':
typetrain.cpp:(.text+0x49): undefined reference to `classUser::_self'
typetrain.cpp:(.text+0x52): undefined reference to `classUser::_self'
typetrain.cpp:(.text+0x78): undefined reference to `classUser::_self'
typetrain.cpp:(.text+0x7d): undefined reference to `classUser::_self'
collect2: ld returned 1 exit status
make[1]: *** [src] Ошибка 1
make[1]: Цель `first' не была пересобрана из-за ошибок.
make: *** [sub-src-make_default] Ошибка 2
make: Цель `first' не была пересобрана из-за ошибок.
*** Завершено с кодом: 2 ***

classUser::_self - ссылка на объект
//typetrain.h вырезка, кутэшных объектов здесь нет
#ifndef TYPETRAIN_H
#define TYPETRAIN_H

class classUser
{
public:
static classUser* _self;
static classUser* Instance();
classUser();
};
#endif
//typetrain.cpp
#include "typetrain.h"

classUser* classUser::Instance()
{
if(!_self) _self = new classUser();
return _self;
}
погуглив, заметил, что проблема распространенная, но решения что-то не нашел =(

>>>

tri10bit
()

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