flask приложение в 10 строк
from flask import Flask
app = Flask(__name__)
@app.route("/")
def hello_world():
return "<p>Hello, World!</p>"
if __name__ == '__main__':
app.run(
host='0.0.0.0',
port=5070,
)
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
AndroidSDK, JDK 64-bit и Windows 7 64-bit
Данная зверушка при попытке запуска SDK Manager или инсталятора ругается на отсутствие JDK, который на самом деле есть.
Решение:
Экспортируем и удаляем ветку реестра
[HKEY_LOCAL_MACHINE\SOFTWARE\JavaSoft\]
И импортируем её в ветку
[HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\]
(путем редактирования путей в файле)
Вуаля, Ондроед находит Жабу.
Для чего нужен 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 и получить один и тот же результат.
Единственное - нельзя обращаться по разным именам в одном блоке программы..
Вынести определение массива структур в другой файл
В продолжении к красоте
Объявляем (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;
}
…
Красота:
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, ""}
};
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
[Java] Новый IntelliJ IDEA 12
Вышла новая, 12 версия замечательного IDE.
Офф сайт: http://www.jetbrains.com/idea/index.html
Потыкал пока поверхностно.
+ Новая цветовая схема очень приятная глазу.
+ Добавился редактор форм для Дроида, теперь можно не использовать внешние утилиты
- При переходе на редактор форм и обратно закрывается дерево проекта. Раздражает.
- Очень долго искал, как же переключить схему
[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
[Android] Поворот экрана
Варианта управления экраном три:
1. Запретить поворот экрана
В раздел activity вписать
android:screenOrientation="portrait"
или
android:screenOrientation="landscape"
2. Обрабатываем поворот вручную
Т.к. метод onCreate() вызывается не только при создании Activity, но и при повороте экрана, можно отловить данные события.
Подробно можно почитать тут - http://developer.android.com/guide/topics/resources/runtime-changes.html (Кстати, там, возможно, опечатка)
Коротко:
Добавляем в класс Activity метод:
@Override
public Object onRetainNonConfigurationInstance() {
final MyDataObject data = collectMyLoadedData();
return data;
}
В котором производим сборку всех данных, которые нужно будет снова показать после поворота.
И в метод onCreate добавляем конструкцию:
final MyDataObject data = (MyDataObject) getLastNonConfigurationInstance();
if (data != null) {
loadMyData();
}
В которой данные распаковываем обратно.
3. Запрет автоматического пересоздания Activity
В AndroidManifest.xml дописать в раздел activity
android:configChanges="orientation|keyboardHidden"
Метод не рекомендуемый, т.к. в сложных приложениях придется самостоятельно обновлять данные внутри программы.
Подробнее можно тут: http://stackoverflow.com/questions/7818717/why-not-use-always-androidconfigchanges-keyboardhiddenorientation
Ну или в официальной доке.
