Задача: имеем на входе строку, слова в которой разделены пробелом. Если в строке попадается число, то вставляем точки как разделители разрядов. На выходе нужно получить строку.
Например: 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'
воскресенье, 29 декабря 2013 г.
вторник, 24 декабря 2013 г.
Python конвертация из арабских в греческие
Цифр в римской системе всего 7 вот они:
Римская цифра | Десятичный эквивалент |
I | 1 |
V | 5 |
X | 10 |
L | 50 |
C | 100 |
D | 500 |
M | 1000 |
понедельник, 23 декабря 2013 г.
Excel 2003 ограничение на количество строк и столбцов
В Excel 2003 такое ограничение на количество строк и столбцов:
65536 строк
256 столбцов
65536 строк
256 столбцов
пятница, 20 декабря 2013 г.
Linux подключение дополнительного IP
Иногда нужно настроить новую железку с IP по-умолчанию не из моей сети. Для этого надо добавить новый сетевой интерфейс с адресом из сети железки.
для добавления
sudo ifconfig eth0:1 <IP>
для удаления
sudo ifconfig eth0:1 del <IP>
sudo ifconfig eth0:1 down
или после перезагрузки настройка пропадет
eth0:2 и т.д. аналогично можно добавлять еще интерфейсы
для добавления
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
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 (один или более камней при столкновении) и уменьшаем счетчик жизней кораблю.
Где это можно применить на практике? В 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"]
game_result = [
u"OOX",
u"XXO",
u"OXX"]
среда, 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
>>> 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)
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"
В журнале запись ошибки "BITS error 1290: 0x50a"
Решение: экспортировал с рабочей тачки ветку HKEY_LOCAL_MACHINE\SYSTEM\ControlSet\Services\BITS
старую удалил новую импортировал, ребутнулся и OK
Содержимое ветки выкладываю здесь:
Настройка WiFi роутера
- Forward - UPnP Некоторые роутеры или клиенты могут не совсем корректно поддерживать UPnP, либо вручную сделан проброс портов и, следовательно, функционал UPnP не нужен. Можно отключить.
- WPS Подключаться будем с паролем установленным вручную, поэтому можно отключить.
- Wireless security - WPA2 (Установить пароль)
- Также не забудем задать имя WiFi сети. Для более стабильной связи подбираем канал, в настройке сети канал желательно поменять с Auto на более поздний (например 9)
пятница, 29 ноября 2013 г.
Excel 2010 как поменять вид столбцов на буквенные или цифровые
Вид столбцов - R1C1 или A, B
Файл - Параметры - Формулы - Стиль ссылок R1C1
Файл - Параметры - Формулы - Стиль ссылок R1C1
Запуск панели управления из командной строки Windows XP
Задача: есть компьютер с Windows XP загруженный с правами пользователя. Есть пароль Администратора на компьютер. Нужно не меняя сеанса зайти в Панель управления с правами Администратора.
Решение: запускаем консоль cmd с правами Администратора и оттуда следующие команды:
Решение: запускаем консоль cmd с правами Администратора и оттуда следующие команды:
Konica Minolta bizhub 164 ошибка M2
Ресурс фотобарабана - 55.000 страниц.
После чего аппарат блокируется и выдает сообщение "Ошибка M2 Вызовите сервис".
Чтобы сбросить это сообщение, нужно войти в сервисный режим:
После чего аппарат блокируется и выдает сообщение "Ошибка 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)
Задача: требуется чтобы активация 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 используется клавиша 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, прогресбар прополз и сама тачка ребутнулась, после загрузки версия биоса обновилась.
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*
или cat /etc/issue
или lsb_release -a
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 может неправильно работать со старыми конфигурационными файлами после обновления. Похоже на мой случай.
Решение:
Если Compiz функционирует корректно, то можно удалить переименованные ранее папки:
Кстати чтобы переместить ярлычок в 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. Добавим ключ
2. Добавим в /etc/apt/sources.list
где VERSION - версия вашей ОС (например Ubuntu 12.10 - quantal)
3. Обновим кэш
4. Установим
$ 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
соответственно start, restart, status
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
В .bashrc ничего не добавляем
- смотрим текущую версию rvm
На дату публикации
- выводит дополнительную информацию. В частности рекомендуют добавить пользователя под которым работаете в группу rvm, что и сделал (если добавлять руками в файл group, то не забываем также файл gshadow, проверка корректности ввода - команда grpck и не забываем перезайти в систему).
$rvm install 1.9.3
Далее $rvm use 1.9.3 , но читаем сообщение
Идем по ссылке. Там рекомендуют в терминале "Правка-Параметры профиля" в закладке "Заголовок и команда" ставим птичку "Запускать команду как оболочку входа"
После этих манипуляций при вводе $rvm use 1.9.3 получили
Также, при открытии окна терминала $rvm use 1.9.3 надо повторить
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 надо повторить
Подписаться на:
Сообщения (Atom)