• Зависает GUI при выполнении цикла в отдельном потоке. Как исправить?

    sheknitrtch
    @sheknitrtch
    У интерпретатора Python есть одна особенность: GIL. В интернете вы найдёте очень много статей о том, что это такое, и как GIL помогает/мешает писать многопоточные приложения.
    В случае использования QTimer, переменная timer локальная. Значит, после завершения метода run(self) эта переменная будет уничтожена и таймер никогда не сработает. Попробуйте написать:
    def run(self):
        timer = QtCore.QTimer()
        timer.timeout.connect(self.conf)
        timer.start(1000)
        self.timer = timer
    Ответ написан
    1 комментарий
  • Алексеев, Чеснокова "Решение задач вычислительной математики". Где взять нормальный pdf?

    sheknitrtch
    @sheknitrtch
    PDF версия книги может появится в свободном доступе лишь в нескольких случаях:
    • Автор безвозмездно выложил электронный вариант книги;
    • Автор выложил электронный вариант книги в каком-нибудь интернет магазине, где его можно купить за деньги;
    • Кто-то украл электронный вариант книги и выложил в интернете;
    • Кто-то сделал из отсканированных страниц книги электронный вариант.

    Пока не случится что-нибудь из вышеперечисленного, вы не сможете скачать PDF в интернете. Купите бумажный вариант, если книга вам действительно нужна.
    Ответ написан
    2 комментария
  • Что это за непонятная строчка в grab при работе с DOM-деревом?

    sheknitrtch
    @sheknitrtch
    Когда вы выполняете код
    g.go('http://yandex.ru')
    происходит следующее: функция "go" возвращает объект экземпляр класса Response из модуля grab.response. При этом интерпретатор пытается вывести этот объект на экран. Стандартный способ вывода объекта - это преобразовать его в строку:
    <полное.имя.Класса object at адрес_объекта_в_памяти>

    За преобразование объекта в строку отвечают два метода: __repr__ и __str__.

    Ваш код можно переписать следующим образом:
    >>> resp = g.go('http://yandex.ru')
    >>> print resp
    <grab.response.Response object at 0x11bea90>
    >>> print resp.__repr__() #не самый лучший способ
    <grab.response.Response object at 0x11bea90>
    >>> print repr(resp) #вот так получше
    <grab.response.Response object at 0x11bea90>

    команда "print" автоматически вызывает метод __repr__ для объекта resp.

    Ещё пример:
    >>> import re
    >>> re.compile('aaa')
    <_sre.SRE_Pattern object at 0x01295EE8>

    Если вам не нравится, что на экран выводится имя класса и адрес объекта в памяти, то можете в классе Response переопределить метод "__repr__", чтобы он возвращал строку на ваш вкус.
    Ответ написан
    Комментировать
  • Как расшифровать строку с помощью PyCrypto?

    sheknitrtch
    @sheknitrtch
    Проблема в том, что вы неправильно используете библиотеку для AES дешифрации. В сообщении об ошибки чётко написано, что в переменной iv должно быть ровно 16 байт. Код дешифрации должен выглядеть следующим образом:
    key = 'some secret key'
    iv = '0123456789012345' #Вектор инициализации.
                 #Его длина должна быть 16 байт ровно
    ciphertext = '\xe7^t\xd1\xad\xf7o\x8fw\xf3V\xbby\xa7\x1ei\xce8\xe3}\x1b\xeb\xb7\x9e\x7f\xce^\xe7\xdd\xfd'
    aes = AES.new(key, AES.MODE_CBC, iv)
    text = aes.decrypt(ciphertext)

    key - это секретный ключ
    iv - это вектор инициализации. Где его брать в вашем случае - не знаю. Это не обязательный параметр. Как написано в документации, можно его не передавать в метод new.
    ciphertext - это зашифрованный текст.
    Ответ написан
    Комментировать
  • DJango - почему не запускается сервер?

    sheknitrtch
    @sheknitrtch
    Судя по всему у вас в настройках Windows имя компьютера содержит русские буквы (имя начинается с буквы П? )
    Попробуйте следующее:
    1. Изменить имя компьютера согласно инструкции, чтобы в нём не было русских букв.
    2. Если не поможет, то откройте файл C:\Windows\System32\drivers\etc\hosts и добавьте туда строку:
    127.0.0.1 localhostНо учтите, что редактировать файл "hosts" можно только от имени администратора.

    P.S. Можете почитать длинную переписку по поводу этого бага на официальном сайте: Issue9377.
    Ответ написан
    2 комментария
  • Текстовый файл содержащий свой хеш - возможно ли такое?

    sheknitrtch
    @sheknitrtch
    Если в двух словах, то это можно сделать следующим "тупым" алгоритмом:
    # Придумываете значение хэш функции. Например: final_hash = '4817504d069b4c5082161b02a22116ad75f822b1'
    # Начинаете перебор, дописывая к исходной строке с хешем произвольные строки:
    txt = final_hash + 'a'
    txt = final_hash + 'b'
    txt = final_hash + 'c'
    ...
    txt = final_hash + 'z'
    txt = final_hash + 'aa'
    txt = final_hash + 'ab'
    ...
    # Для каждого варианта вычисляете значение хеша и сравниваете с final_hash. Как только calc_hash(txt) == final_hash - значит вы нашли искомую строку, которая содержит собственный хеш.

    Проблема в том, что такой перебор может занимать от 5 минут до 5`000 лет.
    Возможно существует какой-нибудь умный перебор с использованием радужных таблиц.
    Многое зависит от вида хеш функции.
    Ответ написан
    Комментировать
  • Как заставить консольную утилиту работать через прокси?

    sheknitrtch
    @sheknitrtch
    Как вариант, можно в файле hosts прописать для домена ya.ru в качестве IP адреса 127.0.0.1 и на локальной машине запустить Proxy сервер (например nginx) который будет передавать запрос дальше на 192.168.1.1:8080
    Но это решение будет работать только для доменов, прописанных в hosts.
    Ответ написан
  • Из-за чего ошибка при использовании simplejson .dumps ( )?

    sheknitrtch
    @sheknitrtch
    Модуль simplejson умеет серриализовать/десерриализовать экземпляры произвольных классов. Для этого у функции dumps есть параметр default. Пример:

    import simplejson
    
    class SomeClass(object):
        def __init__(self, x, y):
            self.x = x
            self.y = y
    
    def custom_serrializer(obj):
        if isinstance(obj, SomeClass):
            return {"x": obj.x, "y": obj.y}
        raise TypeError(repr(o) + " is not JSON serializable")
    
    print simplejson.dumps({"key": SomeClass(1,2)}, default=custom_serrializer)

    Подробности в документации.
    Ответ написан
    Комментировать
  • Jboss: почему происходит ошибка при развертывании?

    sheknitrtch
    @sheknitrtch
    Насколько Я понял из вашего кусочка лога, JBoss не может проинициализировать поле
    'sessionFactory' из-за ошибки java.lang.IncompatibleClassChangeError.
    Возможно проблема в различных версиях библиотек. Одинаковые ли версии JBoss? Сравните содержимое папки %JBOSS_HOME%/modules на локальной машине и на удалённой.
    Обычно, когда JBoss не может задеплоить WAR, то в логе есть Stack Trace ошибки. Было бы неплохо на него взглянуть.
    Ответ написан
    Комментировать
  • С чем сравнить число в python, чтобы в результате всегда было true/false?

    sheknitrtch
    @sheknitrtch
    Насколько Я знаю в Python 2.x константа None всегда меньше любого числа
    print None < 1024  #True
    print None < 0     #True
    print None < -1024 #True

    Но в Python 3.x такое сравнение недопустимо, и возникнет Exception.
    См. также вопрос на Stackoverflow
    Ответ написан
  • Как вызвать объект из другого объекта?

    sheknitrtch
    @sheknitrtch
    Видимо вы только недавно начали изучать программирование. Во первых стоит перевести на русский язык сообщение об ошибке и попробовать понять, что именно не нравится интерпретатору. Во вторых, используйте Google прежде чем задавать вопросы. И в третьих, не стоит вставлять кусок программы и ожидать, что кто-то будет читать ваш код и пытаться в нём разобраться.

    Ваша ошибка состоит в том, что вы пытаетесь вызвать метод insert для класса "WorkArea". Но этого класса нет такого метода. У него есть только метод __init__. Видимо должен быть вызван метод insert у класса tkinter.Text ?
    Я исправил класс WorkArea из вашего примера:
    https://gist.github.com/anonymous/8851536
    Проверить не могу, так как у меня не установлен tkinter.
    Замечания:
    1. Использование глобальной булевой переменной workArea - плохая практика
    2. Имя переменной workArea почти совпадает с именем класса WorkArea - плохая практика, их легко перепутать и получить много весёлых сообщений об ошибках
    3. Выражение self.new = ... заменяет метод "new" на объект. Не стоит называть метод и поле одним именем.
    4. Непонятно, зачем класс ToolBar наследует два других класса. Мне кажется, что можно объеденить классы "Operations" и "TooBar" в один, который наследовал бы tkinter.Frame.
    Ответ написан
    1 комментарий
  • Как обработать дамп википедии Wikipedia Extractor-ом?

    sheknitrtch
    @sheknitrtch
    Wikipedia extractor - это Python скрипт, который на входе получает XML дампа базы данных Wikipedia, а на выходе - текст. То есть должен быть установлен Python. Чтобы скормить этому скрипту базу данных, её нужно предварительно извлечь из BZ2 архива. Но распакованный файл будет занимать очень много места. Поэтому разработчики рекомендуют делать распаковку на лету, не сохраняя данные на винчестере. В Linux для этого есть утилита bzip2. Под Windows можно использовать консольный 7-zip. Команда будет следующая
    7z.exe  e -so DUMP.bz2 | python WikiExtractor.py -cb 250K -o extracted

    Всё, что идёт до символа '|' - это команда распаковки. А после - это команда запуска Wikipedia Extractor-а с какими-то параметрами.
    Я не проверял, работает ли такой способ, так как у меня нет дампа Wiki.
    Ответ написан
    1 комментарий
  • Что будет с биткоином, когда вычислительной мощности не будет хватать, чтобы майнить?

    sheknitrtch
    @sheknitrtch
    Если майнить будет не выгодно с точки зрения затрат электроэнергии, то майнеры могут ввести комиссию за транзакции. Сейчас каждый майнер получает фиксированную сумму за каждый подписанный блок данных - 25 BTC [1]. Но пользователь, который делает перевод BTC, может на своё усмотрение часть суммы перечислить майнеру, который будет делать Proof of work. См [2]
    Reward

    When a block is discovered, the discoverer may award themselves a certain number of bitcoins, which is agreed-upon by everyone in the network. Currently this bounty is 25 bitcoins; this value will halve every 210,000 blocks. See Controlled Currency Supply.

    Additionally, the miner is awarded the fees paid by users sending transactions. The fee is an incentive for the miner to include the transaction in their block. In the future, as the number of new bitcoins miners are allowed to create in each block dwindles, the fees will make up a much more important percentage of mining income.


    Другой вариант, объединять множество компьютеров в пулы, которые будут майнить не для своей выгоды, а для того, чтобы сеть Bitcoin существовала. Например есть проект Folding@Home, участники которого безвозмездно предоставляют мощности своих процессоров и видеокарт для расчёта процесса сворачивания белка. Почему бы пользователям Bitcoin не объединиться таким же образом?
    Ответ написан
    1 комментарий
  • Проинструктируйте по компиляции MySQL

    sheknitrtch
    @sheknitrtch

    Есть пошаговая инструкция по сборке MySQL в Linux: "Installing MySQL Using a Standard Source Distribution". Для отладочной версии MySQL надо на 6-ом шаге вместо команды
    ./configure --prefix=/usr/local/mysql
    Воспользоваться командой из статьи "Компиляция MySQL для отладки".
    Только остаётся один вопрос: если вы не смогли самостоятельно разобраться/нагуглить как компилировать MySQL, то зачем вам debug версия этой БД?

    Ответ написан
    2 комментария
  • Регулярка, проверяющая что строка состоит из пар одинаковых букв(могут различаться в регистре)

    sheknitrtch
    @sheknitrtch
    У меня получилась следующая регулярка:
    ((\w)\2)*

    При это должен стоять флаг 'Case insensitive'. Можете проверить регулярное выражение на regexpal.com, debuggex.com или Regular Expression Tester
    Ответ написан
    2 комментария
  • Коммит в SmartSVN

    sheknitrtch
    @sheknitrtch
    Я с такой проблемой не сталкивался на но StackOverflow.com есть несколько подобных тем: Strange error 500 with svn commit on one simple file, How do I correct “Commit Failed. File xxx is out of date. xxx path not found.”.
    Там подсказывают следующий варианты:
    • Выключить антивирус Касперского
    • Обновиться до SVN 1.6.9
    • Если есть конфликт директорий, то их надо предварительно разрешить:
      svn update
      svn resolved <the directory in conflict>
      svn commit

    • Переименовать/удалить файл .svn/all-wcprops затем обновить рабочую копию
    Ответ написан
  • Shine MP3 Encoder onAS3 Alchemy пустой файл

    sheknitrtch
    @sheknitrtch
    Вы неправильно пользуетесь классом ShineMP3Encoder (Я сужу по исходному коду этого класса).
    После создания переменной mp3Encoder необходимо вызвать метод .start()
    Причём нужно помнить об асинхронности работы ShineMP3Encoder. То есть нельзя вызывать .saveAs() сразу после вызова .start(). Нужно подписаться на событие Event.COMPLETE и в обработчике этого события можно сохранять полученный MP3 файл. Код будет выглядеть приблизительно следующим образом

    private function startEncoding() : void {
        mp3Encoder = new ShineMP3Encoder(recorder.output);
        mp3Encoder.addEventListener(Event.COMPLETE, onEncodingComplete);
        mp3Encoder.start();
    }
    
    private function onEncodingComplete(event : Event) : void {
        mp3Encoder.saveAs();
    }
    
    Ответ написан
    1 комментарий
  • Падает производительность приложения?

    sheknitrtch
    @sheknitrtch
    Я вроде бы нашёл в чем причина.
    Во-первых, методом тыка было определено, что если закомментировать строку 97:

    drawBoard();
    

    То никаких тормозов в Opera не наблюдается.

    Во-вторых, если в глобальную переменную gridOn записать false, то тормоза тоже исчезают.

    Ну и в-третьих, оказалось, что достаточно добавить после 127-ой строки

    gDrawingContext.beginPath();
    

    И тормоза исчезают в Opera навсегда.

    Мне кажется, что если не вызывать beginPath, то Opera запоминает все созданные с помощью lineTo линии при каждом вызове drawBoard. И когда вызывается stroke() то рисуется сетка от всех предыдущих кадров вместе взятых. Эту гипотезу нужно ещё проверить. Но судя то тому, что вызов beginPath исправляет проблему производительности, Я думаю, дело именно в этом.
    Ответ написан
    1 комментарий
  • Баг на твиттере? Куда писать репорт?

    sheknitrtch
    @sheknitrtch
    На сайте Twitter есть страница обратной связи. Если выбрать раздел «Фотографии», то откроется форма с кучей полей. Честно говоря, никогда не писал в службу поддержки Twitter-а и не подскажу, как правильно оформить баг. Но это однозначно надо делать на английском языке.
    Ответ написан
    Комментировать
  • Необходима jquery библиотека для построения графиков?

    sheknitrtch
    @sheknitrtch
    Как насчёт библиотеки Google Charts? Есть скроллинг и масштабирование.
    Ответ написан
    1 комментарий