LINUX.ORG.RU

Избранные сообщения kravich

Архитектура database API класса

Форум — Development

Есть приложение на питоне, использует psycopg.

Есть класс для работы с базой, который инкапсулирует весь SQL код и предоставляет API. В частности, там есть метод для создания схемы, есть методы для чтения и записи определённых данных в/из базу. Условно это выглядит как-то так:

class Database:
    def __init__(self, dsn):
        self.db = psycopg2.connect(dsn)

    def CreateSchema(self):
        self.db.cursor().execute("CREATE TABLE foo ...")
        ...

    def GetFoo(self, id):
        cur = self.db.cursor()
        cur.execute("SELECT...JOIN...JOIN...FROM SELECT(...)...GROUP BY...ORDER BY)

        return [ MyFooObject(a=row[0], b=row[1], c=row[2] for row in cur.fetchall() ]

Этот класс уже разросся на несколько тысяч строк, поскольку методов API накопилось много, посему вопрос: какие best practices есть по разбивке его на небольшие части? Навскидку придумывается только что-то такое:

class FooAPI:
    def __init__(self, db):
        self.db = db

    def Get(self, id):
        self.db.cursor()
        cur.execute("SELECT...JOIN...JOIN...FROM SELECT(...)...GROUP BY...ORDER BY")

        return [ MyFooObject(a=row[0], b=row[1], c=row[2] for row in cur.fetchall() ]

class Database:
    def __init__(self, dsn):
        self.db = psycopg2.connect(dsn)

    def GetFooAPI(self):
        return FooAPI(db)

но как-то это топорно.

PS. ORM, естественно, не предлагать.

 , ,

slovazap
()

Разработчик PyParallel считает, что оффтопик удобнее для реализации параллелизации

Форум — Development

Для !Ъ: раз срач, два срач

Контекст: PyParallel — форк py3 с сохранением GIL и прочего, умеющий в многоядерность и линейно (!) скалящийся при этом. Проект в альфе с прицелом на то, чтобы влиться в py4. На данный момент оно состоит из платформо-пофигистических изменений в cpython и жёстко привязанной к оффтопику платформозависимой части (но если оно будет вливаться в cpython, то кроссплатформенным оно рано или поздно будет). Производительность выглядит неплохой для альфы.

Trent Nelson, разработчик всего этого а заодно core python commiter, высказывается:

(цитата для Ъ)

You could port PyParallel to Linux or OS X — there are two parts to the work I’ve done: a) the changes to the CPython interpreter to facilitate simultaneous multithreading (platform agnostic), and b) the pairing of those changes with Windows kernel primitives that provide completion-oriented thread-agnostic high performance I/O. That part is obviously very tied to Windows currently.

So if you were to port it to POSIX, you’d need to implement all the scaffolding Windows gives you at the kernel level in user space. <...> you’d have to manage your threadpools yourself, and each thread would have to have its own epoll/kqueue event loop. The problem with adding a file descriptor to a per-thread event loop’s epoll/kqueue set is that it’s just not optimal if you want to continually ensure you’re saturating your hardware (either CPU cores or I/O). <...>

As soon as you issue a blocking file I/O call on one of those threads, you have one thread less doing useful work, which means you’re increasing the time before any other file descriptors associated with that thread’s multiplex set can be served, which adversely affects latency. And if you’re using the threads == ncpu pattern, you’re going to have idle CPU cycles because, say, only 6 out of your 8 threads are in a runnable state. <...> The best example of how that manifests as an issue in real life is make –jN world — where N is some magic number derived from experimentation, usually around ncpu*2. Too low, you’ll have idle CPUs at some point, too high and the CPU is spending time doing work that isn’t directly useful. There’s no way to say make –j<just-do-whatever-you-need-to-do-to-either-saturate-my-I/O-channels-or-CPU-cores-or-both>

<...>with Windows, it’s a completely different situation. The whole kernel is architected around the notion of I/O completion and waitable events, not “file descriptor readiness”. This seems subtle but it pervades every single aspect of the system. The cache manager is tightly linked to the memory management and I/O manager – once you factor in asynchronous I/O this becomes incredibly important because of the way you need to handle memory locking for the duration of the I/O request and the conditions for synchronously serving data from the cache manager versus reading it from disk. The waitable events aspect is important too – there’s not really an analog on UNIX. Then there’s the notion of APCs instead of signals which again, are fundamentally different paradigms. The digger you deep the more you appreciate the complexity of what Windows is doing under the hood.

Дискасс.

TL;DR: ему лень писать уйму низкоуровневого клея для линуксов когда в винде внезапно оказались подходящие примитивы, с которыми всё просто работает.

Перемещено true_admin из talks

 , pyparallel,

x3al
()

Перегретая вода

Форум — Science & Engineering

Сап, S&E!

Вопрос по перегретой воде. Читаю в интернетах, что воду можно перегреть, если не дать ей испаряться, слоем жира например. Тогда она потихоньку наберет энергию для фазового перехода по всему объему и закипит вся разом. Правда ли это, или причина в другом? Как гарантированно остановить этот процесс?

Спрашиваю потому, что только что закончил чистить кухню. Поставил из холодильника сваренный вчера бульон на плиту (электро, не индукция) и включил на 8/9. Через какое-то время кастрюля взорвалась, крышка взлетела, и пока приземлялась, бульон залил все в радиусе двух метров. Просто буквально гребаный фонтан, в кастрюле почти ничего не осталось. Хорошо, что рядом не стоял — ожоги были бы гарантированы.

Цель вопроса — предотвратить этот довольно опасный исход в будущем.
Ну и чтобы рандомный читатель знал, что такая срань с ним может произойти не только в хим.лаборатории.

 , ,

arturpub
()

Таймеры в Си

Форум — Development

Понадобился таймер на Си. Нашёл реализацию, но мне нужна масштабируемость, если я захочу запилить 3, 4, 10 и.т.д. таймеров.

#include <signal.h>
#include <stdio.h>
#include <string.h>
#include <sys/time.h>

void timer_handler(int signum)
{
    puts("handler");
}

int main()
{
    struct sigaction sa;
    struct itimerval timer;

    memset (&sa, 0x00, sizeof(sa));
    sa.sa_handler = &timer_handler;
    sigaction (SIGVTALRM, &sa, NULL);

    /* Set interval 1 sec */
    timer.it_value.tv_sec = 1;
    timer.it_value.tv_usec = 0;
    timer.it_interval.tv_sec = 1;
    timer.it_interval.tv_usec = 0;

    setitimer(ITIMER_VIRTUAL, &timer, NULL);

    for (;;) {
    }
}

 

LittleBuster
()

Выбор осциллографа - приставки к пк

Форум — Talks

Важные параметры: Компактность, полоса пропускания не менее 40 МГц. Преимуществом будет наличие генератора сигналов, работа в GNU/linux.

Использоваться будет редко, для поиска неисправностей электроники, для отладки микроконтроллерных и прочих поделок. Правильность формы сигнала не сильно волнует.

Для серьезных измерений использоваться не будет.

Теперь о веселом: бюджет ограничен 10000р. Больше выложить не готов морально.

Интересует мнение владельцев подобных устройств в данной ценовой категории.

 ,

nighthawk
()

Цифровой осциллограф. Посоветуйте.

Форум — Talks

Сап, лор!

Уверен, среди вас есть электронщики. Поэтому прошу у вас совета в выборе данного прибора.

У меня сейчас ещё советский самый примитивный ОМЛ-2-76. Но в последнее время его возможностей стало чрезвычайно не хватать. А именно меня беспокоит отсутствие возможности записи сигнала, не говоря о возможности его дальнейшей постобработки и анализа.

Так что посоветуйте мне недорогой(в пределах 10 к) цифровой осциллограф с возможностью работы под линухом с открытым софтом.

А будет вообще замечательно, если можно будет работать с системой GNU/Radio.

P.S. У меня была идея взять hackRF юзать её как осциллограф. Но что-то сомневаюсь.

Подскажите.

 , ,

SL_RU
()

Makefile - исходный код в одной директории, результаты сборки - в другой.

Форум — Development

Здравствуйте. Написал простенький Makefile. При его вызове все исходники из директории ./src собираются в файл ./bin/firmware.elf. Сейчас объектные файлы остаются в директории ./src. Что поправить, чтобы объектные файлы компилировались в ./bin ? Сейчас:

$ tree
.
├── bin
│   └── firmware.elf
├── Makefile
└── src
    ├── blink.c
    ├── blink.h
    ├── blink.o
    ├── main.c
    └── main.o
Хочу:
$ tree
.
├── bin
│   ├── firmware.elf
│   ├── blink.o
│   └── main.o
├── Makefile
└── src
    ├── blink.c
    ├── blink.h
    └── main.с
Makefile
TARGET	= firmware.elf
DEVICE  = msp430f5529

SRC_DIR = ./src
BIN_DIR = ./bin

# Каталог компилятора
GCC_DIR = ~/ti/gcc/bin
# Путь до компилятора и утилит
CC = $(GCC_DIR)/msp430-elf-gcc
SIZE = $(GCC_DIR)/msp430-elf-size
# Путь до программатора
MSPDEBUG = /usr/local/bin/mspdebug
# Путь до системных заголовочных файлов
SUPPORT_FILE_DIR = ~/ti/gcc/include

# Ключи компилятора
CFLAGS = -I $(SUPPORT_FILE_DIR) -mmcu=$(DEVICE) -O2 -g -fdata-sections -ffunction-sections -Wall -std=gnu99
# Ключи линкера
LFLAGS = -L $(SUPPORT_FILE_DIR) -T $(DEVICE).ld -Wl,-gc-sections

###############################################################################
.PHONY: clean

# Получаем списоки файлов
SRCS = $(wildcard $(SRC_DIR)/*.c)
OBJS 	= $(SRCS:.c=.o)

all: $(TARGET)
	$(SIZE) $(BIN_DIR)/$(TARGET)
	

$(TARGET): $(OBJS)
	$(CC) $(CFLAGS) $(LFLAGS) -o $(BIN_DIR)/$(TARGET) $(OBJS) 
 
.c.o:
	$(CC) $(CFLAGS) -c $< -o $@

clean:
	rm -rf $(BIN_DIR)/$(TARGET) $(OBJS) 

program: all
	$(MSPDEBUG) tilib "prog $(BIN_DIR)/$(TARGET) reset"

 

arhiv_6
()

Шрифт виджета Weather в lxde

Форум — General

Подскажте где в конфигах изменить цвет шрифта виджета Weather? По дефолту чёрный шрифт, на тёмных обоях ничего не видно.

 , , ,

Algierd
()

Ob и мозаичное расположение окон

Форум — Desktop

(1) Собственно интересует, как прописать для хоткеев, что бы окно располагалось: на 1/2 экрана, 1/4 экрана и там все это слева-справа расположить можно?
(2) И если знаете, не подскажите еще регулировку размера окна, как-то задать можно и что бы окно при этом располагалось, при настройке по-центру?

Хотелось бы такое провернуть, при чистом openbox и без сторонних прог и примерно такое я реализовывал во fluxbox, кому интересно как и что я получить хочу в Ob, вот как я это реализовал при flux'е, в принципе, ничего особенного в ~/.fluxbox/keys прописал:

# 1/2 - WxH - 50x100
# Corner
Mod4 	1 	:MacroCmd {ResizeTo 50%  99%} 	{MoveTo 00 00 LowerLeft}
Mod4 	3 	:MacroCmd {ResizeTo 50%  99%} 	{MoveTo 00 00 LowerRight}
#Mod4 	1 	:MacroCmd {MoveTo 00 00 Left}
#Mod4 	3 	:MacroCmd {MoveTo 00 00 Right}
# Center - Max - Min
Mod4 	2 	:MacroCmd {ResizeTo 70%  88%} 	{MoveTo 00 00 Center}
Mod4 	4 	:Maximize
Mod4 	5	:Minimize
# 1/4 - WxH - 50x50
Mod4 	q	:MacroCmd {ResizeTo 50%  50%} 	{MoveTo 00 00 UpperLeft}
Mod4 	a	:MacroCmd {ResizeTo 50%  50%} 	{MoveTo 00 00 LowerLeft}
Mod4 	w	:MacroCmd {ResizeTo 50%  50%} 	{MoveTo 00 00 UpperRight}
Mod4 	s	:MacroCmd {ResizeTo 50%  50%} 	{MoveTo 00 00 LowerRight}

# 1 size +/- 20
Mod4 	Left 	:MacroCmd {ResizeHorizontal -20} {MoveTo 00 00 Center}
Mod4 	Right 	:MacroCmd {ResizeHorizontal +20} {MoveTo 00 00 Center}
Mod4 	Up 	:MacroCmd {ResizeVertical +20} 	 {MoveTo 00 00 Center}
Mod4 	Down	:MacroCmd {ResizeVertical -20} 	 {MoveTo 00 00 Center}
# 1 size +/- 01
Mod4 	Control		Left 		:Resize		-05	 00
Mod4 	Control		Right 		:Resize		+05	 00
Mod4 	Control		Up 		:Resize		 00 +05
Mod4 	Control		Down 		:Resize		 00 -05

 , , , ,

NK
()

GStreamer создание плагинов. Проблема с интерфейсами.

Форум — Development

Коллеги у меня возникла проблема при написании плагина для GStreamer. Проблема следующего характера. Я создал шаблон плагина, взяв его отсюда http://anongit.freedesktop.org/git/gstreamer/gst-template.git. Собрал это дело, и начал править. После исправлений пере собираю и смотрю на него gst-inspect:

$gst-inspect-1.0 --gst-plugin-path=$PWD watersign

(gst-plugin-scanner:3048): GStreamer-WARNING **: Failed to load plugin '/home/kozev/workspace/gst-template/gst-plugin/src/.libs/libgstplugin.so': /home/kozev/workspace/gst-template/gst-plugin/src/.libs/libgstplugin.so: undefined symbol: gst_watersign_get_type
No such element or plugin 'watersign'
Начинаю реализовать функцию gst_watersign_get_type и тут начинается самое интересное. Открываю документацию http://gstreamer.freedesktop.org/data/doc/gstreamer/head/pwg/html/chapter-adv... и смотрю:
static void	gst_my_filter_some_interface_init	(GstSomeInterface *iface);

GType
gst_my_filter_get_type (void)
{
  static GType my_filter_type = 0;
                                                                                
  if (!my_filter_type) {
    static const GTypeInfo my_filter_info = {
      sizeof (GstMyFilterClass),
      NULL,
      NULL,
      (GClassInitFunc) gst_my_filter_class_init,
      NULL,
      NULL,
      sizeof (GstMyFilter),
      0,
      (GInstanceInitFunc) gst_my_filter_init
    };
    static const GInterfaceInfo some_interface_info = {
      (GInterfaceInitFunc) gst_my_filter_some_interface_init,
      NULL,
      NULL
    };

    my_filter_type =
	g_type_register_static (GST_TYPE_ELEMENT,
				"GstMyFilter",
				&my_filter_info, 0);
    g_type_add_interface_static (my_filter_type,
				 GST_TYPE_SOME_INTERFACE,
                                 &some_interface_info);
  }

  return my_filter_type;
}

static void
gst_my_filter_some_interface_init (GstSomeInterface *iface)
{
  /* here, you would set virtual function pointers in the interface */
}
И тут уже начинаются не стыковки. Прототип для указателя GClassInitFunc. typedef void (*GClassInitFunc) (gpointer g_class, gpointer class_data); Что собственно уже не стыкуется. Хотя на это можно и забить. Но вот то, что такое GstSomeInterface и GST_TYPE_SOME_INTERFACE я просто не понимаю.

Кто может помочь и разъяснить концепцию интерфейсов для GStreamer? Желательно с примером.

 

imirrori
()

Сбор средств на написание учебника/самоучителя по gtkmm

Новости — Документация
Группа Документация

Gtkmm — это ОО интерфейс для работы с виджетами библиотеки GTK+ в C++. С его помощью можно весьма легко создавать графические приложения, и использование GTK известными приложениями показывает, что работать с ним весьма просто. Но у каждой технологии есть свои особенности, и gtkmm не ислючение; а стандартная документация подходит для тех людей, кто уже знает какой класс им стоит искать.

По этой причине сейчас идёт сбор средств на написания учебника по gtkmm. Требуется собрать 60 000 рублей.

Что будет?

Вот набор тем, которые вы можете ожидать:

  • Описание работы с существующими виджетами (объектами вашего приложения, такими как кнопка, окно, меню, и тд).
  • Упаковка виджетов, чтобы те смотрелись так, как вам этого хочется.
  • Работа с Glade, позволяющая создать графический интерфейс графическим способом (перетаскиванием мышкой различных компонентов).
  • Подключение графического интерфейса к логике программы (нажали кнопку, что‐то произошло).

Как будет

Учебник будет доступен всем и будет выложен как общественное достояние (CC0), что означает полное отсутствие каких-либо лицензионных ограничений.

Кто будет писать?

Писать буду я. Меня зовут Володя, я программист и образовательный деятель. Сейчас моя основная деятельность — это развитие «Почти Университета», образовательного видеоканала, к тому же за плечами преподавательская работа. Так что излагать материал доступным для всех образом я научился, и хотелось бы помочь людям создавать графические приложения в C++, используя свободные библиотеки и читая свободную литературу!

>>> Подробности

 , ,

anonymous
()

Загрузка исполняемого кода, статически слинкованного с glibc в mmap-нутую rwx память

Форум — Development

Допустим, есть программа, который полностью загружает файл в rwx область и запускает его на выполнение, например таким образом

int main(void)
{
  struct stat st;
  stat("somefile.bin", &st);
  void* ptr = mmap(0, st.st_size,
                   PROT_READ | PROT_WRITE | PROT_EXEC,
                   MAP_PRIVATE | MAP_ANONYMOUS, -1, 0);
  int fd = open("somefile.bin", O_RDONLY);
  read(fd, ptr, st.st_size);
  void (*foo)(void) = ptr;
  foo();
}
Какой надо составить скрипт для линкера, чтобы можно было статически скомпилировать обычный C код с необходимыми мне библиотеками в этот somefile.bin? Очевидно что надо все секции собрать в одну и чтобы это было все базонезависимо.

Я натыкаюсь на какие-то дурацкие ошибки линкера, вот например если пытаюсь с таким ld-скриптом сделать:

OUTPUT_FORMAT("elf32-littlearm", "elf32-littlearm", "elf32-littlearm")
OUTPUT_ARCH(arm)
ENTRY(_start)


SECTIONS
{
  .text 0x0 : AT ( 0 ) {
    *(.text)
    *(.text*)
    *(.init)
    *(.fini)
    *(.rodata)
    *(.data)
    *(.bss)
    *(.ARM.exidx*)
    *(.gnu.linkonce.armexidx.*)
    *(COMMON)
  }
}
Получаю выхлоп:
$ arm-linux-gnueabihf-gcc-4.8 -static -nostartfiles -Wl,--strip-all,-T ldscript main.c  -O3 -fPIC -o main
/usr/lib/gcc-cross/arm-linux-gnueabihf/4.8/../../../../arm-linux-gnueabihf/bin/ld: BFD (GNU Binutils for Ubuntu) 2.24 assertion fail ../../bfd/elf.c:4214
/usr/lib/gcc-cross/arm-linux-gnueabihf/4.8/../../../../arm-linux-gnueabihf/bin/ld: BFD (GNU Binutils for Ubuntu) 2.24 assertion fail ../../bfd/elf.c:4214
/usr/lib/gcc-cross/arm-linux-gnueabihf/4.8/../../../../arm-linux-gnueabihf/bin/ld: BFD (GNU Binutils for Ubuntu) 2.24 assertion fail ../../bfd/elf.c:4214
/usr/lib/gcc-cross/arm-linux-gnueabihf/4.8/../../../../arm-linux-gnueabihf/bin/ld: section .note.gnu.build-id loaded at [0000000000000000,0000000000000023] overlaps section .text loaded at [0000000000000000,00000000000559f7]
/usr/lib/gcc-cross/arm-linux-gnueabihf/4.8/../../../../arm-linux-gnueabihf/bin/ld: main: section __libc_freeres_ptrs lma 0x5639c adjusted to 0x563b4
/usr/lib/gcc-cross/arm-linux-gnueabihf/4.8/../../../../arm-linux-gnueabihf/bin/ld: .text has both ordered [`.ARM.exidx' in /usr/lib/gcc-cross/arm-linux-gnueabihf/4.8/../../../../arm-linux-gnueabihf/lib/../lib/libc.a(mmap.o)] and unordered [`.bss' in /usr/lib/gcc-cross/arm-linux-gnueabihf/4.8/libgcc_eh.a(unwind-c.o)] sections
/usr/lib/gcc-cross/arm-linux-gnueabihf/4.8/../../../../arm-linux-gnueabihf/bin/ld: final link failed: Bad value
collect2: error: ld returned 1 exit status
Зачем мне вообще этот .note.gnu.build-id и как его вырубить нафиг? Что значит has both ordered ... and unordered ... ? Какой тут нужен ld-скрипт? Как заставить это работать?

 , , , ,

SZT
()

собрать программу для старого linux без компилятора

Форум — Desktop

Посоветуйте что почитать или просто порекомендуйте на что обратить внимание: нужно статически собрать проект на C++ для машин с операционными системами CentOS5 (или ниже, пока мне не изветно) без библиотек C++ (устанавливать библиотеки нельзя), имея в распоряжени современный Linux с 3 ядром. Приложение использует библиотеку STL.

P.S. просто есть подозрения, что только ключиком -static не удасться так вот просто обойтись

 

developer-cpp
()

Помогите выбрать относительно стабильный дистрибутив

Форум — Desktop

Проблема следующая. На обычный стационарный компьютер нужно поставить Linux. Сначала попробовал Linux Mint 17 поставить, но эта система с видеокартами nVidia, видимо, не дружит: после установки и перезагрузки вылез чёрный экран с курсором-кругляшком, пытался через консоль редактировать Grub, блэклистить стандартный драйвер Nouveau - всё без толку. Поэтому ищу совместимый с GeForce 750 Ti дистрибутив, с простым интерфейсом и GUI при установке. Спасибо.

 , ,

Stepan12
()

Theming engine 'adwaita' not found

Форум — Desktop

У меня FC21[LXDE]. adwaita-gtk2-theme установлено. Запускаю когда с консоли pcmanfm или grub-customizer, выглядит всё вроде нормально, но вижу в выхлопе огромное количество строчек

Gtk-WARNING **: Theme parsing error: gtk-widgets.css:1773:19: Theming engine 'adwaita' not found
В чём может быть проблема?
Кстати, ещё странно, запускаю grub-customizer из менюшки, вроде запускается, спрашивает пароль рута и на этом глохнет, новых окон не открывается. Решил узнать в чём дело, запускаю из-под sudo с консоли, работает нормально, интересно, в чём дело...

 , , ,

VII77
()

История успеха версионирования протокола между девайсами

Форум — Talks

По просьбе beastie выкладываю хладный рассказ,

beastie

переведёшь стрелки на меня ;)

_________________________________________________
Предыстория
Дысклаймер: История произошла более чем полгода назад, поэтому технические подробности могу помнить не до конца

Существовало две разрабатываемые железки, назовем их А и Б. Разрабатывались в одном КБ и даже в одном отделе. Железка А делала свою часть работы по сканированию, а железка Б получала данные по кабелю, толщине которого позавидуют тетки из BRAZZERS. Стоит сказать, что прошивки обеих машинок были написаны на си. Ритм всему действию задавала машинка А. Ее «папаня» писал хэдэр с объявленной структурой примерно так:

typedef struct
{
   int32_t FFT1;
   int32_t FFT2;
   char Bflags:3;
   char Aflags:13;
} IrrMainType

И все было хорошо, на машинке Б существовала долговременная память, в которую при компиляции вгонялся бинарь для парсинга входных данных от А. Компилилось один раз, потом можно было уже этот блок не трогать, а спокойно заливать куда-то другие модули, компилять их отдельно и спокойно работать. Стоит сказать, что механизм компиляции придумали интересный - существовал USB разъем, к которому подключалась флешка, а в прошивке сделали команду «recompile <modulename>», так что в случае чего можно было флешку заменить устройством выхода в сеть (локальную или глобальную) и удаленно залить прошивку и попросить текущую работающую версию перекомпилиться и ребутнуться. Стоит отметить, что прошивка основного модуля рекомпилилась всегда на старте, беря сорцы со все той же флешки. Сделано это было для того, чтобы быть уверенным что в устройстве последняя версия.
P.S. Для тех кто не понял как - над всем этим работал сильнопорезанный линукс, который бутился, делал свои дела в виде компиляций и инициализаций, а потом запускал нужный бинарь.

_________________________________________________
Проблема
Дысклаймер: проблема была реальной, по крайней мере эту часть я помню на 100%

Устройствами занимались два «папани». Причем хорошо, когда они сообщали друг другу об изменениях. Основной проблемой было то, что программист А без предупреждения менял структуру передачи данных. Другими словами, структуры описанная выше с мановения руки становилась такой:

typedef struct
{
   int32_t FFT1;
   int32_t FFT2;
   int32_t rechargetime;
   char Bflags:3;
   char Aflags:13;
} IrrMainType
Понятное дело, что данные «ломались» и упорно не желали самостоятельно вставать на свои места в устройстве Б. Мне объяснили проблему и попросили подумать об ее решении.

_________________________________________________
Решение
Дысклаймер: предлагаю до чтения этой части самостоятельно подумать о решении, все данные даны.

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

[ Блок постоянной памяти ]
+-- Линукс
+-- Бинарь прошивки обработки входных данных
+-- Бинарь основной прошивки
+-- Текстовый файл с хешем
Как это было сделано в коде:
#define IRR_STRUCT(STRUCT) \
 typedef struct { STRUCT } IrrMainType;  \
 int32_t const structhash = strhash(#STRUCT);

 IRR_STRUCT
 (
       int32_t FFT1;
       int32_t FFT2;
       int32_t rechargetime;
       char Bflags:3;
       char Aflags:13;
 )
...
 int32_t oldhash = readhashFromFile;
 if (oldhash != structhash)
    sendCommand("recompile datamodule");
 writeHashToFile(structhash);
Разворачивалось оно в это:
 // Пробелы и переносы расставлены для наглядности.
 typedef struct 
 { 
    int32_t FFT1; 
    int32_t FFT2; 
    int32_t rechargetime; 
    char Bflags:3; 
    char Aflags:13; 
 } IrrMainType; 
 
 int32_t const structhash 
   = strhash("int32_t FFT1; int32_t FFT2; "
             "int32_t rechargetime; char B"
             "flags:3; char Aflags:13;");
Для функции хэша был взят FNV.

И таки знаете что? Работало без нареканий.

 , , ,

sambist
()

Как вы встраиваете SQL в свой код?

Форум — Development

Здравствуйте

Есть ли какие-нибудь общепринятые способы встроить SQL в свой код? Писать SQL в виде строк (да порой еще и склеенных с переменными) прямо по ходу кода, как мне кажется, плохой тон. Такое сложно поддерживать и отсутствие подсветки синтаксиса не добавляет удовольствия.

 

makoven
()

Сокеты. Основы. С++

Форум — Development

Доброго времени суток!

Столкнулся с проблемой получения данных через сокеты, если мы не знаем размера передаваемого файла. В случае html-страниц нечто подобное (http://cboard.cprogramming.com/cplusplus-programming/147455-how-receive-large...) работает нормально, но как поступить в случае, если файл формируется по запросу на сервер или в случае, если надо с определенной страницы скачать определенную картинку? Желательно подобное сделать без использования libcurl и прочих сторонних библиотек.

 ,

aido
()

Ошибка при выходе из сна Nvidia Optimus

Форум — General

Здравствуйте. Кто сталкивался с подобными проблемами.

На ноутбуке имеется Nvidia Optimus(Intel HD Graphics + Nvidia GT635M).Использую Kubuntu 14.04. Драйвера стоят 352.09(тестировалось также на 304, 311, 346).

Проблемы ровным счётом 2.

1) При отправке системы в сон и последующем пробуждении(при активной видеокарте Nvidia) наблюдаются дикие лаги на экране, всё изображение рассыпается на осколки по всему экрану, и ничего невозможно разобрать на нём. Помогает только перезагрузка ну или sudo service lightdm restart .

На видеокарте Intel всё нормально.

Что это такое и как с этим бороться?

2)Каждый раз, когда выходит новый драйвер, после того, как ставишь его (неважно как, через менеджер драйверов или просто через .deb) при переключении видеокарт с Nvidia на Intel всё хорошо,а обратно - пустая ошибка. Помогает только переустановка драйвера. Менеджер сеанса у меня Lightdm, если что. Закономерностей возникновения ошибки этой никак не смог выявить.

Как с этим бороться?

Заранее спасибо большое!

P.S. Может кто знает, когда реализуют динамиеческое переключение между видеокартами в Nvidia OPtimus? (то есть если нет нагрузки сильной, то всё просчитывается на встроенной, при нагрузке включается дискретная. В Windows реализована вроде как)

 , ,

zamazan4ik
()

Выручайте!

Форум — Development

У меня есть 3 месяца чтобы освоить работу с 3д графикой. Объем предсказать сложно, но примерно после этого срока нужно будет суметь разрабатывать ПО для симуляции работы манипулятора в пространстве.

Накидайте пожалуйста литературы про основы. Интересует opengl, openscenegraph, opendynamic engine, основы всего этого. Посоветуйте книги для введения в курс.

Спасибо!

 , , ,

OxiD
()