LINUX.ORG.RU

Сообщения rip86oz

 

Нужна-ли поддержка старых видюх в игре?

(причина вопроса) Делаем игру. Проект не коммерческий -> энтузиам не резиновый -> время и силы хочется тратить наиболее рационально. Сейчас уже сделана бо`льшая часть граф. движка. (есть уникальные наработки и специфика, поэтому свободные двиги - не катят) - многие фичи, требуют ОпенЖЛ 3.3. Из относительно старых видюх двиг тестировался на NVidia 8600GS и 8400 (мобильная). (первые видюхи, поддерживающие ОпенЖЛ 3.3).

1-й вопрос - стоит-ли делать поддерку видюшех, которые ОпенЖЛ 3.3 не поддерживают?

2-й вопрос - поддерживает-ли ваша карточка опенЖЛ 3.3? ( или можно сообщить модель карты, и желательно сообщить, если карта не тянет 3.3 )

rip86oz
()

[Python]Узнать доступные разрешения экрана.

Сабж. Как узнать в Питоне доступные для монитора разрешения экрана. Т.е. чтобы не предлагать юзеру, например на широкоформатном 16:9 монике разрешения с соотношениями 5:4, 4:3 и др. Актуально и под Линукс и под венду. Лучше без использования внешних библиотек, особенно больших (кроме PIL, PyOpenGL) (есть вариант через Tkinter узнать текущее разрешении и от него плясать, но таки не очень красиво, имхо)

 

rip86oz
()

STUN и TURN

Пытаюсь обойти NAT. На питоне написал небольшой скриптик, который запросы делает к STUN-сервер-у. Всё хорошо было-б, но в некоторых местах (где трафик тоже слушается), 3478 порт закрыт - не удаётся, собственно, получить ответ. Дома - всё норм, ответ приходит. TURN вроде как может помочь, но инфы по не нему почти никакой нет - т.е. возможно придётся копаться в англоязыном материале, что требует гораздо бОльше времени. Кто-нибудь что-нибудь может подсказать, помочь?

rip86oz
()

TCP, файрвол. Как соединиться?

К примеру есть 2 компа - А и Б. На обоих стоит фаэрвол, блочащий запросы - т.е. никакой из компов к другому просто так подключится не может. По логике заводится 3-й комп - сервак С, который не заблочет запросы от А и Б. Вопрос - как с помощью этого сервака связать А и Б, без его дальнейшего участия в обмене данными. Т.е. он нужен только временно, чтоб связать А и Б. Зы. Решение, как понимаю есть, но где искать его описание или примеры реализации - х3.

rip86oz
()

[python]Без блокировки: сокеты и UI. Возможно?

Задача - обеспечить параллельную работу программы с сокетами и пользовательским интерфейсом. Т.е. сейчас у меня не получается сделать так, чтобы пользовательский интерфейс не блокировал работу сокетов, с которыми всё нормально. Какие есть варианты для создания UI, не блокируюшего основной цикл программы? Данные из УИ, естественно должны передаваться в основной цикл и наоборот. И ещё - подразумевается не только линуксовая платформа. Пробовал - thread, threading, pyGTK. Возможно в pyGTK есть какая-либо функция которая позволяет «опрашивать события» без вызова gtk.main()?

Есть мысль про subprocess & communicate(), но как-то неудобно. Да и через PIPE-ы передавать данные не шибко весело.

 

rip86oz
()

[pyhton]Поведение лок.переменных в модуле

Основная программа

import sc

while True:
    sc.tst()

Модуль sc
global tvar
tvar = 10

def tst():
    print(tvar)
    #sc.tvar += 1

Так вот, если раскомментить tvar += 1, то будет ошибка:

Traceback (most recent call last):
File «D:\oz86files\dev\learn py\mn.py», line 5, in <module>
sc.tst()
File «D:\oz86files\dev\learn py\sc.py», line 4, in tst
print(tvar)
UnboundLocalError: local variable 'tvar' referenced before assignment


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

 

rip86oz
()

[python]Отправка http-запроса на upload-файла на Yandex.narod2

Предыстория. Есть динамический IP адрес (на компе дома). Надо его(адрес) использовать в Javascript на Yandex.narod2. Решил использовать вариант с Ajax-ом, где айпишник будет считываться из файла. Комп будет периодически заливать свой айпишник. Задача - залить файл. Пишу на Питоне. Используя питоновский скрипт удалось зарегиться на яндексе, получить куки, распарсив ответ, а вот залить файл - никак, хотя ХТМЛ форма вроде простая. Последний запрос возвращает «200 ОК» (ну и ХТМЛ).

ХТМЛ форма (видимо после выбора файла запускается скрипт, который делает сабмит и видимо ещё что-то, но так скрипт и не нашёл):

<form id="b-far-upload" action="/filemanager/" method="POST" enctype="multipart/form-data">
<div class="b-upload-file">
<input type="file" id="b-far-upload-file" name="file" value=""/>
</div>
<input type="hidden" name="action" value="upload"/>
<input type="hidden" name="currentDir" value="/"/>
</form>

Питоновский код:

#отправка HTTP запроса на вход на яндекс.народ2
    conn = httplib.HTTPConnection("passport.yandex.ru")
    params = urllib.urlencode({'login': "xxxxxxxxxx", 'passwd': "yyyyyyyy"})
    headers = {"Content-type": "application/x-www-form-urlencoded","Accept": "text/html"}
    conn.request("POST", "/passport?mode=login&retpath=http://хххххххх.narod2.yandex.ru/edit/", params, headers)
    r1 = conn.getresponse()
    print r1.status, r1.reason
    data1 = r1.read()
    #print data1
    conn.close()

    #парсим куки ответа
    cookp = data1.find('Set-Cookie: ')
    cookend = 0;
    cooks = "Cookie: "
    while cookp > 0 :
        cookp += 12
        cookend = data1.find(';',cookp)
        cooks += data1[cookp:cookend] 
        cookp = data1.find('Set-Cookie: ',cookend)
        if cookp > 0 :
            cooks += "; "
    print(str(cooks))

    #шлём файл
    print("\n\n")
    conn = httplib.HTTPConnection("xxxxxxxxxxx.narod2.yandex.ru")
    postbody = '''--bndr777
    Content-Disposition: form-data; name="action"

    upload
    --bndr777
    Content-Disposition: form-data; name="currentDir"

    /
    --bndr777
    Content-Disposition: form-data; name="files"; filename="ipaddr.txt"
    Content-Type: text/plain

    xx.xx.xx.xx
    --bndr777--'''
    
    headers = {"Content-type": "multipart/form-data; boundary=bndr777","Content-Length": str(len(postbody)),"Accept": "text/html","Cookie": cooks,}
    conn.request("POST", "/filemanager/", postbody, headers)
    r1 = conn.getresponse()
    print r1.status, r1.reason
    data1 = r1.read()
    print("\n\n")
    print data1
    conn.close()

Если есть другие варианты - выслушаю. Только не надо говорить про то , чтоб купить статический АйПишник))

 

rip86oz
()

fork+exec в стиле system.

В ГУЕ есть две строки - одна путь к проге, вторая - аргументы (неопределённое количество). Если использовать system() без форка, то блокируется гуй, что очень-очень плохо. Если с форком, то создаётся лишний процесс, например:

+Parent

|

+-+Parent (форкнутый - лишний)

__|

__+--ChildProgram (вызванная system)

Когда ChildProgram завершается, то форкнутый Parent получает exit(), и всё нормально, НО!.. не красиво.

Как можно создать процесс, чтоб не заниматься парсингом аргументов для exec-a? Из головы чёрный дым идёт, простите, если вопрос глупый.

rip86oz
()

Вызов метода из другого потока

Есть .so библиотека. В ней класс. По вызову функции класса создаётся поток btnreadthread с циклом, в котором происходит периодическое чтение регистра USB устройства - код нажатой кнопки.

Есть GUI-шная прога. В ней создаётся объект того самого класса.

Задача - из потока (btnreadthread) отправлять сообщения в основной поток GUI-ной проги о том что кнопка нажата, ну и вызывать соответствующую функцию.

В GUI проге создавать никаких потоков ради получения этого сообщение, ясен пень, не надо. А получать каким-то способом надо. Первое что приходит в голову - D-Bus, но с ним дело ещё не имел. Читал инет, смотрел API. Насколько понял, GUI-ная прога (Qt \ GTK) имеет свой D-Bus адрес. Т.е. надо по это адресу отправлять сообщения, из потока btnreadthread. Если я не ошибаюсь и такой вариант считается нормальным - подскажите, как получить адрес... или что делать в противном случае. :-)

rip86oz
()

Событие подключения USB устройства без HAL

В программе (с++) надо получить событие того, что подключено usb устройство, с дальнейшей проверкой VID и PID.
Как лучше это сделать?
Инет говорит, что HAL хотят заменять на нечто другое, вроде DeviceKit, да и к тому-же что-то у меня не получается получить само событие.
Читал про udev, но в инете больше пишут про создание правил, а не как получить событие и т.п. В принципе можно сделать правило, чтоб запускалась другая прога, слала сообщение той которая его ждёт а потом завершалась, но как-то это коряво.
ЗЫ - у меня Lenny, если что.

rip86oz
()

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