LINUX.ORG.RU

Сообщения Zhenek91

 

Не включается ввод русского языка в QtCreator

Форум — Development

Система Ubuntu 16.04 LTS QtCreator поставлен из онлайн инсталлятора пакета Qt с официального сайта.

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

Дело в кодировке? Что интересно, захожу инструменты-параметры-текстовый редактор-поведение-кодировки файлов по умолчанию - System. Ставлю вместо System Utf-8, нажимаю применить и ок - ничего не менятеся. Захожу в те же настройки - там волшебныи образом опять стоит System.

Есть идеи?

 ,

Zhenek91
()

Базы данных. Несколько вопросов для общего понимания

Форум — Development

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

Итак, есть таблица продаж с полями : saleId, productId, customerId, date

Теперь вопросы касающиеся РЕАЛЬНОЙ (как по идее устроено у тех же интернет магазинов) базы данных:

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

2)В системе хранится где-то в явном виде размер таблицы (переменная), инкрементируясь при каждой покупке, или его можно получить только пройдясь по таблице?

3)Как выбираются идентификаторы (Id)? Последовательно или случайно? Начиная с 0 или совершенно с любого числа? Верно ли предположение, что если пройдясь по таблице мы нашли минимальный идентификатор клиента (customerId) равным MIN и максимальный равным MAX, то число MAX - MIN даст число разегистрированных покупателей?

 

Zhenek91
()

Размещение устанавливаемых комронентов

Форум — Admin

Лично для себя нахожу неудобным стандартный принцип расположения установленных программ и компонентов. Когда приложения, библиотеки и прочее складываются в кучу в папках bin, lib, share и так далее. В принципе мне было бы по барабану, если бы я пользовался только менеджером пакетов. Но по факту бывают нужны самые свежие версии софта, например ставил gcc последней версии для отработки C++17. Соответственно приходится собирать все из исходников старыми добрыми configure, make , make install. И вот в этом случае приходится следить за всякими PATH, pkg-config, ldconfig.

Ладно если мне нужно просто поставить более свежую версию поверх старой: я тогда смотрю which ProgramName, если например выпало /usr/bin/ProgramName, то и при сборке ставлю --prefix=/usr и так далее по принципу. Только вот с библиотеками дело обстоит хуже: она может поставиться не в /usr/lib при заданном префиксе, а в какую-нибудь /usr/lib64 или /usr/lib/x86_64_linux-gnu или что-то в этом роде. В итоге нужная библиотека не записывается поверх, а их становится две версии в системе. Приходится править файлы в папке ld.so.conf.d и вызывать sudo ldconfig. Потом проверяю ldconfig -p, только он мне выдает, например, что есть чуть ли не пять ссылок libLibraryName.so на LibraryPath/libLibraryName.so. И как понять, какая в итоге библиотека используется? Вполне может оказаться так, что бинарник того же GCC будет запускаться последней версии, а библиотека libstdc++.so другой версии, если я ничего не путаю. А если на основе собранной из исходников свежей версии чего-либо нужно собрать из исходников свежую версию чего-то еще, то нужно маяться еще с pkg-config, чтобы configure был в курсе, что для сборки существует компонент свежей версии.

Я бы с удовольвствием ставил приложения по объектно-ориентированному принципу - Когда есть папка ComponentName (а она сама в каком-нибудь /opt например), а уже ее подпапки - это usr, lib, share , src, include и т.д. То есть чтобы в каталоге компонента были исключительно его данные и никакие другие. В таком случае и удалить установленный компонент легко, не парясь, есть ли make uninstall, не использовать построители пакетов, как напимер checkinstall и т.д. И иметь несколько версий компонента было бы нагляднее - были бо просто папки ComponentName-Version с данными.

Я просто хочу услышать мнение опытных - можно ли как-то грамотно устанавливать приложения по такому объектно-ориентированному принципу, грамотно прописывать библиотеки и делать pkg-config, как еще заставить компилятор дружить с кучей папок ComponentName/include в этом случае. Может ведь понадобиться действительно иметь несколько версий одного софта одновременно и выбирать для работы какой-то один в конкретное время и делать это по мановению файла-скрипта например.

Или это тухлая затея? И стоит мне прогнуться под правила Linux, а не Linux-u прогнуться под меня?

Я мог бы обойтись без такого принципа установки приложений, но как тогда при классических местах установки компонентов тотально контролировать на данный момент работающие версии или например удалить конкретную версию или компонент, не задев случайно другие файлы?

Если от моего поста веет «что-то мне не нравится linux» - это не так, просто хочу подстроить под себя. Система вроде как призвана как раз позволять настройку под себя.

P.S. Понимаю, что размещение базовых системных компонентов трогать не стоит, да и нафиг.

 , ,

Zhenek91
()

Вывод Unicode строки в Windows

Форум — General

Добрый день. Не понимаю, как правильно в Windows вывести строку с русскими буквами. Без юникода, понятно, выводятся странные символы.

В итоге в настройках проекта Visual Studio выбрал Use Unicode character set, пишу такой код:

include<iostream>
include<tchar.h>

int main(int argc, _TCHAR** argv)
{
   cout<<L"Работа завершена"<<endl;
   //или так: cout<<_T("Работа завершена")<<endl;
   return 0;
}

Но при запуске этого кода в виндоусовской консоли, она выводит и не странные символы и не русскую фразу «Работа завершена», а вообще какой-то шестнадцатеричный код 00F84208

Подскажите пожалуйста, в чем причина? Может дело в кодировке вывода самой консоли? Хотя системные сообщения Windows она исправно на русском пишет.

 , ,

Zhenek91
()

Размер и выравнивание

Форум — Development

Добрый вечер.

struct S
{
char a;
double b;
}

std::cout << sizeof(S) << std::endl;// Выдает 16

std::cout << sizeof(char) + sizeof(double)<< std::endl;// Выдает 9

std::cout << alignof(S) << std::endl;// Выдает 8

Объясните, пожалуйста, как получаются 16, 9 и 8?

Ну 9 легко получается, так как размеры char и double у меня 1 и 8 соответственно.

Насчет 16-и : дело, наверное в размере машинного слова, которое наверняка 4 байта, однако double и char по логике должны 3 машинных слова занимать - 12 байт, откуда 16 взялись? Впечатление такое, что 16 как наименьшее общее кратное 4-х(машинного слова) и 8-и.

С выравниванием мне вообще малопонятно, разве нельзя любую структуру выровнять по размеру машинного слова данной машины (т.е. скорее всего 4 байта)?

 ,

Zhenek91
()

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