LINUX.ORG.RU

Сообщения Aswed

 

Импорт структур из C/C++ в хаскель с учетом в GC

Форум — Development

Меня интересует импорт С и С++ структур в Хаскель Я знаю 1 способ это сделать:

struct a{
    int f1;
    int f2;
};
typedef struct a A;

A* makeA(int f1, int f2){
    A* p = malloc(sizeof(A));
    p -> f1 = f1;
    p -> f2 = f2;
    return p;
}
А потом в Хаскеле
foreign import ccall safe "makeA" c_makeA :: CInt -> CInt -> IO (Ptr())

newtype AStruct = A (Ptr ())

makeA :: Int -> Int -> IO AStruct
makeA a b = fmap A $ c_makeA (fromIntegral a) (fromIntegral b)
-- bla bla bla
Недостаток этого метода в том, что во-первых надо явно освобождать память за каждой структурой, во-вторых что бы не возникало проблем с ленью, функцию-конструктор надо оборачивать в монаду IO. Есть ли способ плодить структуры так, что бы их мог отслеживать сборщик мусора?

 , ,

Aswed
()

Свой язык программирования

Форум — Talks

Здравствуйте лоровцы, мне в этом году нужно писать диплом. Мне до этого очень нравилось играться с трансляторами и писать небольшие интерпретаторы на Хаскеле. Мне хотелось бы написать свой ОО язык. Но так как это диплом то на вопрос «нахрена этот велосипед?» ответ «не ну у меня шило в заднице, хотел ОО язык написать». Писать, язык общего назначения, который превосходил бы все аналоги по какому-нибудь критерию не хочу, ибо не уверен, что осилю. Не могли бы вы мне подсказать, может есть какие-нибудь системы, куда можно встроить это для автоматизации каких-нибудь задач.

Aswed
()

Ошибка при присваивании значения в uniform

Форум — Development

есть шейдеры

// vertex
attribute vec4 a_position;
attribute vec2 a_texCoord;
varying vec2 v_texCoord;

void main(void) {
    gl_Position = a_position;
    v_texCoord = a_texCoord;
}
// fragment
varying vec2 v_texCoord;
uniform sampler2D u_texture;
uniform int winRad;
uniform float ml;
uniform float width;
void main()
{
	vec4 tc = texture2D(u_texture, v_texCoord);
	for (int i=1; i<winRad; i++)
	{
		float shift = float(i) / width;
		tc += texture2D(u_texture, v_texCoord + vec2(shift,0.0));
		tc += texture2D(u_texture, v_texCoord - vec2(shift,0.0));
	}
	tc = tc * ml;
	gl_FragColor = tc;
}
Оно нормально инициализируется, glGetUniformLocation возвращает не нуль, но если пытаюсь писать в какую-нибудь униформу
например
glUniform1i(glGetUniformLocation(prg,"u_texture"), 0);
gl генерирует ошибку 502

 ,

Aswed
()

Haskell импорт сишных структур

Форум — Development

Есть такой код на С:

#include <malloc.h>

struct arr{
	int **arr;
	int maxI;
	int maxJ;
};
typedef struct arr Arr;

Arr *newArr(int i, int j){
	Arr *a = malloc(sizeof(Arr));
	a -> arr = malloc(sizeof(int*) * i);
	a -> maxI = i;
	a -> maxJ = j;
	for(int n; n<i; ++n){
		a -> arr[n] = malloc(sizeof(int) * j);
	}
	return a;
}
void freeArr(Arr *a){
	for(int i=0; i<a -> maxI; ++i)
		free(a -> arr[i]);
	free(a -> arr);
	free(a);
}

int peekArr(Arr *a, int i, int j){
/*	printf(":%Ld: %d %d %d %d\n",(long long)(a -> arr),a -> maxI, a -> maxJ, i, j);
	fflush(stdout);
	printf("> %d\n", a -> arr[i][j]);
	fflush(stdout);*/
	return a -> arr[i][j];
}

void pokeArr(Arr *a, int i, int j, int v){
	a -> arr[i][j] = v;
}

int maxI(Arr *a){
	return a -> maxI;
}

int maxJ(Arr *a){
	return a -> maxJ;
}
Если использовать это как модуль в сишной программе, то все функции работают корректно. Я хочу импортировать из него структуру и методы работы с ней, пишу так
{-# INCLUDE "struct.c" #-}
{-# LANGUAGE ForeignFunctionInterface #-}

import Foreign.C
import Foreign.Ptr

foreign import ccall unsafe "newArr" c_newArr	:: CInt -> CInt -> IO (Ptr ())
foreign import ccall unsafe "freeArr" c_freeArr	:: Ptr () -> IO()
foreign import ccall unsafe "maxI" c_maxI	:: Ptr () -> CInt
foreign import ccall unsafe "maxJ" c_maxJ	:: Ptr () -> CInt
foreign import ccall unsafe "peekArr" c_peekArr	:: Ptr () -> CInt -> CInt -> IO CInt
foreign import ccall unsafe "pokeArr" c_pokeArr	:: Ptr () -> CInt -> CInt -> CInt -> IO()

newtype IArr2 = IA (Ptr ())

newArr	:: Int -> Int -> IO IArr2
newArr maxI maxJ = fmap IA $ c_newArr (fromIntegral maxI) (fromIntegral maxJ)

freeArr :: IArr2 -> IO()
freeArr (IA a) = c_freeArr a

maxI	:: IArr2 -> Int
maxI (IA a) = fromIntegral$ c_maxI a
maxJ	:: IArr2 -> Int
maxJ (IA a) = fromIntegral$ c_maxJ a
peekArr	:: IArr2 -> Int -> Int -> IO Int
peekArr (IA a) i j = fmap fromIntegral $ c_peekArr a (fromIntegral i) (fromIntegral j)
pokeArr	:: IArr2 -> Int -> Int -> Int -> IO()
pokeArr (IA a) i j v = c_pokeArr a (fromIntegral i) (fromIntegral j) (fromIntegral v)

main = do
	a <- newArr 4 6
	print (maxI a, maxJ a)
	peekArr a 0 0 >>= print
	mapM_ (\(i,j) -> pokeArr a i j 0) [(x,y) | x <- [0..3], y <- [0..5]]
	pokeArr a 0 0 1
	pokeArr a 3 2 2
	flip mapM_ [0..3] $ \i -> do
		mapM_ (\j -> peekArr a i j >>= putStr.( ++ " ").show) [0..5]
		putChar '\n'
	freeArr a
функции maxI и maxJ работают нормально, а на peekArr или pokeArr ловлю сегфолт. Там в сишной функции peekArr закоменчены два вывода, так вот при вызове из хаскеля первый срабатывает, а второй нет, то есть где-то повреждается динамически выделенный блок. Как этого избежать? Компилятор хаскеля ghc 7.4.1

 , ,

Aswed
()

pure C ошибка при освобождении памяти

Форум — Development

Здравствуйте, у меня есть такой код, для кривой безье

struct pt{
	GLfloat x;
	GLfloat y;
};
typedef struct pt Pt;

struct rc{
	Pt lt;
	Pt rt;
	Pt rb;
	Pt lb;
};
typedef struct rc Rc;

Pt add(Pt a,Pt b){
	Pt r;
	r.x = a.x + b.x;
	r.y = a.y + b.y;
	return r;
}

Pt sub(Pt a,Pt b){
	Pt r;
	r.x = a.x - b.x;
	r.y = a.y - b.y;
	return r;
}

Pt mul(Pt a,GLfloat k){
	Pt r;
	r.x = a.x * k;
	r.y = a.y * k;
	return r;
}

void bezier(Pt p1, Pt p2, Pt p3, GLfloat step, Pt* res){
	Pt v1,v2;
	v1 = sub(p2,p1);
	v2 = sub(p3,p2);
	GLfloat c = step;
	res[0] = p1;
	int i;
	for(i=1; c < 1; ++i, c += step){
		Pt p = add(p1,mul(v1,c));
		Pt v = sub(add(p2,mul(v2,c)),p);
		res[i] = add(p,mul(v,c));
	}
	res[i] = p3;
}
Когда я запускаю его так, то все нормально:
int main(){
	Pt arr[11];
	Pt a,b,c;
	a.x = -1;
	a.y = 0;
	b.x = 0;
	b.y = 1;
	c.x = 1;
	c.y = 0;
	bezier(a,b,c,0.1,arr);
//	bezier((double)fax,(double)fay,(double)fbx,(double)fby,(double)fcx,(double)fcy,0.1,arr);
	for(int i=0; i<11; ++i)
		printf("(%f, %f),\n",arr[i].x,arr[i].y);
	return 0;
}
А когда так, то при освобождении памяти все крашится
int main(){
	Pt *arr = malloc(sizeof(Pt) * 11);
	Pt a,b,c;
	a.x = -1;
	a.y = 0;
	b.x = 0;
	b.y = 1;
	c.x = 1;
	c.y = 0;
	bezier(a,b,c,0.1,arr);
//	bezier((double)fax,(double)fay,(double)fbx,(double)fby,(double)fcx,(double)fcy,0.1,arr);
	for(int i=0; i<11; ++i)
		printf("(%f, %f),\n",arr[i].x,arr[i].y);
	free(arr);
	return 0;
}
ошибка выглядит так:
*** glibc detected *** ./textTest: double free or corruption (out): 0x0000000000e31010 ***
textTest: malloc.c:2451: sYSMALLOc: Assertion `(old_top == (((mbinptr) (((char *) &((av)->bins[((1) - 1) * 2])) - __builtin_offsetof (struct malloc_chunk, fd)))) && old_size == 0) || ((unsigned long) (old_size) >= (unsigned long)((((__builtin_offsetof (struct malloc_chunk, fd_nextsize))+((2 * (sizeof(size_t))) - 1)) & ~((2 * (sizeof(size_t))) - 1))) && ((old_top)->size & 0x1) && ((unsigned long)old_end & pagemask) == 0)' failed.
Aborted (core dumped)
make: *** [c] Ошибка 134
компилю gcc 4.6 без флагов оптимизации

 

Aswed
()

vim проверить состояние флага

Форум — Development

Я хочу написать функцию, которая бы меняла состояние флага hlsearch. Как проверить взведен ли флаг? Есть ли для этого какая-нибудь функция типа has()?

 

Aswed
()

javascript + mysql

Форум — Development

Здравствуйте, скажите есть ли способ связать javascript и mysql? Я знаю, что это язык выполняющийся на клиентской стороне, скрипт будет запускаться на машине с базой данных, для лабы нужно.

 ,

Aswed
()

Haskell Gtk не работает диалог выбора файла

Форум — Development

При вызове fileChooserGetPreviewFilename не открывается диалог выбора файла, возвращается Nothing, а после закрытия приложения в терминале появляется вот это

(entry:11617): Gtk-WARNING **: Attempting to store changes into `/home/algiz/.local/share/recently-used.xbel', but failed: Не удалось переименовать файл «/home/algiz/.local/share/recently-used.xbel.DC2DWW» в «/home/algiz/.local/share/recently-used.xbel»: сбой в функции g_rename(): Операция не позволяется

(entry:11617): Gtk-WARNING **: Attempting to set the permissions of `/home/algiz/.local/share/recently-used.xbel', but failed: Операция не позволяется
Как это можно исправить?

 ,

Aswed
()

Gtk и GLUT не хотят параллельно работать

Форум — Development

я запускаю форму на Gtk и окошко на GLUT в разных потоках, но они отказываются параллельно работать(окно глута отрисовывается 1 раз и зависает, пока не закрою гтк). Есть ли способ нормального взаимодействия Gtk и openGL в хаскеле? Вот как я пробовал если что:

import Graphics.UI.GLUT as GLUT
import Graphics.UI.Gtk as Gtk
import Control.Concurrent

gtkForm v = do
	initGUI
	win <- windowNew
	btn <- buttonNew
	ent <- entryNew
	box <- vBoxNew False 10
	Gtk.set win [Gtk.windowTitle := "hello world",
			 containerBorderWidth := 10,
			 containerChild := box]
	Gtk.set btn [buttonLabel := "press"]
	boxPackStart box btn PackGrow 0
	boxPackStart box ent PackGrow 0
	onClicked btn (do
		t1 <- entryGetText ent
		buttonGetLabel btn >>= entrySetText ent
		buttonSetLabel btn t1)
	windowSetDefaultSize win 200 100
	windowSetPosition win WinPosCenter
	onDestroy win (modifyMVar v (\a -> return (a-1,())) >> mainQuit)
	widgetShowAll win
	mainGUI	

glutForm v = do
	getArgsAndInitialize
	createWindow "win"
	ang <- newMVar 0
	displayCallback $= onDraw ang
	keyboardMouseCallback $= (Just$ inc ang)
	mainLoop
	modifyMVar v (\a -> return (a-1,()))

inc v _ _ _ _ = modifyMVar v (\a -> return(a+1,())) >> postRedisplay Nothing

onDraw :: MVar GLfloat -> IO()
onDraw v = do
	clear [ColorBuffer]
	loadIdentity
	readMVar v >>= flip rotate (Vector3 0 0 1)
	renderPrimitive Polygon$ mapM_ (vertex.(uncurry Vertex2)) [(0.5,0.5),(-0.5,0.5),(-0.5,-0.5),(0.5 :: GLfloat,-0.5)]
	GLUT.flush

main = do
	vSig <- newMVar 2
	forkIO (glutForm vSig)
	forkIO (gtkForm vSig)
	let loop = do
		q <- readMVar vSig
		if q == 0
			then return()
			else threadDelay 10000 >> loop in
		loop

 , ,

Aswed
()

python MySQLdb изменения не сохраняются

Форум — Development

Здравствуйте, я столкнулся с такой проблемой: все изменения базы данных которые я выполняю в скрипте, после завершения его откатываются назад. Например

#!/usr/bin/python
# -*- coding: utf-8 -*-

import MySQLdb as MDB

connect = MDB.connect('localhost','root','root','mytestbase')

cur = connect.cursor()
cur.execute("INSERT INTO pets (name,atype) VALUES ('rulf','cat')")
cur.close()

cur = connect.cursor()
cur.execute("SELECT * from pets")
for i in cur.fetchall():
	print i
cur.close()

connect.close()
При выполнении этого кода выводится таблица, с записью (rulf,cat), но после завершения скрипта её там нет.

 ,

Aswed
()

firebird база в online режиме

Форум — Development

Мне нужно вывести базу в онлайн режим. делаю:

sudo gfix -user SYSDBA -password root -online /home/aswed/databases/test.fbd
получаю:
Target shutdown mode is invalid for database "/home/aswed/databases/test.fbd"
Почему вылезает эта ошибка? Пароль от SYSDBA правильный, firebird доступ к папке с базой имеет.

 

Aswed
()

python + firebird

Форум — Development

Здравствуйте, мне нужно написать скрипт на питоне, который будет работать с фаербёрдом. на такой код

#!/usr/bin/python
# -*- coding: utf-8 -*-
import kinterbasdb

myconnection = kinterbasdb.connect(database='/home/aswed/databases/test.fbd',
				   databasename='testbase',
				   username='SYSDBA',
				   password='root')
 
mycursor = myconnection.cursor()
mycursor.execute('select (id, name, atype) from pets')
result = mycursor.fetchall()
for (idf,namef,typef) in result:
	print (idf + '|' + namef + '|' + typef)

myconnection.close

Получаю такую ошибку:
Traceback (most recent call last):
  File "./dbpets.py", line 8, in <module>
    password='root')
  File "/usr/lib/python2.7/dist-packages/kinterbasdb/__init__.py", line 478, in connect
    return Connection(*args, **keywords_args)
  File "/usr/lib/python2.7/dist-packages/kinterbasdb/__init__.py", line 641, in __init__
    b.dsn, b.dpb, b.dialect, timeout
kinterbasdb.OperationalError: (-902, 'isc_attach_database: \n  Your user name and password are not defined. Ask your database administrator to set up a Firebird login.')

Пароль SYSDBA правильный указан. Что не так?

 ,

Aswed
()

firebird создать базу

Форум — Development

Установил firebird2.5-classic, и flameRobin. Пытаюсь через него создать базу данных, получаю такую ошибку:

*** IBPP::SQLException ***
Context: Database::Create
Message: isc_dsql_execute_immediate failed

SQL Message : -902
Unsuccessful execution caused by a system error that precludes successful execution of subsequent statements

Engine Code    : 335544344
Engine Message :
I/O error during "open O_CREAT" operation for file "/home/aswed/databases/test.fdb"
Error while trying to create file
Permission denied

 

Aswed
()

slackware 14 установка пакетов

Форум — Linux-install

Здравствуйте, у меня такая проблема: после установки бинарного пакета исполняемый файл не запускается. Установил unrar и wine, и в обоих случаях вот такая проблема. при попытке запуска баш пишет

bash: /usr/bin/wine: Нет такого файла или каталога
хотя файл существует
aswed@slackware:~/Рабочий стол]$ ls -l /usr/bin/wine
-rwxr-xr-x 1 root root 7836 февр.  2 20:40 /usr/bin/wine

 

Aswed
()

Прикрутить glut к clisp

Форум — Development

Здравствуйте, я установил opengl и glut через quicklisp. opengl стал нормально, а вот для для работы с glut при каждом запуске нужно набирать (ql:quickload «cl-glut»), иначе пишет, что пакет glut не найден. Как его нормально прикрутить к clisp.

 ,

Aswed
()

bash нубовопрос

Форум — Desktop

Скажите пожалуйста, как эта строчка называется и где в .bashrc она прописана? http://s55.radikal.ru/i147/1302/76/95abb075ad0f.png

 ,

Aswed
()

Firefox плагины

Форум — Multimedia

Скажите, где лиса хранит прлагины? куда флешплеер распаковывать?

 

Aswed
()

slackware wifi

Форум — Desktop

Подскажите пожалуйста, как заставить слаку искать wifi и подключатся к нему. Вот что мне сказал ifconfig

eth0: flags=4099<UP,BROADCAST,MULTICAST>  mtu 1500
        ether 30:85:a9:0e:30:70  txqueuelen 1000  (Ethernet)
        RX packets 0  bytes 0 (0.0 B)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 0  bytes 0 (0.0 B)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0
        device interrupt 43  base 0xe000  

lo: flags=73<UP,LOOPBACK,RUNNING>  mtu 16436
        inet 127.0.0.1  netmask 255.0.0.0
        inet6 ::1  prefixlen 128  scopeid 0x10<host>
        loop  txqueuelen 0  (Local Loopback)
        RX packets 8  bytes 560 (560.0 B)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 8  bytes 560 (560.0 B)
        TX errors 0  dropped 0 overruns 0  carrier 0          
collisions 0

wlan0: flags=4098<BROADCAST,MULTICAST>  mtu 1500
        ether dc:85:de:15:bf:3a  txqueuelen 1000  (Ethernet)
        RX packets 0  bytes 0 (0.0 B)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 0  bytes 0 (0.0 B)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0

 ,

Aswed
()

Переключение раскладки KDE 4.8.5

Форум — Desktop

Установил slackware 14. В терминале раскладку настроил, жмакаю ctrl+shift - переключается, но после запуска kde перестает переключаться. Как это исправить? В настройках самой kde ни в сочетаниях клавиш, ни в языках не могу найти данной опции.

 ,

Aswed
()

slackware 14 установка

Форум — Linux-install

У меня на машине имеется убунта, и она при установке запихнула grub. Слака при установке предлагает поставить lilo. Если я не буду ставить lilo, grub найдет сам слаку при запуске?

 , ,

Aswed
()

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