воскресенье, 29 декабря 2013 г.

Python добавление разделителей разрядов в числах

Задача: имеем на входе строку, слова в которой разделены пробелом. Если в строке попадается число, то вставляем точки как разделители разрядов. На выходе нужно получить строку.
Например: text =

'123456' => '123.456'
'333' => '333'
'9999999' => '9.999.999'
'123456 567890' => '123.456 567.890'
'price is 5799' => 'price is 5.799'
'he was born in 1966th' => 'he was born in 1966th'

вторник, 24 декабря 2013 г.

понедельник, 23 декабря 2013 г.

пятница, 20 декабря 2013 г.

Linux подключение дополнительного IP

Иногда нужно настроить новую железку с IP по-умолчанию не из моей сети. Для этого надо добавить новый сетевой интерфейс с адресом из сети железки.

для добавления
sudo ifconfig eth0:1 <IP>

для удаления
sudo ifconfig eth0:1 del <IP>
sudo ifconfig eth0:1 down

или после перезагрузки настройка пропадет
eth0:2  и т.д. аналогично можно добавлять еще интерфейсы

четверг, 19 декабря 2013 г.

Python создаём словарь из двух списков

Задача: из двух списков получить словарь, где первый список ключи словаря, второй - значения

key_dict = [1, 4, 5, 9, 10, 40, 50, 90, 100, 400, 500, 900, 1000]
value_dict = ['I', 'IV', 'V', 'IX', 'X', 'XL', 'L', 'XC', 'C', 'CD', 'D', 'CM', 'M']
dict_out = {}

for x, y in zip(key_dict, value_dict):
    dict_out[x] = y

print dict_out
{1: 'I', 4: 'IV', 5: 'V', 9: 'IX', 10: 'X', 40: 'XL', 50: 'L', 90: 'XC', 100: 'C', 400: 'CD', 500: 'D', 900: 'CM', 1000: 'M'}
zip(key_dict, value_dict) создает список такого вида [(1, 'I'), (4, 'IV') ...]



суббота, 14 декабря 2013 г.

Python преобразовать список из [1, [2, 3], 4] в [1, 2, 3, 4]


Задача: преобразовать список из такого типа [1, [2, 3], 4]   в    [1, 2, 3, 4]

check_lst = [[[2]], [4, [5, 6, [6], 6, 6, 6]]]

def check(lst):
    check_bool = True
    out_lst = []
    copy_lst = list(lst)
    while check_bool:
        check_bool = False
        for i in copy_lst:            
            if isinstance(i, list):
                check_bool = True
                out_lst.extend(i)
            else:
                out_lst.append(i)
        if check_bool:
            copy_lst = list(out_lst)
            out_lst = []            
    return out_lst

print check(check_lst)

[2, 4, 5, 6, 6, 6, 6, 6]
Лучшее решение

пятница, 13 декабря 2013 г.

Python использование set с классом

Задача: создадим класс, создадим пустой set. Заполним set экземплярами созданного класса. Для примера пусть экземпляры будут случайным целым числом из диапазона 0-9. Теперь мы хотим удалить из set-а все экземпляры класса значения которых совпадают с "9" и "8"

Где это можно применить на практике? В gamedeveloping игра "Астероид", в set добавляем все летающие по экрану камни, пробегаемся по set-у и сверяем дистанцию между кораблем и камнями:
для этого вычисляем дистанцию между координатами центров фигур
>>> def dist(p, q):
>>>     return math.sqrt((p[0] - q[0]) ** 2 + (p[1] - q[1]) ** 2)
и вычитаем радиус корабля и радиус камня, если получившееся значение <= 0 значит столкновение, то добавляем экземпляр класса камень во временный set. После окончания обхода set-а с камнями - удаляем из этого set-а временный set (один или более камней при столкновении) и уменьшаем счетчик жизней кораблю.

четверг, 12 декабря 2013 г.

Инвайт для сайта по изучению языка Python


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

Python tic-tac-toe крестики-нолики 3Х3

Классические крестики нолики 3Х3. Функция должна возвращать в случае выигрыша символ победителя "Х" или "О". Если ничья (draw) - "D". На вход функции подается подобный 2-мерный массив список. Если клетка не заполнена, то символ "."

game_result = [
        u"OOX",
        u"XXO",
        u"OXX"]

Python преобразование числа [0-999] в текст

Например преобразовать 310 => three hundred ten

среда, 11 декабря 2013 г.

Python полезности для игры Астероид

Выход за границы области экрана
>>> self.pos[0] = (self.pos[0] + self.vel[0]) % WIDTH
>>> self.pos[1] = (self.pos[1] + self.vel[1]) % HEIGHT
pos - координаты центра движущейся фигуры

Увеличение скорости астероидов в зависимости от счета score
# increase rock's velocity using score
for rock in rock_group:
    for i in range(2):
        rock.vel[i] = rock.init_vel[i] + (rock.init_vel[i] * score * 0.03)
или
rock_vel[i] = rock_vel[i] * (1 + score / 3)

Столкновение спрайтов (p q - координаты центров сталкивающихся спрайтов, dist - расчет дистанции между спрайтами)
def dist(p, q):
    return math.sqrt((p[0] - q[0]) ** 2 + (p[1] - q[1]) ** 2) 

def collide(self, other_object):
        return dist(self.pos, other_object.pos) <= self.radius + other_object.radius

Python нахождение наиболее часто встречающейся буквы в тексте

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

  • ищем только буквы
  • нет зависимости от регистра ('a' и 'A' считаются одинаковой буквой)
  • ищем букву которая встречается максимальное количество раз
  • если таких букв несколько, то результат выдаем первую встречающуюся по алфавиту

Python set методы с наглядными рисунками

Не хватает графики для ясного понимания действий методов set. Хотелось бы как в SQL рисунки пересечений окружностей при работе с join. И вот попал на такой сайт . Выкладываю оттуда картинки.
Union |
>>> s1 = set([1, 2, 3])
>>> s2 = set([3, 4, 5])
>>> print s1.union(s2)
set([1, 2, 3, 4, 5])

Python проверка на сложность пароля

Например, установлены такие требования к паролю:


  • не меньше 8 символов
  • должна присутствовать хотя бы одна цифра [0-9]
  • должна присутствовать хотя бы одна заглавная буква [A-Z]
  • должна присутствовать хотя бы одна строчная буква [a-z]


вторник, 10 декабря 2013 г.

Ошибка "Служба временно недоступна, попробуйте позже" при входе в Семейную безопасность

В составе пакета Windows Live есть Семейная безопасность. Ее можно использовать для ограничения доступа к сайтам, как полное ограничение с входом только на сайты входящие в белый список, так и более лояльное ограничение:

воскресенье, 8 декабря 2013 г.

Использование lambda вместе со списком в Python

Очень наглядный пример использования lambda с методами списков в Python

>>> foo = [2, 18, 9, 22, 17, 24, 8, 12, 27]
>>> 
>>> print filter(lambda x: x % 3 == 0, foo)
[18, 9, 24, 12, 27]
>>> 
>>> print map(lambda x: x * 2 + 10, foo)
[14, 46, 28, 54, 44, 58, 26, 34, 64]
>>> 
>>> print reduce(lambda x, y: x + y, foo)
139


>>> digit = [1, 2, 3]
>>> 
>>> print [(lambda x: x * x)(x) for x in digit)]
[1, 4, 9]
или лучше
>>> print [x * x for x in digit]

Еще интересный пример (вырезать в строке лишние дефисы)

пятница, 6 декабря 2013 г.

XP 0x80246008 ошибка Windows Update

Такая ошибка возникает если проблемы с сервисом "Фоновая интеллектуальная служба передачи (BITS)". Используется BITS Windows для скачивания в фоновом режиме в том числе обновлений. Должна присутствовать в списке сервисов, и включена Auto.  У меня появилась эта ошибка 0x80246008 после Microsoft FixIt - одно лечили другое покалечили. Вместо этой службы у меня появилась служба с таким именем "@%SystemRoot%\System32\qmgr.dll -1000"
В журнале запись ошибки "BITS error 1290: 0x50a"

Решение: экспортировал с рабочей тачки ветку  HKEY_LOCAL_MACHINE\SYSTEM\ControlSet\Services\BITS  
старую удалил новую импортировал, ребутнулся и OK

Содержимое ветки выкладываю здесь:

Настройка WiFi роутера

  1. Forward - UPnP   Некоторые роутеры или клиенты могут не совсем корректно поддерживать UPnP, либо вручную сделан проброс портов и, следовательно, функционал UPnP не нужен. Можно отключить.
  2. WPS    Подключаться будем с паролем установленным вручную, поэтому можно отключить.
  3. Wireless security - WPA2 (Установить пароль)
  4. Также не забудем задать имя WiFi сети. Для более стабильной связи подбираем канал, в настройке сети канал желательно поменять с Auto на более поздний (например 9)

пятница, 29 ноября 2013 г.

Excel 2010 как поменять вид столбцов на буквенные или цифровые

Вид столбцов - R1C1 или A, B

Файл - Параметры - Формулы - Стиль ссылок R1C1

Запуск панели управления из командной строки Windows XP

Задача: есть компьютер с Windows XP загруженный с правами пользователя. Есть пароль Администратора на компьютер. Нужно не меняя сеанса зайти в Панель управления с правами Администратора.

Решение: запускаем консоль cmd с правами Администратора и оттуда следующие команды:

Konica Minolta bizhub 164 ошибка M2

Ресурс фотобарабана - 55.000 страниц.
После чего аппарат блокируется и выдает сообщение "Ошибка M2 Вызовите сервис".

Чтобы сбросить это сообщение, нужно войти в сервисный режим:

четверг, 28 ноября 2013 г.

Активация Windows 7 через размещение в BIOSе таблицы SLIC2.1

Активация Windows 7 для нетбука Acer Aspire One D257
Задача: требуется чтобы активация Windows происходила без участия сайта Microsoft, необходимо вшить в BIOS таблицу SLIC2.1, туда загрузить сертификат производителя Acer и установить ключ OEM:SLP Acer

Как я уже писал, последняя версия BIOS, которая была на сайте Acer 1.15 в файле Z6_115W.EXE
Этот файл можно распаковать архиватором, например 7z. Внутри будут программа прошивальщик и сам бинарник BIOS Z6.fd
В этот бинарник вшиваем SLIC2.1 с помощью программы PhoenixTool (последнюю версию можно взять здесь, качать там где строка в тексте поста Latest version)

Не работает Fn + (F1-F12) на ноутбуке HP

На ноутбуках привычно управлять мультимедийными комбинациями Fn + (F1-F12). Но если не работают эти комбинации, то нужно войти в BIOS, найти параметр "Active keys" и изменить его значение. В моем случае поставил Disable и все заработало как надо.

Как войти в BIOS ноутбука HP

Обычно для входа в BIOS привык нажимать клавишу F2 или Del, но у HP по F2 вызывается диагностика харда и памяти.
Для входа в BIOS используется клавиша F10

Обновление BIOS нетбука Acer Aspire One D257

1 Качаем по ссылке последнюю версию BIOS
2 Заходим в текущий биос смотрим запоминаем рабочие настройки, сбрасываем на дефолтные настройки
3 Для этого нетбука биос от Insyde. С сайта Acera была последняя версия 1.15 Биос в архиве в подпапках DOS Windows файлы ZE6_115.EXE ZE6_115W.EXE.
4 Создал загрузочную флешку для DOS утилитой HP USB Disk Storage Format Tool, ей нужно указать папку с DOS откуда она берет загрузочные файлы (брал файлы с загрузочной дискеты Win98 c инета). Туда же в корень флешки положил ZE6_115.EXE
В дос загрузился но при запуске ZE6_115.EXE выдала ошибку, ругалось на memory realocated. Копать дальше не стал.
5 В винде 7 отключил все USB кроме мыши, закрыл все программы, винда была голая антивируса еще не было (лучше отключить если установлен) запустил ZE6_115W.EXE. В окошке показало текущую версию биоса (была 1.08) и ту которая будет 1.15 надпись не выключать do not turn, прогресбар прополз и сама тачка ребутнулась, после загрузки версия биоса обновилась.

воскресенье, 24 ноября 2013 г.

Как узнать версию Ubuntu

cat /etc/*release*
DISTRIB_ID=Ubuntu
DISTRIB_RELEASE=12.04
DISTRIB_CODENAME=precise
DISTRIB_DESCRIPTION="Ubuntu 12.04.3 LTS"
NAME="Ubuntu"
VERSION="12.04.3 LTS, Precise Pangolin"
ID=ubuntu
ID_LIKE=debian
PRETTY_NAME="Ubuntu precise (12.04.3 LTS)"
VERSION_ID="12.04"

или cat /etc/issue
Ubuntu 12.04.3 LTS \n \l

или lsb_release -a
No LSB modules are available.
Distributor ID: Ubuntu
Description: Ubuntu 12.04.3 LTS
Release: 12.04
Codename: precise

Не перемещаются ярлычки программ на панели Unity в Ubuntu 12.04

Не перемещались ярлычки программ на панели Unity. Похоже Unity3D вообще не запускалась, а была запущена Unity2D.
Кстати чтобы переместить ярлычок в Unity2D, нужно было нажать левой кнопкой мыши на ярлычок и немного подождать, тогда доступно становилось перемещение. По ссылке пишут, что обновленный Compiz может неправильно работать со старыми конфигурационными файлами после обновления. Похоже на мой случай.
Решение:
mv ~/.compiz-1 ~/.compiz-1.BACKUP
mv ~/.config/compiz-1 ~/config/.compiz-1.BACKUP
sudo reboot

Если Compiz функционирует корректно, то можно удалить переименованные ранее папки:
rm -rf ~/.compiz-1.BACKUP
rm -rf ~/config/.compiz-1.BACKUP

пятница, 22 ноября 2013 г.

Установка Percona XtraBackup в Ubuntu

1. Добавим ключ
$ sudo apt-key adv --keyserver keys.gnupg.net --recv-keys 1C4CBDCDCD2EFD2A

2. Добавим в /etc/apt/sources.list
deb http://repo.percona.com/apt VERSION main
deb-src http://repo.percona.com/apt VERSION main

где VERSION - версия вашей ОС (например Ubuntu 12.10 - quantal)

3. Обновим кэш
sudo apt-get update

4. Установим
sudo apt-get install percona-toolkit percona-xtrabackup

Установка, просмотр, удаление пакетов dpkg

Установка пакетов

dpkg -i имя_пакета.deb

Просмотр установленного пакета

dpkg -l | grep имя_пакета.deb

ii имя_пакета.deb
ii - значит пакет установлен
rc имя_пакета.deb
rc - значит пакет удален, но конфигурационные файлы остались

Или
dpkg --get-selections

Удаление пакета

dpkg -r имя_пакета.deb

Полная очистка purge
dpkg -P имя_пакета.deb

Как посмотреть размер mysql баз

Для просмотра размера mysql баз запускаем команду
du -sh /var/lib/mysql

Backup Zabbix

Вариант 1

Бэкап базы полный с помощью mysqldump и с архивированием:

mysqldump -uuuser -ppassword zabbix | bzip2 -9 > backup_zabbix.bz2

Развернуть базу:
остановить Zabbix,
bzcat backup_zabbix.bz2 | mysql -uuser -ppassword zabbix

Как остановить zabbix сервер в ОС Ubuntu

В сервисах zabbix-server
sudo service zabbix-server stop

соответственно start, restart, status

четверг, 6 июня 2013 г.

Установка RVM, Ruby 1.9.3 на Ubuntu 12.10

Много разных устаревших мануалов по установке RVM. На текущую дату публикации делаем так.
UPD А вообще мануал здесь по установке RVM и Ruby 1.9.3

sudo bash < <(curl -sk https://raw.github.com/wayneeseguin/rvm/master/binscripts/rvm-installer )

В .bashrc ничего не добавляем

rvm -v
- смотрим текущую версию rvm

На дату публикации
rvm 1.20.13 (stable) by Wayne E. Seguin , Michal Papis [https://rvm.io/]

rvm notes
- выводит дополнительную информацию. В частности рекомендуют добавить пользователя под которым работаете в группу rvm, что и сделал (если добавлять руками в файл group, то не забываем также файл gshadow, проверка корректности ввода - команда grpck и не забываем перезайти в систему).

$rvm install 1.9.3

Далее $rvm use 1.9.3 , но читаем сообщение

RVM is not a function, selecting rubies with 'rvm use ...' will not work.

You need to change your terminal emulator preferences to allow login shell.
Sometimes it is required to use `/bin/bash --login` as the command.
Please visit https://rvm.io/integration/gnome-terminal/ for a example.


Идем по ссылке. Там рекомендуют в терминале "Правка-Параметры профиля" в закладке "Заголовок и команда" ставим птичку "Запускать команду как оболочку входа"
После этих манипуляций при вводе $rvm use 1.9.3 получили
Using /usr/local/rvm/gems/ruby-1.9.3-p429

Также, при открытии окна терминала $rvm use 1.9.3 надо повторить