Записки программиста Программирование и не только

3Дек/180

vboxwebsrv в Ubuntu 14.04

После обновления Ubuntu с 10 до 14 через upgrade перестал запускаться vboxwebsrv.
Причем в логах всё нормально.

Конфиг vboxwebsrv (/etc/default/virtualbox):
VBOXWEB_USER='box'
VBOXWEB_HOST=127.0.0.1
VBOXWEB_PORT=18083

Конфиг phpvirtualbox (/var/www/html/vbox/config.php)
/* Username / Password for system user that runs VirtualBox */
var $username = 'box';
var $password = '*';

/* SOAP URL of vboxwebsrv (not phpVirtualBox's URL) */
var $location = 'http://localhost:18083/';

При попытке зайти на Веб после логина получаем стабильно:
Could not connect to host (http://127.0.0.1:18083/)

Все советы были испробованы и выяснилось, что vboxwebsrv, собсвенно и не запускается до конца. Т.е. его не видно при промотре открытых портов через
# netstat -tln

Далее пошел по подсказке - запустить vboxwebsrv вручную, а не как сервис.
vboxwebsrv -v

И, вот оно:
00:00:00.150329 SQPmp #### SOAP FAULT: [SOAP-ENV:Server]

И правда, сервер то не стартует.

Причем ни:
vboxwebsrv -H localhost -v
vboxwebsrv -H 127.0.0.1 -v

эффекта не дают...

Была найдена чудесная статья:
https://ubuntuforums.org/showthread.php?t=2196096
Оказывается, глючная ubuntu 14.04 с, не менее глючным, virtualbox не умеют в ip4...

Решение:
Исправляем конфиги:
* Конфиг phpvirtualbox (/var/www/html/vbox/config.php)
/* SOAP URL of vboxwebsrv (not phpVirtualBox's URL) */
var $location = 'http://ip6-localhost:18083';

* Конфиг vboxwebsrv (/etc/default/virtualbox):
VBOXWEB_HOST=::1

И не забываем проверить /etc/hosts:
# The following lines are desirable for IPv6 capable hosts
::1 ip6-localhost ip6-loopback

Ключевые слова: phpvirtualbox, vboxwebsrv, ubuntu

Метки записи: Нет комментариев
17Авг/160

QBitArray to QByteArray

QByteArray bit2byte(const QBitArray &__bits)
{
    // 
    QByteArray bytes;
    bytes.resize(__bits.count() / 8 + 1);    // Резервируем место
    bytes.fill(0);                           // Заполняем всё нулями

    // Конвертируем из QBitArray в QByteArray
    for(int b = 0; b < __bits.count(); ++b)
    {
        bytes[b/8] = (bytes.at(b/8) | ( (__bits.testBit(b) ? 1 : 0)<<(7-(b%8)) ) );
        // Конструкция (7-(b%8)) даёт прямой порядок. Для обратного (b%8)
    }

    return bytes;
}

Ключевые слова:
qbitarray2qbytearray

Метки записи: , , Нет комментариев
7Май/130

AndroidSDK, JDK 64-bit и Windows 7 64-bit

Данная зверушка при попытке запуска SDK Manager или инсталятора ругается на отсутствие JDK, который на самом деле есть.

Решение:
Экспортируем и удаляем ветку реестра
[HKEY_LOCAL_MACHINE\SOFTWARE\JavaSoft\]

И импортируем её в ветку
[HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\]
(путем редактирования путей в файле)

Вуаля, Ондроед находит Жабу.

24Апр/130

Запуск инсталятора Fedora 18 на 256Мб ОЗУ

Для установки ОС на машины с ОЗУ менее 512 Мб необходимо добавить в опцию загрузчика:
inst.memcheck=0

В общем строка будет выглядеть так:
vmlinuz initrd=initrd.img inst.stage2=hd:LABEL=Fedora\x2018\x20i386 quiet inst.memcheck=0

Ключевые слова:
fedora 18 installer 256 boot

Метки записи: Нет комментариев
22Янв/130

Для чего нужен union

Продолжаю открывать для себя С++...

Объединение служит для, как бы это ни казалось странным, объединения.
Это позволяет, записывая данные в одно поле union'а, одновременно получать эти же данные в другом поле. Причем поля могут быть разные по содержимому.

Пример:

typedef struct
{
  unsigned short fbNVRIncorrectCRC    :1;
  unsigned short fbConfigIncorrectCRC :1;
  unsigned short fbSPIInterfaceError  :1;
  unsigned short fbMFIncorrectCRC     :1;
  unsigned short fbMFWriteError       :1;
  unsigned short fbMFNotInstalled     :1;
  unsigned short fbEEJFatalError      :1;
  unsigned short fbUnused1            :1;

  unsigned short fbNotInitialized     :1;
  unsigned short fbNonFiscalMode      :1;
  unsigned short fbShiftOpened        :1;
  unsigned short fb24HourOverflow     :1;
  unsigned short fbEEJArchieveClosed  :1;
  unsigned short fbEEJNotActivated    :1;
  unsigned short fbMFNoMemoryForShift :1;
  unsigned short fbMFWrongPassword    :1;

  unsigned char dbDocumentType;
} ST_FRSTATUS;

typedef union
{
  ST_FRSTATUS stStatus;
  unsigned char dbStatus[3];
} UN_FRSTATUS;

И теперь можно записать данные в массив unsigned char dbStatus[3]; и потом получить их из структуры уже разобранными.

Т.е. можно обратиться к dbStatus[2] и к stStatus.dbDocumentType и получить один и тот же результат.
Единственное - нельзя обращаться по разным именам в одном блоке программы..

21Янв/130

Вынести определение массива структур в другой файл

В продолжении к красоте

Объявляем (declaration)

//st.h
enum {
    /* I/O ERRORS */
    ERR_INVALID_STATUS = 0x01,
    ERR_INVALID_FUNCTION = 0x02
};

struct fr_errs_struct
{
	int err;
	const char * const msg;
};

extern struct fr_errs_struct fr_errs [];

Определяем (definition)

//st.cpp
#include <st.h>

struct fr_errs_struct fr_errs [] = {
    {ERR_INVALID_STATUS,        "Функция невыполнима при данном статусе"},
    {ERR_INVALID_FUNCTION,      "В команде указан неверный номер функции"},
    {0,     ""}
};

Ну и функция для использования всего этого

const char* getText(int aErr)
{
    int i = 0;
    while(fr_errs[i].err && fr_errs[i].err != aErr)
    {
        i++;
    }
    return fr_errs[i].msg;
}
Метки записи: , Нет комментариев
18Янв/130

Красота:

 enum {
	/* I/O ERRORS */
	ERR_INVALID_STATUS = 0x01,
	ERR_INVALID_FUNCTION = 0x02
};

struct
{
	int err;
	const char * const msg;
} fr_errs [] = {
	{ERR_INVALID_STATUS,		"Функция невыполнима при данном статусе"},
	{ERR_INVALID_FUNCTION,		"В команде указан неверный номер функции"}
	{0,		""}
}; 
Метки записи: Нет комментариев
24Дек/120

Qt Digia или где взять?

Итак, знаменитый фреймворк продан сторонней организации.
И первое, что Вы поймёте при заходе на сайт qt.digia.com - скачать Qt просто так Вам больше не удастся.

Итак.
Есть сайт qt-project.org, где всё таки можно скачать последние версии библиотеки Qt.
Бинарники есть только для: 4.6.4, 4.8.4, 5.0.0
Qt creator только: 2.6.1
Все остальные версии доступны в виде исходных кодов тут qt.gitorious.org

MinGW в комплекте больше нет. Для 4.6.4 нужен gcc-4.4.0
Берём тут: mingw-2010.04-as-is.7z

Под Win8 штатный GDB работать отказался.
Брать тут: origin.releases.qt-project.org/gdb

Метки записи: Нет комментариев
6Дек/120

[Java] Новый IntelliJ IDEA 12

Вышла новая, 12 версия замечательного IDE.
Офф сайт: http://www.jetbrains.com/idea/index.html

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

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

По клику можно увидеть еще и палитру элементов

26Ноя/121

[Qt] UTF в 1251 и 1251 в UTF

На входе имеем строку в HEX виде, да еще и в кодировке CP-1251. Надо Переделать её в UTF-8
Я использовал для этого QTextCodec.

QByteArray msg = QByteArray::fromHex("cde5eff0e0e2e8ebfcedeee520f1eeeee1f9e5ede8e5204b4f4e5f544d5f484f53544b4e4620eef220d3cad2d121");
QTextCodec *codec = QTextCodec::codecForName("Windows-1251");
QString strf = codec->toUnicode(msg);
qDebug() << strf;

Переварили строчку и надо отправить её обратно, но на выходе нужен CP-1251
Процедура обратная.

QByteArray wtf_s(strf.toStdString().c_str()); //либо так
//wtf_s.append(strf); //либо так

QByteArray wtf = codec->fromUnicode(wtf_s);
qDebug() << wtf.toHex();

Ключевые слова: Qt, UTFtoCP1251, CP1251toUTF