среда, 28 декабря 2011 г.

Ознакомление с технологией Текст-В-Звук(Text-To-Speech) под Андроид

Данная технология появилась в Андроид 1.6 версии, Данная технология Text-To-Speech (TTS) известна как технология синтеза речи, что позволяет «заговорить» различные Андроид устройства.

вторник, 27 декабря 2011 г.

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

В процессе работы заметил, что очень много приходится подтверждать изменений,
хотя был изменён, к примеру, только один файл. Причина была в компилированных файлах
*.pyc. Необходимо удалить данные файлы с репозитория, добавить расширение в список игнорирования.

Google Translate API Service - теперь платный!


Что за ужас империя добра Googla перетягивают на тёмную сторону. Отныне больше нет бесплатного лимита использования сервиса Google Translate API. Разценки можете посмотреть здесь. Решено реализовать свой подобный сервис, конечно мне далеко до империи добра, надеюсь Open Source поможет. Мои потребности должно удовлетворить связка Ubuntu+Python+WebApp2+StarDict.

суббота, 17 декабря 2011 г.

Учебные материалы по разработке под Андроид.

Компания Google решила и реализовала специальную программу обучения специалистов, которые желают создавать программные продукты под платформу Андроид. Данную програму можно найти за следующим адресом.
Всё это сделано с целью упрощения изучения платформы, привлечения и удержание программистов. Пока, что ничем особенным ресурс не отличается. Находится на портале разработчиков, программа реализована в виде списка статей. Отличается только качеством информации. Можно найти намного лучшие и доступные для усваивания  туториалы на других интернет ресурсах.  Хотя это только начало. Так что надо взять на заметку.

четверг, 15 декабря 2011 г.

Ремонт HTML кода

Задача: синхронизировать контент блога с сайтом, создать сплог.
Удалённо подключаюсь к серверу блога, получаю контент. Проблемы начались, когда я данный контент начал выводить. HTML код был битый. Нашёл два варианта решения используя библиотеки lxml, Beautiful Soup.

lxml
from lxml.html import fromstring, tostring
print tostring(fromstring(html))

BeautifulSoup
from modules.BeautifulSoup import BeautifulSoup
soup = BeautifulSoup(html)
print soup.prettify()
С первым вариантом у меня бли проблемы с кирилицей под Google App Engine, второй заработал.

Получение исходного кода Android apk приложения.

Есть Android.apk надо получить исходный код. Apk - это простой архив типа zip архив, который можно всегда розархивировать. Внутри найдёте различные ресурсы, сама логика нахотится в файле classes.dex. Описаные далее действия производились под Ubuntu 11.10.
Достаём classes.dex из Android.apk.
unzip Android.apk classes.dex
Преобразуем dex в jar используя утилиту dex2jar
bash dex2jar/dex2jar.sh ./classes.dex
Просматривает и редактируем код одним из визуальных Java декомпиляторов к примеру JD_GUI.
./jd-gui classes.dex.dex2jar.jar
Редактируете код, сохраняете изменения в jar

среда, 7 декабря 2011 г.

Ubuntu - проблема с драйверами.

Поставил Ubuntu 11.04 на старый компьютер. Что то не работает, столько глюков. Интернет хорошая вещь, подключился обновил систему ничего радикально не изменилось. На одном из англоязычных форумов нашёл три строки кода, которые разрешили мои проблемы.
sudo add-apt-repository ppa:xorg-edgers/ppa
sudo apt-get update
sudo apt-get dist-upgrade
Добавили новый официальный репозиторий с драйверами, обновили список пакетов, воспроизвели пргрэйд системы. Дейсвительно проблема с драйверами была решена.

вторник, 29 ноября 2011 г.

Drush - Performance


Drush - хорошая вешь. Drupal - классная штука. Кэширование - без него никуда. Часто возникают проблемы при разработке, точнее неудобности при быстром включении отлючении, сброса кеша.
Вот три команды которыми можно отключить кеширование.
drush vset cache 0
drush vset preprocess_css 0
drush vset preprocess_js 0
Также можем и включить.
drush vset cache 1
drush vset preprocess_css 1
drush vset preprocess_js 1
Напомню команды очистки кеша.
drush cc
drush cc css+js
drush cc all

четверг, 17 ноября 2011 г.

Дистанционное обучение.

Не знаю, повезло ли мне жить в этот период.
 На сколько он сложен, на сколько в нем есть много возможностей, которые можно реализовать? Мы сейчас живем в иформационном обществе, полно информации на любую тему. Если Вы хотите стать специалистом в какой-то области человеческого существования, открывайте броузер и вперёд. Есть очень много сайтов, которые  предоставляют различные систематизированые програмы обучения. Пользуюсь материалами сайта INTUIT.RU. На сайте всевозможных идей HABRAHABR.RU нашёл интересную статью, по поводу онлайн тренингов. Статья . Так что изучайте английсский язык и дерзайте различные науки с университетов мирового уровня.

понедельник, 31 октября 2011 г.

App Engine 1.5.5 SDK Релиз

ничего говорить не буду, так как сам являюсь тем, кто ищет бесплатно. Мои приложения не пользуются таким ужасным спросом, но они существуют на профессиональном хостинге за который я ничего не плачу, только приходится иногда помучиться.
Появилась поддержка Python 2.7, организованна поддержка и других модулей, которые появились при работе с версией 2.5здесь.

четверг, 29 сентября 2011 г.

Google Docs API Python

Доброго дня. Собираюсь создать приложение на python, которое будет синхронизировать файлы с google docs. Первое что я нашёл это документацию по google docs api.

вторник, 27 сентября 2011 г.

UMarket. Ubuntu открывает свой портал для разработчиков.

Доброго дня. Все решался, какую GUI библиотеку использовать под python. Пробывал wxPython. Но решил вернутся, точнее начать изучать GTK, остаться с Linux, а кроссплатформинность для библиотек хорошие люди делают ... Так что думаю не попаду в просак. Почитал новость на Хабре, посмотрел видео. Мы все таки развиваемся. Ubuntu решило заработать ещё больше денег. Ubuntu открывает свой портал для разработчиков - UMarket, звучит. Надеюсь у них получится, так как их условия кажутся мне более лояльными, что может привлеч достаточно профессиональные команды для разработки програмного обеспечения, которые будут доступны массам(для некомерческого использования). Надеюсь они не перегнут палку. Видео, как создать проект, сделать релиз пакета, опубликовать его за считанные минуты. 

Продвинутый Мультисайтинг на Drupal

Много раз стыкался с необходимостью создания менеджера сайтов, создание и поддержка многих сайтов на одном ядре. Мультисайтинг это круто. Нет, это просто достаточно удобно. Ничего сложного в этом нет. Всё сводится к конфигурированию фалов sites.php, settings.php. Но со всего этого можно вытянуть  ещё больше. Посмотрите данную презинтацию. Она Вам будет в помощь в более глубоком понимании мультисайтинга на Drupal.


понедельник, 12 сентября 2011 г.

Авторизация пользователей Линукс используя USB накопитель

Краткое содержание статьи
1. Установка PAM - модулей авторизации в системе(Pluggable Authentication modules).
2. Добавление USB устройства в PAM конфигурацию.
3. Определим пользователей, которые будут проходит авторизацию по устройству.
4. Настройка PAM для использования библиотеки pam_usb.
5. USB события и pam_usb.

usb pam login

http://linuxconfig.org/linux-authentication-login-with-usb-device
https://wiki.edubuntu.org/EncryptedHomeFolder
http://ace-host.stuart.id.au/russell/files/pam_python/doc/index.html

суббота, 3 сентября 2011 г.

Востановление Windows используя консоль востановления.

Слитела Винда - стандартная ситуация. Что делать?
Может быть поврежден загрузчик Windows, или Реестр Windows, или повреждены системные файлы (например: NTLDR is missing. Press Ctrl+Alt+Del to restart, или Не удается запустить Windows из-за испорченного или отсутствующего файла: \WINDOWS\SYSTEM32\CONFIG\SYSTEM, не удается запустить Windows из-за ошибок в программном обеспечении. Сообщите об этом как об ошибке: необходимы библиотеки DLL для ядра. Сообщите об этой ошибке в службу поддержки).

среда, 31 августа 2011 г.

wxPython

Люблю Python за возможность создания и тестирования приложений на лету. Недавно понадобилось сделать пользовательский интерфейс. Перепробовал несколько методов, самым лёгким оказалось использование wxPython. Достойный справочник находится здесь.

Настройка VPN соединений между клиентами Windows, используя PPTP сервер на Centos

В этой статье рассказывается, как установить и настроить туннель используя PPTP . Прежде чем настраивать сервер убедитесь, что доступны права администратора, у вас достаточно прав SELinux, или SELinux отключен. Руководство ориентировано на пользователей домашних ПК, которые работают через через PPTP. Для клиентов используется Windows 7, которые создают VPN соединения.

понедельник, 29 августа 2011 г.

iptables - краткое руководство

Утилита Iptables используется в различных дистрибутивах Линукс как сетевой фильтр и брандмауэр. iptables содержит 3 таблицы, каждая их таблиц содержит цепочки правил. Пользователи могут самостоятельно редактировать уже существующие цепочки, создавать новые, удалять.

суббота, 30 июля 2011 г.

Хочу поделиться, к чему я пришёл. Точка доступа – очень удобная вещь. Удобства, которые привносят слабости, которые надо учитывать и предотвращать их использование хорошими людьми, которым вы не очень доверяете: использование вашего канала связи в непонятных целях, прослушивание вашего канала.

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

Работая с различными точками доступа, скажу, что установки по умолчанию достаточно безопасные, достаточно – но можно поэксперементировать.


четверг, 2 июня 2011 г.

DrupalCamp Kyiv 2011. Views - стандарт вывода списка данных. Расширение Views - написание плагинов.

Прошёл Kyiv DrupalCamp, получил новые знания, утвердил пути развития, появились новые знакомые. Представляю презинтацию своего доклада.

View more presentations from Viktor Likin.



Views стандарт вывода списка данных. Расширение Views - написание плагинов. from Alexandr Shvets on Vimeo.

понедельник, 30 мая 2011 г.

Drupal, выполнить запрос к системе Entity

Entity выделяется в отдельную незаменимую часть ядра Drupal, что заменит ноды и типы контента в нынешнем понимании. Суть таже, название и работа, другая. Стала задача проверять уникальность полей в определённом типе контента... Старым методом не получилось(Запросом), очень непонятая структура БД(на первый взгляд). Нашёл кусок кода который всё разъяснил.

вторник, 24 мая 2011 г.

Jabber хулиганство на Python

Хорошо когда учеба это интересно. К данной статье выкладываю кусочек кода, как можно поиздеватся над сотруднивами в jabber(e), отослать ему 2000 сообщений, можете попробывать отослать книгу абзацами "Анна Каренина", заодно и усвоете как работать с библиотекой xmpp. Для того чтобы заработал этот код вам необходим python интерпритатор и библиотека xmpp, не путайте c pyxmpp. Jabber может работать с различными протокали, но для этого необходимо подключать дополнительные модули.
Устанавливаем библиотеку:

sudo aptitude install python-xmpp
Вот сам код:
# -*- coding: iso-8859-15 -*-
import sys,xmpp

FROM_ID = "hell@192.168.0.1"
PASS = "1wsx"
SERVER = "192.168.0.1"

#Определяем протокол работы.
jid=xmpp.protocol.JID(FROM_ID)
#Создаём клиентю
cl=xmpp.Client(jid.getDomain(),debug=[])
#Пытаемся подключиться.
if not cl.connect((SERVER, 5222)):
 raise IOError('Can not connect to server.')
#Пытаемся авторизоваться.
if not cl.auth(jid.getNode(), PASS):
 raise IOError('Can not auth with server.')
for x in range(2000):
 try:
  #Шлём ссобщение: кому - что.
  cl.send( xmpp.Message( "vanya@192.168.1.1" ,"Уже пишу отчёт номер  %s Hi!"%x ) )
 except:
  pass
#Закрываем соединение
cl.disconnect()


Шутка удалась.


понедельник, 23 мая 2011 г.

Руководство по безопасности


СІ - не простой процесс, составной процесс. Начальным которого является организация собственной безопасности и анонимности. Конкуренты не всегда дружественные создания, потому необходимо применять меры собственной безопасности. Работаю под ОС Ubuntu. Для собственного развития буду переводить руководства по безопасности с официального сайта Ubuntu.

воскресенье, 22 мая 2011 г.

Как установить Memcached на CentOS 5.6


Memcached  - это основная система кэшировния памяти, предназначенная для интернет ресурсов, которые используют одни и те же данные по многу раз, эти данные заносятся в RAM для того, чтобы уменьшить время доступа к данным. Memcached предоставляет большую таблицу хэшей(которые могут быть расспространены среди многих машин).
 Memcached использует client-server архитектуру. Сервера хранят данные в виде ключ-значение (ключ размером до  250 bytes и значение ключа до 1 MB в размерах),  запрос значения кешированных данных проходит по ключу.

четверг, 12 мая 2011 г.

Проброс портов Ubuntu

В локальной сети интернет раздается сервером с Ubuntu на несколько компьютеров.
Нужно чтобы извне был доступен некий сервис на компьютере во внутренней сети, например торренты.
Для этого необходимо сделать проброс портов с сервера на внутреннюю машину.
В Ubuntu это делается с помощью iptables.

среда, 4 мая 2011 г.

Как отобразить диалог произвольной формы в приложении Android.

Иногда необходимо использовать более сложные диалоги, хотя если диалоги сложные лучше использовать Activity.

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

Основные этапы:

  • Определить разметку.
  • Определить диалог.
  • Заполнить диалог данными, присоединить события.
  • Запустить.

понедельник, 2 мая 2011 г.

Выполнение сброса настроек в Android (аппаратный сброс)

Если вы отдаете ваш телефон кому-либо или если есть постоянная проблема с телефоном, которую не удается решить, вы можете выполнить сброс настроек (также называемый аппаратным сбросом). Это возвращает телефон в то состояние, в котором он был перед первым включением.
Примечание: Сброс настроек не удалит данные и файлы, которые находятся на карте памяти microSD.

воскресенье, 1 мая 2011 г.

OpenCV, захват WEB камеры используя Python под Ubuntu

Необходимо было выполнять фотоснимки фотоаппаратом автоматизировано.
Решено было делать используя Питон. Нашли модуль pycanon, но он оказался только под Windows. Пробывали утилиту gphoto2, которая должна управлять фотокамерами, ничего не получилось. Решили, что для наших нужд подойдёт качественная WEB камера. Находил, много решений снятия изображения с камеры, но наткнулся на OpenCV. Мне очень понравилось его исполнение, очень мощный, охватывает почти все аспекты обработки потокового видео, изображений. Вот пример, который заработал, от которого будем отталкиваться.

пятница, 15 апреля 2011 г.

Установка Drush под Windows


Используя ‎Drush‎ возможно уменьшить время необходимое для установки и обновления Drupal, даже если вы не эксперт работы с командной строкой.
Походу этой статьи установим Drush на Windows. В данной ситуации WAMP используется на локальной машине под разработку. Если вы используете, что-то другое XAMPP, Denwer, тогда пути могут отличаться, но сам процесс тот же.

четверг, 14 апреля 2011 г.

Диалоги в Android

Диалоги в Android кажутся громоздкими, дело привычки. Но всё равно для каждого диалога описывать столько кода... Надо написать своё, что-то похожее на ShowMessage, DialogWindow. На вкус и цвет товарища нет. Вот код, который я использовал. Как туториал использовал небольшую статью(английский).

Шпаргалка - Краткое руководство по Drush.

Первое знакомство с Drush не предвещало грандиозного сотрудничества. Но в процессе работы, я счёл эту утилиту полезной - РЕАЛЬНО ЭКОНОМИТ ВРЕМЯ. Ничего тяжелого в работе, но  нужна шпаргалка - вот она. Ниже перевод статьи, которую я использую, как шпаргалку при работе. Ссылка на оригинал статьи внизу страницы.

среда, 13 апреля 2011 г.

Установка jQuery.Syntax

В предыдущей статье, я описывал, вариации реализаций подсветки синтаксиса. В данном урывочном переводе со статьи, я покажу вам пример использользования библиотеки jQuery.Syntax для подсветки синтаксиса кода на стороне клиента.

вторник, 12 апреля 2011 г.

Подсветка синтаксиса кода

Для подсветки синтаксиса в броузере необходимо проводить анализ кода, встроенных тэгов в браузере нет. Тэг "code" - не помогает. Я вижу два варианта решения. Первый - на сервере, второй - на клиенте с помощью JavaScript.

Ubuntu + Apache2 + WSGI (mod_wsgi) в системе LAMP - LAMPython

 Пришла необходимость, что бы некоторые скрипты работали на сервере
Apache. Задачу решал подобным образом

Предпологается, что уже установлены Apache2, PHP, Python, mySQL и phpmyadmin.

понедельник, 11 апреля 2011 г.

Монтирование FTP сервера в системе Ubunta, как отдельный диск

Проблема появилась тогда, когда я решил пользоваться простыми редакторами кода. Всё началось с BlueFish, теперь продолжается под Geany. До этого я пользовался gFTP и FileZilla - хорошие веши но немного замедляют процесс разработки. Я не могу работать без файлового дерева, но как быть если нет данного плагина. Из ситуации вышел используя CurlFtpFS. Идеи Fuse очень мне нравятся...
Да подобные возможности есть у Aptana Studio(сразу), под Eclipse можно найти достойный плагин, Netbeans не уступает. Но как быть с другими редакторами?, хотя эта технология сама за себя говорит...

воскресенье, 10 апреля 2011 г.

Легковесный редактор кода под Linux - Geany

Очень часто приходится работать на технике не столь мощной, что бы работать в удовольствие в полноценном редакторе типа Eclipse. Давно искал качественную замену(для данных случаем). Пробывал BlueFish - показался неудобным, точнее глючным, работать можно. Nodepad++ под Linux не нашёл. Нашёл редактор Geany. Пока очень нравится, устраивает.

пятница, 8 апреля 2011 г.

Drupal 7 темизирование и путь изображения

В ядро Drupal7 добавлено поле данных filefield, также есть что то похожее на imagecache в Drupal 6, называется как стили изображения. Когда вы подходите к этапу оформления, вскоре, вы находите, что информация об изображении хранится в массиве отличном от того как было раньше. Здесь вы не найдёте путь к изображению.

четверг, 7 апреля 2011 г.

Как создавать плагины стиля для панелей.


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

среда, 6 апреля 2011 г.

Установить предыдущую(previous revision) версию как главную(HEAD) в Eclipse

Вернитесь к определённой ревизии кода(Revision): создайте проэкт определенной старой ревизии(checkout), или спуститесь на другую ,более раннюю ревизию(revert).
В  окне менеджера проэктов(Project manager) выберете проэкт, вызовите контекстное меню, следуйте Team > Set to another Branch/Tag/Revision(Команда > Прикрепить к другой Версии/Тега/Ревизии), установить как HEAD(Главная).


пятница, 25 марта 2011 г.

Написание плагинов «стиля» и «рядка» для Views 2.

Доброго дня.
Как-то у меня стояла  задача  сделать фото-карусель под Drupal, решил попробовать сделать именно плагином, до сих пор делаю, потерял проект. Нашёл хорошую статью по Views, перевёл её, как смог. Ссылку выложу, когда буду переводить остальные части. Плагин пытаюсь писать уже под Drupal7, Views3, решил переделать хороший модуль semantycviews..., так как по данной статье у меня не работает, хотя сравниваю, отличий почти нет. Сделаю, отпишусь.

Pairing Django and Titanium in a Desktop/Titanium в связке с Django

Читал мартовский журнал Хакер...
Нашёл интересную статью об технологии Adobe Air.
Пошёл искать дальше, что-то такое Open Source, нашёл...
Нашёл статью, которую хотелось бы перевести и попробывать, что и сделаю в скором будущем.

пятница, 4 марта 2011 г.

Доброго дня.
Наткнулся на очень интересный и нужный скрипт на питоне,
который:
-готовит заголовки;
-отсылает данные по HTTPS методом POST;
-получает ответ. 

суббота, 26 февраля 2011 г.

Как удалить элементы со списка ArrayList Java

Необходимо было удалить элементы со списка.

Всё просто обошёл массив и удалил, но нет.
http://objectmix.com/java/339695-best-way-loop-through-arraylist-remove-elements-way.html
На этом сайте нашёл очень полезный кусочек кода.

пятница, 25 февраля 2011 г.

Анроид список с отображением checkboxes

Доброго дня.
Пытался сделать список с checkboxes, делал всё как надо
создал layout, adapter, ну и так далее.

Позже нашёл легче вариант
http://www.androidpeople.com/android-listview-multiple-choice-example/


Ниже приведу пару снипетов кода, что б не забыть...
Обратите внимание только на выделеные  участки кода.

Address already in use: make_sock: could not bind to address 0.0.0.0:80

Настроил SSL на своём HTTP сервере.
Начал появлятся ошибка.
Address already in use: make_sock: could not bind to address 0.0.0.0:80 no listening sockets available, shutting down

Я так понял, что сервер был всё-таки поднят, но никак не получаелось его перезагрузить.
Помогла вот эта команда.

sudo fuser -k -n tcp 80

понедельник, 21 февраля 2011 г.

Скрипт разбора сайта на Python

Вот маленький кусочик кода для разбора сайтов удобным для меня методом.
Забывается всё, всё напоминается, но с какими усилиями.
Решил оставить маленький след на будующее.


# -*- coding: utf-8 -*-
import urllib
import lxml.html
from lxml import etree
from lxml.html import parse
from lxml.html import tostring as html_tostring

#Выбераем место откуда брать
#url = "http://duhi.kiev.com.ua"
url = "./duhi/file.htm"
#Указываем где хранятся ссылки на категории
#Сдесь используются регулярные выражения,
#аттрибут начинается с parent...
menu_path = "/html/body/div/div/div/div/div/table[2]/tbody/tr/td/div[2]/ul/li[re:test(@class, '^parent.*$', 'i')]"
#Загружаем документ и получаем его DOM модель
tree = parse(url)
regexpNS = "http://exslt.org/regular-expressions"
#Получаем элементы категорий
categories = tree.xpath(menu_path, namespaces={'re':regexpNS})
#При переборе категорий сразу создаем XML документ
#куда сохраняем результаты в более универсальный вид.
xcategories = etree.Element ('categories')
doc = etree.ElementTree(xcategories)
for category in categories:
    #Получаем текст
    title = categories[0].xpath("./a/text()")[0]
    href = categories[0].xpath("./a/@href")[0]
    #Формируем документ
    xcategory = etree.SubElement(xcategories, 'category')
    xtitle = etree.SubElement(xcategory, 'title')
    xtitle.text = title
    xhref = etree.SubElement(xcategory, 'href')
    xhref.text = unicode(href)
#Сохраняем результаты в файл
file = open('categoties.xml', "w")
file.write(html_tostring(doc))
file.close()



пятница, 18 февраля 2011 г.

Своё дело - корпоративная разведка

Корпоративная разведка - звучит громко. За этим термином скрывается, что то ужасное.
Возможно ли создать свой бизнес с нуля в Украине? Я попробую, всё равно не с чего начинать, потому терять ПОКА нечего.
Первое моё правило выработанное жизнью - "Нечего тут говорить надо просто делать не в зависимости от результата". Наверное я перешёл на другой уровень своего человеческого развития, когда перед тем как, что-то делать надо подготовится, выработать план, предсказать затраты и прибыль.
Вернусь к термину "Корпоративная разведка", наверное в этом ничего страшного всё таки нет.
 Нашёл интересный сайт, it2b.ru, шокирующего ничего не нашёл, есть что почитать.

четверг, 13 января 2011 г.

OpenVpn Русский tutorial

Хороший туториал на русском...

http://itadept.ru/freebsd/openvpn/

вторник, 4 января 2011 г.

Drupal Offline

Когда мы переводим сайт в Offline, система использует стандартную тему "Garland". Что не всегда допустимо на работуещем сайте. Есть модуль "OffLine", который указывает какую тему надо использовать при Offline режиме.

http://drupal.org/project/offline

Будте внимательны, это ТЕМА не модуль, которую после тоже надо будет темить.