LINUX.ORG.RU

Сообщения uuwaan

 

Как размещать код SQL в проекте?

Форум — Development

Есть проект десктопного приложения, который я сейчас активно рефакторю. Там и в коде бардак и в структуре каталогов. Положил я всё это в git, коммичу:

loader/ui: center OK button
loader/model: refactor SomeClass code
...

При этом:

  • файлики, меняемые коммитом «loader/ui», в каталоге проекта лежат тоже в loader/ui;
  • от коммита к коммиту проект должен собираться и работать;
  • коммит не должен изменять более одной области проекта.

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

Первое, что хочу сделать – распилить один файл на мелкие, по одному на каждую таблицу/вьюху/процедуру.

А дальше вопрос – куда их класть? Например, есть класс FooStorage с методом GetFoos, который дёргает хранимую функцию fnGetFoos. Получается, что код fnGetFoos – это как бы часть класса FooStorage, и лежать бы ей рядом с исходником FooStorage. Но я нигде не видел, чтобы SQL исходники хранили вместе с другими, видел только раздельное хранение.

Если я большой SQL распилю, а его части переносить не буду, тогда я буду вынужден нарушать свои же правила по ведению истории git:

  • изменю скрипт таблицы и закоммичу – поломаю код;
  • изменю и скрипт и код класса одновременно – коммит изменит больше одной области;
  • изменю и скрипт и код класса одновременно, и напишу в коммите loader/model – вроде бы всё верно, но один из изменённых файлов не лежит в подкаталоге, указанном в коммите.

Мозги плавятся, перфекционист внутри грызёт углы и воет: хочется сделать правильно и красиво. Возможно, я наркоман.

А как у вас хранятся SQL в проектах? Или может болт забить на аккуратную историю в git и просто фигачить? Проект веду я один, в принципе git могу вести как угодно, но хочется потомкам оставить хорошо структурированную историю.

 , ,

uuwaan ()

Десктоп за 40к

Форум — Linux-hardware

Здравствуйте, господа! Нуждаюсь в вашей помощи.

Проблема моя в том, что я, вернувшись из армии в конце 2010го, прикупил себе ноутбук Lenovo Z570 и до сего момента счастливо на нём кодил. Мир железок и их спецификаций стремительно удалился от меня, друзья, у которых можно было спросить, теперь сидят в планшетах и тоже не алё. И тут мне захотелось поиграть... Я не гонюсь за топовой графикой, макс настройками и т.д., просто хочется пройти выходящий скоро Starcraft не в минимальных настройках и попробовать Elite: Dangerous.

В общем, захотел собрать себе настольный компьютер. Цены на уже собранные - жуть, но что ещё хуже, я понял что совсем не понимаю циферок и буковок в названиях видеокарт, процессоров и памяти: что такое CL9/10/11, чем GTX950 от 960 отличается, чипсеты на материнках вообще тёмный лес, сколько под это хозяйство нужно ватт.

Помогите, пожалуйста, собрать системник в районе 40-45 тыс. Пожелания: ЦПУ Intel, ГА NVIDIA, небольшой но хороший SSD под систему, желательно, чтобы системы охлаждения были малошумные. Топовая производительность не нужна.

На этом всём будет крутиться Gentoo, на которой я буду для остальных машинок с Gentoo собирать бинарные пакеты, собственно поэтому и хочу Intel.

 , ,

uuwaan ()

Аналог стандартной библиотеки C++ для работы без исключений

Форум — Development

Приветствую.

Понадобилось сделать небольшой проектик, в котором есть специфическое требование: сборка с флагами -fno-rtti, -fno-exceptions (gcc). В таком режиме бОльшая часть стандартной библиотеки превращается в тыкву. Вместе с тем, как мне кажется, если немного изменить интерфейс контейнеров, то их можно было бы использовать.

Например, возьмём vector и пофантазируем: у него можно оставить только конструктор по-умолчанию, move-конструктор, а операции типа resize() сделать не void и кидающими исключения, а bool и возвращающими false.

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

 , , ,

uuwaan ()

C++: передача коллекций из динамической библиотеки.

Форум — Development

Есть у меня рабочий проект, который состоит из разделяемой библиотеки и утилит, которые выполняют прикладные задачи, дергая из неё функции. ПО пишется под Linux+Windows, и есть требования не использовать сторонние библиотеки. Из-за этого библиотека предоставляет не только функции, решающие конкретную проблему, но и всякие обёртки: рекурсивное сканирование каталога, чтение настроек из ini-подобного файла и т.д. И есть также требование, чтобы интерфейс библиотеки был максимально бинарно совместим: под Windows мы собираем в Visual Studio 2008, а другие проекты, юзающие библиотеку, могут быть собраны и в 2010, например; или в Линуксе мы собираем gcc + libstdc++, а клиенты библиотеки могут быть собраны чрез clang + libc++. Из-за этого интерфейс библиотеки оперирует только POD-типами данных и абстрактными классами с фабриками.

На примере функции сканирования каталога проиллюстрирую свою проблему. Не заморачиваясь на POD и совместимость, я бы написал её прототип так:

std::list<std::string> scanDir(const std::string &path)

Но стандартные контейнеры и строки по вышеописанным причинам в пролёте, а мне надо вернуть список.

Вижу два варианта:

1) пишем интерфейс «итератор по файлам», внутри либы пишем реализацию итератора, который хранит в себе std::list<std::string>, позволяет бегать по нему;

2) пишем интерфейс «коллбэк», передаём его в ф-цию, та его дергает, а мы на стороне клиента уже строим std::list<std::string>.

Покритикуйте пожалуйста подходы. Может, есть третий вариант?

 ,

uuwaan ()

mount(2) чудит

Форум — Development

Хочу в своём коде примонтировать самбовскую шару, для чего использую такой вот кусок, подсмотренный в mount.cifs:

mount("//192.168.1.11/share", "/mnt", "cifs", MS_NODEV | MS_NOEXEC, "ip=192.168.1.11,unc=\\\\192.168.1.11\\share,user=petya,pass=vasya");
Мне возвращают 0, типа всё сделано, а по факту каталог монтирования как был пуст так и остался пуст. mount -t cifs -v ... выдаёт в отладочной печати ровно такую же строку параметров, и у него получается примонтировать шару, а у моего кода — нет. Код исполняется из-под рута. Чего ему не хватает?

 ,

uuwaan ()

Перегрузка функций, принимающих строки в C++

Форум — Development

В стандартной библиотеке C++ есть куча функций вида:

void do(const char *text);
void do(const std::string &text);

Да, вроде здорово: можно передать и «сырую» строку и объект. А вот как быть, если строковых параметров два:

void set(const char *key, const char *val);

inline void set(const std::string &key, const char *val) {
    set(key.c_str(), val);
}

inline void set(const char *key, const std::string &val) {
    set(key, val.c_str());
}

inline void set(const std::string &key, const std::string &val) {
    set(key.c_str(), val.c_str());
}

Уже многовато перегрузок как-то. Пока что вообще не пишу перегрузок, принимающих std::string, но приписывать постоянно .c_str() некрасиво.

А можно написать так:

void set(std::string key, std::string val);

С точки зрения использования сплошная красота: принимаются оба типа строк, всего одна функция. Но если передать такой функции «сырую» строку, то она будет лишний раз скопирована в объект (поскольку от COW-реализации строк в C++ отказались), что нехорошо.

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

И ещё вопрос по оптимизациям в компиляторе. Вот такой код:

inline void set(std::string key, std::string val) {
    set_cargs(key.c_str(), val.c_str());
}

Может быть соптимизирован компилятором так, что создание промежуточного string не будет производиться, если оба параметра — const char *? Насколько я понимаю, так не получится, но может всё же кто-то сталкивался?

 , ,

uuwaan ()

Конструкция антенны для 3G-модема

Форум — Science & Engineering

В данный момент на даче 3G-модем стоит на шесте под крышей дома, воткнутый в РЭМО Connect 2.0. Для ещё большего усиления сигнала хочу поэкспериментировать с офсетной спутниковой тарелкой СУПРАЛ 0.9. Истории успеха в Интернете есть. Так как у модема антенна ненаправленная, то часть мошности будет уходить на сигнал, идущий к зеркалу, а часть — в противоположную сторону. Эту часть в статье на Хабре предлагается перенаправить на зеркало с помощью жестяной банки.

Вопрос такой: а нельзя ли вместо этой банки использовать Рэмо-Коннект?

 , ,

uuwaan ()

Проблема с прошивкой Samsung Galaxy Note II.

Форум — Mobile

С весны на аппарате стоит Cyanogenmod 10.1.3, сначала nightly-сборки, потом stable. Когда появились первые версии 10.2, я скачал, потыкал палочкой и восстановился из бэкапа на прежнюю версию. Теперь появился OmniROM, который клепается силами бывших разработчиков CyanogenMod, и сразу на базе Android 4.4. Захотелось попробовать его, и вот что я обнаружил: на моем аппарате теперь не стартует ни одна прошивка, отличная от CM10.1.3. Появляется анимация загрузки и крутится вечно. CM10.1.3 же ставится любым способом и прекрасно работает.

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

 , ,

uuwaan ()

Полное выгорание

Галерея — Скриншоты

Товарищ Extraterrestrial своим скриншотом надоумил меня как следует взяться за покраску всего и вся в тона Solarized Dark.

  • i3wm — самопальная раскраска
  • bash — самопальное приглашение
  • dircolors — тема dircolors.ansi-dark отсюда
  • moc — самопальная тема solarized_dark
  • htop — тема Black Night, я так понял, что там своих цветов не выставить.
  • ranger — самопальная тема solarized_dark
  • vim — тема Solarized отсюда
  • браузер vimb, открытый а-ля «со вкладками» средствами WM, тут
  • перекрашенная в соляру обоина Debian из пакета desktop-base

Архив со всем хозяйством.

Приятного глазовытекания!

>>> Просмотр (1366x768, 77 Kb)

 , , ,

uuwaan ()

Раскраска приглашения BASH: графика и текстовый режим

Форум — Desktop

Решил покрасить приглашение командной строки:

PS1="\n\[\e[1;31m\]┌(\[\e[0;34m\]\u@\h\[\e[1;31m\])-(\[\e[0;33m\]`cat /etc/place`\[\e[0;31m\])-(\[\e[1;32m\]\w\[\e[0;31m\])\n\[\e[0;31m\]└\[\e[0;31m\]┤\[\e[0m\]"

В urxvt покрасилось без проблем. В текстовом режиме — полный угар.

Точно знаю, что можно покрасить так, чтобы в текстовом режиме было нормально, но не знаю как.

uuwaan ()

KDE a-la Elementary

Галерея — Скриншоты

Выход Elementary OS Luna породил некоторый шум на ЛОРе и серию скриншотов, мол, какая это замечательная сборка, как в ней все продумано и т.д. Я честно попытался ее попробовать, но видимо отношения с Ubuntu у меня испортились окончательно — я понял, что потребуется много, очень много работы напильником. Развернул из образа обратно Debian с KDE, однако эстетические впечатления от Elementary сподвигли меня оставить прежнюю черноту в оформлении.

Debian Stable + Testing, из Testing сейчас стоят только KDE 4.10.5, Vim 7.4, Qupzilla 1.4.4; ШГ — OpenSans + Droid Sans Mono.

Также хочу спросить совета. У, например, QupZilla имеется своя иконка приложения. Когда ни одного окна не открыто, то отображается иконка из Faenza, а когда окно есть — то родная иконка QupZilla. Нет ли способа заставить панель задач всегда отображать «фаянсовую» версию?

UPD: проблема с иконками решилась очень качественно. Доделанная тема на домашнем ноутбуке.

>>> Просмотр (1920x1080, 1068 Kb)

 , , ,

uuwaan ()

Старые темы на первой странице трекера

Форум — Linux-org-ru

Сегодня при обновлении трекера постоянно вижу на первой странице сообщения, датированные 2011, 2012, январём 2013 года, вперемешку с опубликованными сегодня.

И чтобы два раза не вставать, JAMWiki, видимо, лично для меня, теперь постоянно выплевывает java.lang.NullPointerException. Ни в справку по LORCODE не посмотреть, ни что-нибудь другое.

 , ,

uuwaan ()

Три вопроса о разрешении монитора (в точках на дюйм)

Форум — Desktop

У меня неделя борьбы с ШГ, в связи с этим расширяю свои теоретические познания на эту тему. Есть вопрос по выставлению разрешения монитора в .fonts.conf и .Xresources.

Вопрос первый:

На домашнем ноутбуке

xpdyinfo | grep dots
показывает «квадратное» разрешение 96x96 точек, на рабочем компьютере в офисе — 103x105 точек. Найденные материалы гласят: вбейте команду, посмотрите разрешение, впишите число в конфиг. В случае «прямоугольного» разрешения мне надо вбить вертикальное, вбить горизонтальное, или посчитать некое среднее значение?

Вопрос второй:

В Гугле легко ищется калькулятор DPI: вбиваешь диагональ, вбиваешь разрешение матрицы, получаешь результат. Этот результат может быть использован в конфиге, или толку не будет? Значения в калькуляторе процентов на 5 отличаются от показаний xdpyinfo.

Вопрос третий:

Если у меня «прямоугольное» разрешение, то, считая среднее, получаю не целую величину. То же самое с калькулятором. Есть ли эффект от выставления в конфиге вещественных значений? Что касается .fonts.conf, то используемый там тег <double></double> кагбэ намекает.

 , ,

uuwaan ()

Не работает glx-alternative-mesa в Debian amd64

Форум — Desktop

На Debian 7 amd64 после установки glx-alternative-mesa:

$ update-alternatives --list glx
update-alternatives: ошибка: нет альтернатив для glx

На системах с гибридом Intel+NVIDIA при установке bumblebee-nvidia это приводит к полному отвалу 3D-функций на Intel, поскольку glx-alternative-nvidia нормально регистрируется и видна в выводе указанной команды, а mesa — нет.

На i386 всё нормально — видны обе альтернативы. Есть ли способ поправить, надо ли идти писать багрепорт по пакету glx-alternative-mesa?

uuwaan ()

Альтернатива дуалбуту

Форум — Talks

Периодически слышу о Винде на соседнем разделе «для поиграться». А ведь можно поступить умнее: сделать Windows хост-системой, а Линукс загнать в виртуалку.

Сам сделал по такой схеме: 1) основная система — Windows 7, которая шла в комплекте с ноутбуком. Обеспечивает хозяйство драйверами под всю периферию. С помощью Панели Управления отключены все опциональные компоненты Windows, в т.ч. IE и Media Player. Используется для запуска VirtualBox, игрушек и каких-нибудь тяжелых приложений, которых пока нет.

2) Debian Testing + MATE внутри VirtualBox на 2ГБ виртуальном жестком диске, все каталоги внутри home выведены в основную систему. Дополнительно решил поизвращаться и ограничил объем ОЗУ до 1024МБ с одновременным включением подкачки в zRAM, работает хорошо. Здесь проводится все то время, что не играется в игры: постоянно открыт Iceweasel с десятком вкладок, играет онлайн-радио, смотрятся киношки, иногда правится код проектов по работе.

Я тут о чем. О том, что ведь всем хорошо! Ноутбук холодный — утилита управления для ноута хоть и страшна как смертный грех, но дело свое знает. Linux в виртуалке прекрасен: никаких проблем с железом; звук есть; 3D есть, чтобы тени рисовать; снапшоты, позволяющие как угодно дико экспериментировать с конфигурацией системы. Пишу этот текст, и о том, что делаю это из виртуалки, напоминает только однопиксельная полоска внизу экрана — панель VirtualBox.

Короче, я откровенно наслаждаюсь Линуксом в таком варианте. Предал ли какие-либо светлые идеалы? Или так многие делают?

 , ,

uuwaan ()

Сделал wine-unstable 1.5.29 для Wheezy

Форум — Development

По случаю майских праздников немного разобрался с созданием пакетов под Дебиан и наклепал пакетов с WINE 1.5.29 под Wheezy.

Особенности:

  • за основу взяты пакеты wine-unstable из Debian Sid.
  • по этой причине, это не один большой пакет, как в Ubuntu или репозитории Liquorix, а набор, разделенный по подсистемам.
  • WINE собран без поддержки gstreamer, hal, opencl — ИМХО, малоприменяемые куски.
  • пакеты только i386 (под amd64 каменый цветок не выходит), но собраны в multiarch-стиле.

Проверено на Debian Wheezy amd64 путём 10-минутных забегов в L4D2 и Starcraft II через optirun, а также редактированием пары документов docx в MS Word 2003.

Если кому-то интересно, то надо решить, куда выложить это добро: хостинга нет, Dropbox, боюсь, не порадуется, если с него начнут качать больше чем 10 человек в неделю.

Оказалось несложно, поэтому планирую пакетировать каждый новый релиз.

UPD: Пакеты на Яндекс.Диске

 , ,

uuwaan ()

Не могу найти madvice()

Форум — Development

Успешно реализовал в проекте чтение и запись файлов через mmap, поскольку в моём случае это оказался самый производительный способ. Хотел протестировать, вставив в код вызов madvice(), однако в системе мана по функции нет, программа компилируется, но не линкуется, жалуясь на неразрешенный символ madvice. Это так и должно быть, или можно поставить какой-нибудь пакет?

 ,

uuwaan ()

Используемое DE и имидж человека

Форум — Talks

На работе тружусь за собственным ноутом и довольно часто что-то демонстирую коллегам: логи, куски кода. Коллеги в большинстве люди от Линукса далёкие, максимум — стандартная Убунта в виртуалке для поверхностного тестирования кроссплатформенного софта.

За два года работы перепробовал разные подходы к взаимодействию с компьютером: и общепринятый (стековый оконный менеджер, все иструменты — в графике, мышка — основной манипулятор) и «хакерский» (тайловый менеджер, везде зелёный Terminus, всё в консоли, всё с клавиатуры) и комбинировать пытался. В общем, экспериментировал.

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

Утрируя, если для монтирования флешки ты открываешь консольку, вбиваешь туда mount /dev/sdc1 /mnt и после этого в mc переходишь в /mnt, то ты — чудаковатый хакер из фильма, чувак несомненно умный, но со странностями, так что слушать тебя можно, но надо осторожно. А если у тебя скажем MATE в оформлении а-ля Linux Mint с симпатичной зеленой обоиной с завитушками, то ты вызываешь расположение и доверие.

Как вы считаете, имеет ли место такое быть в объективной реальности?

 

uuwaan ()

Автостарт bumblebeed в Ubuntu 12.04

Форум — Desktop

Есть ноутбук с Ubuntu 12.04, в которую из ppa:bumblebee-stable поставлен Bumblebee. В отличие от Debian, где bumblebeed поднимается безусловно, скрипт для Upstart поднимает bumblebeed, насколько я понял, во время логина пользователя через графический логин-менеджер:

# initctl show-config -e bumblebeed
bumblebeed
  start on login-session-start (job:, env:)
  start on desktop-session-start (job:, env:)
  stop on desktop-shutdown (job:, env:)
Я не пользуюсь логин-менеджерами, просто сделал автологин в консоль через mingetty, а в .bash_profile стоит строчка, которая поднимает иксы. На такой вариант Upstart не реагирует никак и bumblebeed не запускает. Попробовал поставить SLIM, но реакции опять нет: после логина bumblebeed не стартует. Сам bumblebeed исправен: по
# service bumblebeed start
поднимается и работает.

Вопрос мой таков: можно ли изменить условия старта bumblebeed, чтобы он либо запускался безусловно при старте системы, либо реагировал на поднятие X-сервера?

 , ,

uuwaan ()

Марафет не из пакетов

Галерея — Скриншоты

Как-то в Галерее если Debian, то зачастую суровое квадратное окружение — царство тайлинга, Terminus'а и Raleigh'а. Отчасти это обусловлено и тем, что набор тем в дистрибутиве давно устоялся, и новые веяния в него попадают нечасто.

Но ничего, вспомним, что у нас есть возможность создать .fonts, .icons и .themes в домашнем каталоге:

Вуаля! Получилось довольно неплохо, как мне кажется.

Система: Debian Wheezy
DE: XFCE 4.8.0
На экране: Deadbeef, Thunar и две панели XFCE.

>>> Просмотр (1366x768, 391 Kb)

 , , ,

uuwaan ()

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