LINUX.ORG.RU

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

Создание графических приложений на Python

Форум — Development

Хотелось бы хотя бы минимально освоить создание маленьких графических программ на Python. Мне, что называется, окончательно припекло мое незнание программирования, есть острая необходимость в некоторых маленьких утилитах, которые я нигде не могу найти.
Подскажите пожалуйста, на каком графическом фреймворке лучше всего начать освоение? Он должен быть максимально простым и не быть deprecated (активно развиваться, к примеру я бы PyQt4 сейчас не выбрал, потому что Qt4 уже отмирает в пользу Qt5, а переучиваться через пару лет не хочется). Посоветуйте пожалуйста также IDE, которая бы подходила для новичка и взяла на себя максимум рутинной работы (создание форм в визуальном редакторе, автоматическое создание необходимых конструкций для event'ов формы и т.д)

 , ,

Rinaldus ()

Скрин-каст.

Форум — Games

Нужна нормальная программа ( не SimpleScreenRecorder и ей подобные ) которая может запись игры не влияя на fps в игре. При SSR fps в Guild Wars 2 катастрофически падает. В общем жуть.

 , ,

x86th ()

LOR API

Форум — Linux-org-ru

Задумываюсь о написании клиента LOR для андроида (готовой реализации не нашел). В связи с чем закономерный вопрос - Есть ли у данного сайта какой-нибудь API или придется вручную парсить код страниц?

 ,

Daiquiri ()

Странное поведение Selenium WebDriver + Python с Facebook

Форум — Web-development

Осваиваю Selenium WebDriver. Пытаюсь заполнить профиль на фейсбуке. Когда давлю на «Редактировать профиль, попадаю на страничку редактирования. Пытаюсь заполнить родной город. Selenium находит линк, давит, аяксом подгружается форма. В этой форме находит инпут, пишет туда родной город, из выпадающего списка вариантов выбирает нужный, кликает. Все окейна. Но когда пытаюсь засабмитить форму, то не могу обнаружить кнопку. ни по имени, ни как либо еще.
Caught exception: <class 'selenium.common.exceptions.ElementNotVisibleException'> Message: u'Element is not currently visible and so may not be interacted with' ;
в inspect element давлю на кнопку, в цссках нету ничего похожего на display:none

Паста логина и апдейта профиля проблема в _update_hometown() да в принципе проблема в любой форме на той странице. все подгружаются аяксом, все выглядят одинаково, как внешне, так и внутренне.
Короче, то ли лыжи не едут, то ли я...

 ,

foreigner_web ()

Удалённое исполнение Х-приложений

Форум — General

СЕРВЕР имеет ПО которому обязательного требуется запуск графической оболочки. Иксы поставлены, но не стратуют при запуске системы, а для запуска и настроек ПО был установлен пакет ThightVNC.

Имеется компьютер-ТЕРМИНАЛ, который должен управлять приложениями на СЕРВЕРЕ так, словно они запускаются на самом терминале.

Итого: передача ОКНА приложения с СЕРВЕРА (из сессии ThightVNC) на ТЕРМИНАЛ.

Я вспомнил что когда-то случайно находил в сети информацию о том что дисплей ThightVNC работает со своим собственным окружением, недоступным для консольных пользователей и даже ОС, а ещё внутри ThightVNC запускается «своя» версия иксов (не та, что в системе), и потому доступны не все «плюшки», Так как ссылка была утеряна - я прошу подтвердить, по возможности, ссылками, что такой вариант проброса не допустим.

Остаются варианты:

1) Передача ОКНА приложения из удалённого Х-сервера (требуется запуск иксов на сервере).

2) Передача ДИСПЛЕЯ с удалённого сервера (ThightVNC передаёт картинку от запущенных на сервере иксов)

Однако не очень хочется, чтобы кто-то находясь рядом с сервером мог увидеть что-то происходящее на экране. Какой вариант решения посоветуете?

 

zzdnx ()

Как на python написать это в одну строчку.

Форум — Development

Нужно создать лист из известного количества листов. Сделал так :

lists = []

for i in xrange(list_count):
    lists.append([])

Наверняка же можно как то в одну строчку, не?

 ,

mio ()

Запуск скрипта при запуске программы.

Форум — Desktop

Как правильно сделать так, чтобы при открытии окон определенного класса запускался свой скрипт? Требуется DE-независимое решение.

 , ,

Kodesu ()

Переносимый python скрипт. Как сделать?

Форум — Development

Есть скрипт для копирования фото. В нем используются такие модули:

import argparse
import os
import re
import shutil
import sys
from PIL import Image
from PIL.ExifTags import TAGS

Нужно чтоб этот скрипт работал на любой убунте, и на тех где не установлен python-pil.

Почитала про distutils, не подходит, т.к. он для модулей, а у меня обычный скрипт

 

Jills ()

Скормить список файлов sed-u

Форум — Development

Есть команда для поиска файлов определенного расширения с BOM, выводит списком просто на новой строке каждый:

grep -rl $'\xEF\xBB\xBF' . | grep .txt
Есть команда удаления BOM из файла:
sed -i '1 s/^\xef\xbb\xbf//' ./path/to/file
Как вторую натравить на вывод первой?
$ первая | вторая
Не сработает? Проверять боязно, бэкапов нет.

 , ,

macsucks ()

Отправка SMS-сообщений через Python

Форум — Development

Привет! Возникла необходимость в том, чтобы написать скрипт, который отправляет sms-сообщение. Нужно для того, чтобы сделать автоматическую напоминалку, которой задаешь время и сообщение, а она отправляет в нужное время сообщение нужному номеру. Также можно отправлять e-mail с сообщением. Посоветуйте, что читать и куда копать.

Заранее спасибо!

 , , ,

aarexer ()

Курение RenPy в домашних условиях часть вторая!

Галерея — Скриншоты

Преодолев врожденное криворукие в плане программирования чего либо, я собрал первое демо пролога 2032DGN для десктопа и ведроида. Честно говоря мне психологически тяжело вникать в любой скриптовый, ну и просто в любой язык программирования. Правда тут самое главное и ключевое - правильная мотивация. Так что теперь в новелле будет всё что я изначально задумал: ответвления сюжета, интерактивные элементы и видеовставки. Продолжаем работать!

>>> Просмотр (1920x1080, 349 Kb)

 , ,

wst ()

чик-чик и в продакшон: как?

Форум — General

на сервере (ноутбуке, до которого тунелируется 80 порт по ssh, по wi-fi :-), создал для root'а ключик ssh-keygen -t rsa, скопировал себе, указал сие в .ssh/config

Host CRUX0
  Hostname 192.168.0.2
  User root
  IdentityFile ~/.ssh/CRUX0
  PasswordAuthentication no

теперь по ssh CRUX0 получаю доступ, окей.

перенес сайт на ноутбук (который мой продакшон, типа), и возник вопрос с редактированием файлов. каким конкретно образом вы пишете проект, тестируете его, а потом заливаете в продакшн? какой набор софта используете?

как оказалось, vim умеет редактировать файлы по разным протоколам, scp, ftp и тыды. но проблема в том, что у меня нифига не работает.

$ vim scp://CRUX100//srv/www/spfng.com/www/index.php

vim показывает, что передает файл по scp в /tmp, но сам vim отображает пустой файл. для примера, я просто делаю vim scp://CRUX100//tmp/test — пустой файл, ок, он новый, пишу в него что-нибудь, сохраняю. vim успешно сохраняет файл и отправляет на сервер, на сервере смотрю, все ок. снова, открываю этот же файл vim scp://CRUX100//tmp/test, а он пустой! проблем с scp, доступом нет, потому что файл сохраняется, но прочитать не может, это явно сам косяк плагина netrw, и как это починить не знаю :(

ничего по запросу «vim scp empty file» не нагуглил.

 ,

Spoofing ()

Пропало два гига

Форум — General

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

Подскажите плиз что-нибудь.

 

dimon575 ()

Вызов функции из другого класса

Форум — Development

Доброго времени. Есть два класса. Во втором классе вызываю функцию первого класса, которая использует переменные из других функций первого класса. Мне выдаёт ошибку что не видит таких переменных:

AttributeError: 'Ui_Dialog_cards' object has no attribute 'lol' 

Вот так вызываю в функции closeEvent во втором классе:

class second_window(QtGui.QWidget, Ui_Card_dialog):
    def __init__(self):
        QtGui.QMainWindow.__init__(self)
        self.setupUi(self)
        self.dialog_cards = Ui_Dialog_cards()
    def show_edit_window(self):
        self.show()
    def closeEvent(self, event):
        print "close"
        self.dialog_cards.test_print()

 , , ,

wojaovlad ()

Оптимизация nginx: 200k... 150k... 5k... 1k... wordpress... :D

Форум — Web-development

ощщем, ЛОР, пилю очередной тупняк, проходи мимо.

бенчмарк

ab -n 100000 -c 100 -k -H "Accept-Encoding: gzip, deflate" localhost/ 2>&1 | egrep "^(Failed|Requests)"

процессор Pentium G3258 с разгоном до 3.9GHz, остальное не важно. хотите пофапать на хай-лоад?

значит к делу. вот такой конфиг, (сервер _) отлавливает все запросы, которые не подходят под другие хосты.

server {
  listen 80;
  server_name _;

  location = /_.gif {
    empty_gif;
  }
}

ab localhost/_.gif выдаст вам результат в 200000 (двести тысяч!) запросов в секунду. empty_gif это модуль, поэтому такой быстрый.

к сожалению, со статикой картина чуть более печальна. ab localhost/index.html (файлик, что идет вместе с nginx'ом), сообщает о выполнении 125000 тире 150000 запросов в секунду, что тоже не так плохо. то есть, берете свой проект, оборачиваете всю динамику в fastcgi_cache, дабы nginx кэшировал запросы в статику и получаете очень быстрый сайт, мягко говоря.

рецепт успеха

worker_processes 4;
worker_priority -5;

worker_rlimit_nofile 9000;

timer_resolution 100ms;

events {
  use epoll;

  worker_connections 9000;
  multi_accept on;
}

чтобы не расходовать ресурс жесткого диска, I/O, желательно отключить логи, ну или, указать buffer=, да побольше.

error_log /var/log/nginx/error.log warn;

access_log /var/log/nginx/access.log main buffer=64k;
access_log off;
log_not_found off;

очень ресурсоемкая директива

ssi on;

с ней производительность просядет до копеечных 40000 тысяч на статике и на 20% на динамике, что лучше откажитесь от нее вообще. забудьте.

gzip on;

баллада о двух стульях и матери. придется выбирать между процессорным временем и линком. ресурсоемкая операция, производительность сервера страдает на 20%, но зато пропускная способность сети может быть увеличена в 3 раза за счет сжатия трафика.

open_file_cache max=9000 inactive=20s;
open_file_cache_valid 30s;
open_file_cache_min_uses 2;
open_file_cache_errors on;

с этим думаю ясно, кэш дескрипторов файлов. нужен.

забудьте о существовании if в nginx, не злоупотребляйте location, каждый отнимает много ресурсов.

любой другой ара-тюнинг по вкусу, на самом деле получится что-то вроде экономии на спичках, так например, tcp_nodelay дает разницу всего в 1000 запросов при 200000 к _.gif (empty_gif). посему смотреть нужно строго по ситуации, конкретных советов уже не дам.

теперь от статики к динамике. обязательно установить php opcache.

# curl http://php.net/distributions/php-5.5.23.tar.xz | tar -xJ -v
# cd php-5.5.23
# ./configure --disable-all --enable-opcache
# make build-modules
# install -m 755 modules/*.so /usr/lib/php/extensions
# echo "zend_extension=opcache.so" > /etc/php/conf.d/opcache.ini

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

upstream php-fpm {
  server unix:/var/run/php5-fpm.sock0 weight=100 max_fails=5 fail_timeout=5;
  server unix:/var/run/php5-fpm.sock1 weight=100 max_fails=5 fail_timeout=5;
}
location ~ \.php$ {
  try_files $uri =404;

  fastcgi_pass php-fpm;
  fastcgi_index index.php;

  fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
  include fastcgi_params;
}

настройка php-fpm'ов /etc/php/pool{0,1}.conf

[global]
log_level = notice
emergency_restart_threshold = 0
emergency_restart_interval = 0
process_control_timeout = 0
daemonize = yes

[pool0]
listen = /var/run/php5-fpm.sock0
listen.owner = www
listen.group = www
listen.mode = 0660

user = www
group = www

pm = static
pm.max_children = 8
pm.max_requests = 500

второй точно такой же

:%s/pool0/pool1

:%s/sock0/sock1

# /usr/sbin/php-fpm --fpm-config /etc/php/pool0.conf
# /usr/sbin/php-fpm --fpm-config /etc/php/pool1.conf
# /usr/sbin/nginx -t && /usr/sbin/nginx -s reload

а теперь получите пятикратный прирост производительности php. вот.

 , ,

Spoofing ()

облегчить java

Форум — Development

проблема: допустим, написан скрипт на 3 строчки на java. Потом нужно передать его пользователям, и чтобы он точно запустился, вместе со скриптом надо бандлить JDK. Ну вы понели да, 5 двухкилобайтных хэлловорлдов в таком исполнении займут 1 Гигабайт.

вопросы:

1. можно ли как-то автоматически обрезать openjdk/jre так, чтобы там осталось только то, что я действительно хочу использовать? Типа, у меня в программе нет никакого пути, который использовал бы вот эти 30 мегабайт классов, поэтому сделаем им rm-rf.

2. можно ли как-то в intellij idea (или eclipse) задать в качестве целевой платформы именно JRE, и чтобы оно дичайше кричало, стонало, и красило красным все случайно использованные фичи из JDK? (Если прикладывать JRE вместо JDK, 5 скриптов займут 250 мегабайт). (Пока даже не задумывался, что это за фичи такие... ну например, если захочу поднять какой-то веб-сервис с JSP на Jetty, то для запуска потребуется JDK, верно?)

 

stevejobs ()

IBM ноут

Форум — Linux-hardware

Есть возможность заиметь IBM ThinkPad T42P:)
слышал, что совместимость с Линем очень хорошая...
ноут красавчик. но стоит ли такой иметь?

 ,

oblepiha_pie ()

Насколько это близко к правде?

Форум — Science & Engineering

Тут в соседнем трэда дали ссылку на видео. Вначале идёт про работу мозга, с чем я более менее знаком и косяков не увидел
С 21 минуты пошла часть про квантовую физику, которая вышла за мои познания в предмете http://www.youtube.com/watch?v=p3mENgP3aWw
Субж

 , ,

Satou ()

Подкорректируйте SQL-запрос

Форум — Development

Подкорректируйте запрос с JOIN'ами.

Вот такая простенькая база данных:

CREATE TABLE "house" (
"id" INTEGER NOT NULL PRIMARY KEY, 
"name" VARCHAR(255) NOT NULL, 
"location" VARCHAR(255) NOT NULL)

CREATE TABLE "contract" (
"id" INTEGER NOT NULL PRIMARY KEY, 
"name" VARCHAR(255) NOT NULL, 
"house_id" INTEGER NOT NULL, 
FOREIGN KEY ("house_id") REFERENCES "house" ("id"))

CREATE INDEX "contract_house_id" ON "contract" ("house_id")

CREATE TABLE "accrual" (
"id" INTEGER NOT NULL PRIMARY KEY, 
"datestamp" DATE NOT NULL, 
"value" REAL NOT NULL, 
"contract_id" INTEGER NOT NULL, 
FOREIGN KEY ("contract_id") REFERENCES "contract" ("id"))

CREATE INDEX "accrual_contract_id" ON "accrual" ("contract_id")

CREATE TABLE "payment" (
"id" INTEGER NOT NULL PRIMARY KEY, 
"datestamp" DATE NOT NULL, 
"value" REAL NOT NULL, 
"contract_id" INTEGER NOT NULL, 
FOREIGN KEY ("contract_id") REFERENCES "contract" ("id"))

CREATE INDEX "payment_contract_id" ON "payment" ("contract_id")

Вот такой запрос к базе данных отрабатывает отлично:

SELECT "t1"."id", "t1"."name", "t1"."location", 
  Count(Distinct("t2"."id")) AS ccount, 
  Sum("t3"."value") AS all_payments 
FROM "house" AS t1 
LEFT OUTER JOIN "contract" AS t2 ON ("t1"."id" = "t2"."house_id") 
LEFT OUTER JOIN "payment" AS t3 ON ("t2"."id" = "t3"."contract_id") 
GROUP BY "t1"."id", "t1"."name", "t1"."location"

А здесь начинаются проблемы. При попытке указать в запросе еще один join - то данные начинают дублироваться и не правильно суммируются, результат Sum(«t4».«value») AS all_accruals завышен в несколько раз.

SELECT "t1"."id", "t1"."name", "t1"."location", 
  Count(Distinct("t2"."id")) AS ccount, 
  Sum("t3"."value") AS all_payments, 
  Sum("t4"."value") AS all_accruals 
FROM "house" AS t1 
LEFT OUTER JOIN "contract" AS t2 ON ("t1"."id" = "t2"."house_id") 
LEFT OUTER JOIN "payment" AS t3 ON ("t2"."id" = "t3"."contract_id") 
LEFT OUTER JOIN "accrual" AS t4 ON ("t2"."id" = "t4"."contract_id") 
GROUP BY "t1"."id", "t1"."name", "t1"."location"

З.ы. Как правильно составить SQL-запрос чтобы получить необходимые данные: правильное суммирование payment и accrual к каждой записи.

SQL сгенерировался через ORM, вот вся БД:

# encoding: utf-8
# dependencies:
# pip install peewee

from peewee import SqliteDatabase, Model, CharField, DateField, ForeignKeyField,\
                   FloatField, fn, SelectQuery, JOIN_LEFT_OUTER
import datetime
from random import randint

db = SqliteDatabase('test_pw.db')

class House(Model):
   
    name = CharField()
    location = CharField()
    class Meta:
        datadb = db
 
class Contract(Model):
   
    name = CharField()
    house = ForeignKeyField(House, related_name='contracts')
    class Meta:
        datadb = db
 
class Payment(Model):
   
    datestamp = DateField()
    value = FloatField()
    contract = ForeignKeyField(Contract, related_name='payments')
    class Meta:
        datadb = db
 
class Accrual(Model):
   
    datestamp = DateField()
    value = FloatField()
    contract = ForeignKeyField(Contract, related_name='accruals')
    class Meta:
        datadb = db
 
 
def fill_db():
    models = [House, Contract, Accrual, Payment]
    db.drop_tables(models, safe=True)
    db.create_tables(models)
    
#     for i in models:
#         print i.sqlall()
    
    houses = [{'name': u'TestHouse', 'location': 'Yellow street'},
              {'name': u'GreenHouse', 'location': 'Green street'},
              {'name': u'OpenHouse', 'location': 'Blue street'},]
    
    contracts = [{'name': u'Contract01', 'house': 1},
                 {'name': u'Contract02', 'house': 1},
                 {'name': u'Contract03', 'house': 1},
                 {'name': u'Contract04', 'house': 2},
                 {'name': u'Contract05', 'house': 2},
                 {'name': u'Contract06', 'house': 2},
                 {'name': u'Contract07', 'house': 2},
                 {'name': u'Contract08', 'house': 3},
                 {'name': u'Contract09', 'house': 3},]
    
    def generate_accruals(howmuch):
        temp_list = []
        base_date = datetime.datetime.today()
        
        for i in range (howmuch):
            data = {}
            data['datestamp'] = base_date - datetime.timedelta(days=i)
            data['value'] = randint(100, 500)
            data['contract'] = randint(1,len(contracts))
            temp_list.append(data)
        return temp_list
  
    accruals = generate_accruals(20)
    payments = generate_accruals(20)
  
    def summ_data(data):
        tmp = 0
        for item in data:
            tmp+=item['value']
        return tmp
    
    print 'Total accruals:', summ_data(accruals)
    print 'Total payments:', summ_data(payments)

    with db.transaction():
        House.insert_many(houses).execute()
        Contract.insert_many(contracts).execute()
        Payment.insert_many(payments).execute()
        Accrual.insert_many(accruals).execute() 

fill_db()

query = SelectQuery(House,
                    House,
                    fn.Count(fn.Distinct(Contract.id)).alias('ccount'),
                    fn.Sum(Payment.value).alias('all_payments'),
                    fn.Sum(Accrual.value).alias('all_accruals'),
                    )\
        .join(Contract, JOIN_LEFT_OUTER)\
        .join(Payment, JOIN_LEFT_OUTER)\
        .switch(Contract).join(Accrual)\
        .group_by(House)
        
# print query.sql()

for item in query:
    print item.name, item.location, item.ccount, item.all_payments , item.all_accruals


Результат:

Total accruals: 6291 # всего начислений Total payments: 5656

TestHouse Yellow street 3 5127.0 4065.0 # только в одной записи начислений 5127 GreenHouse Green street 4 6017.0 5525.0 OpenHouse Blue street 2 2171.0 1522.0

Всего начислений после запроса: 13315

 , ,

Siado ()

После каждой строки добавление строки с тем же порядковым номером из другого файла

Форум — General

Добрый день! Как сделать такую вещь? После каждой строки добавление строки с тем же порядковым номером из другого файла.

Допустим имеется два файла: 1 и 2.

1-ая строка 1-го файла

2-ая строка 1-го файла
1-ая строка 2-го файла

2-ая строка 2-го файла

А нужно получить:

1-ая строка 1-го файла
1-ая строка 2-го файла

2-ая строка 1-го файла
2-ая строка 2-го файла

Подскажите куда копать?

 , , , ,

chemtech ()