пятница, 5 декабря 2008 г.

Синхронизация Google календарей с iCal

Добавление основного каледаря.
  1. Откройте настройки iCal.
  2. На закладке Accounts нажмите плюс.
  3. В открывшемся окошке заполните поля так:
    • Description: Просто название на ваш вкус.
    • Username: Ваш полный почтовый адрес в гугле. Если вы используете Google Apps, вводите именно адрес именно из того домена.
    • Password: Пароль от вашей учётной записи.
  4. В расположенном ниже и скрытом под стрелкой поле Server Options нужно написать https://www.google.com/calendar/dav/ [ ваш@адрес ] /user. Конечно, это должно быть написано без пробелов и квадратных скобок.

  5. Нажмите ОК и подождите 5-7 минут, пока пройдёт первоначальная синхронизация. У меня этот процесс занимает буквально несколько секунд, у вас может затянуться. Наберитесь терпения.

Ваш персональный календарь отобразится в панели календарей. Информация синхронизируется раз в 15 минут. Вы можете изменить интервал, открыв iCal > Preferences > Accounts. Также вы можете принудительно обновить календарь, нажав Cmd-R.

Добавление других каледарей.

Для того, чтобы добавить неосновной календарь, нужно сделать следующее:

  • Откройте веб-интерфейс календаря.
  • Выберите календарь, который хотите добавить. Нажмите на стелку слева от него и выберите Calendar Settings
  • Найдите, выделите и скопируйте в буфер обмена ваш Calendar ID.

  • Откройте iCal и сделайте шаги 1-3 из предыдущего пункта.
  • В поле Server Options введите https://www.google.com/calendar/dav/ [ Calendar ID ] /user. Да, без пробелов и скобок.
Источник: http://www.mactrick.com/2008/10/23/dobavlyaem-kalendari-google-v-ical/

четверг, 20 ноября 2008 г.

Сброс пароля в PostgreSQL

1. Ищем конфигурационный файл pg_hba.conf и правим его:
local all postgres trust

2. Перезапускаем сервер
3. Меняем пароль:
# psql -U postgres template1
alter user postgres with password ‘newpassword’;

4. Меняем строчку в конфигурации обратно
5. Рестартуем сервер и подключаемся

Автозавершение на tab в python2+ под Mac

Нашел решение своей проблемы (не работало автозавершение в python при нажатии на tab) которая доставляла мне некоторые неудобства, напиример в debug mode Zope, где ipython использовать нельзя. Создаем файл в домашней директории .pystartup

Для работы автозавершения вписываем в него:
# ~/.pythonrc
# enable syntax completion
try:
import readline
except ImportError:
print "Module readline not available."
else:
import rlcompleter
readline.parse_and_bind("tab: complete")
Для автозавершения и сохранения истории:
# Add auto-completion and a stored history file of commands to your Python
# interactive interpreter. Requires Python 2.0+, readline. Autocomplete is
# bound to the Esc key by default (you can change it - see readline docs).
#
# Store the file in ~/.pystartup, and set an environment variable to point
# to it, e.g. "export PYTHONSTARTUP=/max/home/itamar/.pystartup" in bash.
#
# Note that PYTHONSTARTUP does *not* expand "~", so you have to put in the
# full path to your home directory.

import atexit
import os
import readline
import rlcompleter

historyPath = os.path.expanduser("~/.pyhistory")
historyTmp = os.path.expanduser("~/.pyhisttmp.py")

endMarkerStr= "# # # histDUMP # # #"

saveMacro= "import readline; readline.write_history_file('"+historyTmp+"'); \
print '####>>>>>>>>>>'; print ''.join(filter(lambda lineP: \
not lineP.strip().endswith('"+endMarkerStr+"'), \
open('"+historyTmp+"').readlines())[:])+'####<<<<<<<<<<'"+endMarkerStr readline.parse_and_bind('tab: complete') readline.parse_and_bind('\C-w: "'+saveMacro+'"') def save_history(historyPath=historyPath, endMarkerStr=endMarkerStr): import readline readline.write_history_file(historyPath) # Now filter out those line containing the saveMacro lines= filter(lambda lineP, endMarkerStr=endMarkerStr: not lineP.strip().endswith(endMarkerStr), open(historyPath).readlines()) open(historyPath, 'w+').write(''.join(lines)) if os.path.exists(historyPath): readline.read_history_file(historyPath) atexit.register(save_history) del os, atexit, readline, rlcompleter, save_history, historyPath del historyTmp, endMarkerStr, saveMacro
Экспортируем export PYTHONSTARTUP=/Users/User/.pystartup
Проверяем python, если все работает то вписываем экспорт в ~/.bash_profile

вторник, 18 ноября 2008 г.

Автозапуск PstgreSQL 8.3

Долго не мог найти в Mac OS как отрубить автозапуск PstgreSQL 8.3, пришлось решить проблему вандальным методом:
sudo rm -rf /Library/StartupItems/postgresql-8.3

Подарили мне игрушку

ASUS WL 500gP v2

Я в радости =) Пожалуй лучший WiFi роутер для дома

вторник, 11 ноября 2008 г.

Песочница Python 2.4.5 в Mac OS X 10.5.5

./configure --prefix=$HOME/PS/Python-2.4.5 MACOSX_DEPLOYMENT_TARGET=10.5
make
make install

вторник, 23 сентября 2008 г.

Safari

Включение debug меню Safari:
defaults write com.apple.Safari IncludeDebugMenu 1
Отключение:
defaults write com.apple.Safari IncludeDebugMenu 0

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

Burn


Простенькая и удобная программа для записи дисков.
http://burn-osx.sourceforge.net/

Mac OSX на P5K-SE с оригинальным ядром


Форматируем разделы с таблицей GUID и устанавливаем в этой конфигурации, сборка Leo4All v2. EFI установится автоматически, теперь у нас родное ядро =)

SMS из Adium


Отправляем SMS из Adium!

пятница, 19 сентября 2008 г.

Сеть в Leo4All v2

В сборке Leo4All v2 не работала сетка, был неправильный линк, лечится так:
sudo rm /System/Library/Filesystems/afpfs.fs
sudo ln -s /System/Library/Filesystems/AppleShare/afpfs.kext /System/Library/Filesystems/afpfs.f

среда, 17 сентября 2008 г.

вторник, 16 сентября 2008 г.

DVD

Вы можете переименовать папку, содержащую VIDEO_TS так, чтобы название заканчивалось на .dvdmedia. После этого будет возможно запускать фильм двойным кликом по нему.

Приятноя мелочь


Приятно что заработала на моем хакентоше =)

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

Время загрузки Mac OSX

Немного изменил конфигурацию загрузки com.apple.Boot.plist который лежит в /Library/Preferences/SystemConfiguration/

<plist version="1.0">
<dict>
<key>Kernel</key>
<string>mach_kernel</string>
<key>Kernel Flags</key>
<string>-v</string>
<key>Boot Graphics</key>
<string>Yes</string>
<key>Timeout</key>
<string>5</string>
</dict>
</plist>

пятница, 12 сентября 2008 г.

Eric4 & Mac OSX 2

Проблема отсутствия подсветки модифицированных файлов (svn не могла получить доступ к бумажнику с сертификатом) решилась установкой из исходников pysvn, который запрашивает доступ и его нужно указать в качестве основного интерфейса VCS в пользовательских свойствах Eric

четверг, 11 сентября 2008 г.

PIL && Mac OSX && libjpeg && Python2.4

Долго бился что бы поставить PIL с поддержкой jpeg под Mac на Intele, после долгих опытов скомпилировать его не удалось, была ошибка несовместимости архитектур, libjpeg собрал без особых усилий, хотя не уверен нужен ли он был, но на всякий случай:
$ cd jpeg-6b/
$ ln -s `which glibtool` libtool
$ export MACOSX_DEPLOYMENT_TARGET=10.4
$ ./configure --enable-shared --enable-static --host=intel
$ make
$ sudo make install

После долгих попыток установить PIL наткнулся на репозиторий https://svn.openplans.org/eggs/
Откуда взял PIL-1.1.6-py2.4-macosx-10.3-i386.egg
Перенес содержимое из подпокета PIL и файлы в корне директории в /Library/Frameworks/Python.framework/Versions/2.4/lib/python2.4/site-packages/PIL
и создал файл PIL.pth с содержимым
PIL
после чего проверил работу тестами из распакованного до этого пакета Image python2.4 selftest.py, все тесты были пройдены!

среда, 10 сентября 2008 г.

PostgreSQL

После установки PostgreSQL и MacPort в Mac OSX добавил в /etc/path строчки:
/opt/local/bin
/Library/PostgreSQL/8.3/bin
и для возможности импорта библиотеки libpq выполнил команду:
sudo ln -s /Library/PostgreSQL/8.3/lib/libpq.5.dylib /usr/lib/libpq.5.dylib
или для сессии можно выполнить:
export DYLD_LIBRARY_PATH="$DYLD_LIBRARY_PATH:/Library/PostgreSQL/8.3/lib"
Теперь осталось отключить автоматический запуск PostgreSQL...

вторник, 9 сентября 2008 г.

Eric4 & Mac OSX

Установка Eric 4-4.2(20080726) в Mac OSX (должен быть установлен XCode):
1. Загрузка и установка QT4 (сборка под Mac OSX)
2. Загрузка и установка sip
2.1 python configure.py && make && sudo make install
3. Загрузка и установка PyQt-mac
3.1 python configure.py && make && sudo make install
4. Загрузка QScincilla 2.2
4.1 Распаковываем QScincilla и переходим в папку QT4
4.2 Выполняем qmake qscintilla.pro -spec macx-g++ (иначе make файл не создастся)
4.3 make
4.4 sudo make install
4.5 Переходим в папку ../python
4.6 python configure.py && make && sudo make install
5. Загрузка и распаковка Eric
5.1 sudo python install.py
6. Загрузка и установка языка
6.1 Распаковываем и выполняем sudo python install-i18n.py
6.2 В настройках Eric указываем системным языком RU

вторник, 17 июня 2008 г.

Firefox 3

Сегодня выходит долгожданный Firefox 3 !!! выход намечен в 10:00 a.m. PDT или 21:00 по Московскому времени. По количеству загрузок планируется установить мировой рекорд!


понедельник, 9 июня 2008 г.

Kopete


Сделал небольшой тюнинг Kopete: поставил смайлы QIP и стиль окно разговора Simply Smooth

четверг, 5 июня 2008 г.

Орфография

Настроил проверку орфографии в SuSe и Firefox:
для SuSe в Личных параметрах -> Компоненты KDE -> Проверка орфографии:
  • Словарь: русский
  • Кодировка: UTF-8
  • Клиент: Aspell
Теперь при включении автопроверки в Kopete неправильные слова подсвечиваются.

для Firefox:
  • Скачал расширение Russian spell dictonary
  • В контекстном меню выбрал язык русский
  • Поставил галочку проверить орфографию в этом поле

четверг, 22 мая 2008 г.

ID3iconv

Столкнулся с проблемой отображения тегов русских песен в iTunes, одно из решений:
Правка ID3 тегов. Перед импортом музыки в iTunes проходим по всем mp3 файлам программой ID3iconv . Для этого открываем терминал и пишем (при условии, что программу сохранили на рабочий стол)

java -jar Desktop/id3iconv-0.2.1.jar -e cp1251 путь_до_файпов/*.mp3

Данная команда переведет все теги из кодировки cp1251 (Русская кодировка в windows) в UTF-16BE. В результате с получившимися файлами не будет проблем ни в iTunes под Windows, ни под маком, ни в Linux (тестировалось на amaroK).

Если у вас есть множество папок с пробелами в именах, то id3iconv-0.2.1.jar будет выдавать ошибку "No such file or directory". Чтобы это избежать можно пользоваться вот такой командой:

find ~/Music/ -name "*.mp3" -exec java -jar ~/Desktop/id3iconv-0.2.1.jar -e cp1251 {} \;

find - будет итеративно искать все мп3 во всех вложеных папках начиная с ~/Music/, имя каждого мп3 файла будет использованно как входной параметер id3iconv-0.2.1.jar.

Кстати, таким образом можно сконвертировать теги с любого поддерживаемого OS X языка.


Источник

четверг, 15 мая 2008 г.

Установка Mac OS на P5K-SE

Попался мне в руки диск Leo4All v2, (хакинтош Mac os X Leopard 10.5.2) и вот решил я поставить на свою машинку попробовать (о моем железе и особенности установки на него, материнка P5K-SE, видик GF-7500GS (256 Mb), при установке винт и сидюшник должны быть саташными и подключенные в 2 первых разъема на материнке, иначе установщик их не видет) При установке загружается установочный интерфейс где можно перед началом установки запускать различные утилиты, я запустил дисковую утилиту и отформатировал весь диск в мак раздел. Дальше, после выбора места установки можно выбрать что устанавливать нажатием кнопки настроить. Выбрал хакнутое ядро и драйвер на звук, остальное оставил по дефолту. Дело в том что есть возможность поставить родное ядро vanilia но нужно позаморачиватся с EFI и GUID разметкой диска что особо то делать небыло желания. Родное ядро позволяет обновляться и становятся доступными другие вкусности. Установка заняла приблизительно минут 30, потом произошла успешная загрузка. Дрова под видик поставил NVInstallerV.41 дрова на сетку нашел по поиску, разархивировал и установил релизный kext с помощью Kext Helper b7. Железки все заработали. Поставил фотошоп CS3 который тоже без проблем заработал. Еще поставил qt-4 и собрал IDE Python - Eric собственно все что я хотел. Очень приятно и красиво работать под маком, поюзаю недельку, если все будет работать стабильно пожалуй оставлю.



среда, 7 мая 2008 г.

Elisa

Поставил из пакетов крутой мультимедиа проигрватель с приятными графическими эфектами, единственное что пришлось немного поправить конфигурационный файл, который лежит в /home/user/.elisa/ показав ему откуда брать медиа инфу, по сути дела изменил эти строчки
[xmlmenu:locations_builder]
locations = ['file:///home/user/']
auto_locations = 1
Вот скрины:







воскресенье, 20 апреля 2008 г.

Шрифты в линукс.

В линухе не покидало чувство что то здесь в плане дизайна не так, менюшки какие то большие и прочее. Уменьшаю и как то мелко все, не читается. Поставил по совету нормальный шрифт (liberation-fonts), который отлично маштабируется и все вроде как встало на свои места.

пятница, 11 апреля 2008 г.

Функциональный виджет.


Функциональный виджет.

Допустим, есть необходимость при редактировании атрибута объекта выбирать,
сохранять его значение или нет.
Например может появится такая необходимость при использовании объекта с атрибутом Bytes.



Интерфейс:

1.from zope.interface import Interface
2.from zope.schema import TextLine, Bytes
3.
4.class IMark(Interface):
5.
6. datax = Bytes(
7. title=u"Check Data",
8. description=u"Des",
9. required=True)
10.
11. dataxx = TextLine(
12. title=u"Data",
13. description=u"Des",
14.required=False)

6-9 устанавливаем тип атрибута Bytes и в строке 9 указываем что он обязательный для заполнения.

Реализация:

1.from zope.interface import implements
2.from zope.app.container.contained import Contained
3.
4.from boom.interfaces import IMark
5.from persistent import Persistent
6.
7.class Mark(Persistent):
8. implements(IMark)
9.
10. def __init__(self, datax='', dataxx=''):
11. self.datax = datax
12. self.dataxx = dataxx
13.
14.from zope.component.factory import Factory
15.
16.markFactory = Factory(
17. Mark,
18. title=u"Create a new mark",
19. description = u"This factory instantiates new mark."
20. )

1012 При инициализации объекта устанавливаем атрибуты

Формы добавления и редактирования:

1.from zope.component import createObject
2.from zope.formlib.form import AddForm, Fields, applyChanges, EditForm
3.from boom.interfaces import IMark
4.from boom.widget import BoolWidget
5.from zope.formlib.namedtemplate import NamedTemplate
6.from zope.formlib.namedtemplate import NamedTemplateImplementation
7.from zope.app.pagetemplate import ViewPageTemplateFile
8.
9.class MarkAddForm(AddForm):
10.
11. form_fields = Fields(IMark)
12.
13. label = u"Add BookMarker"
14.
15. template = NamedTemplate('mark.form')
16.
17. def create(self, data):
18. mark = createObject(u'boom.mark')
19. applyChanges(mark, self.form_fields, data)
20. return mark
21.
22.class MarkEditForm(EditForm):
23.
24. form_fields = Fields(IMark)
25. form_fields['datax'].custom_widget = BoolWidget
26.
27. label = u"Edit BookMarker"
28.
29. template = NamedTemplate('mark.form')
30.
31.form_template = NamedTemplateImplementation(
32. ViewPageTemplateFile('form.pt'))

9-20 Класс добавления объекта, все поля оставляем по умолчанию
2229 Класс редактирования, для байтового поля используем собственный виджет

Виджет:

1.from zope.app.form.browser.textwidgets import FileWidget
2.from zope.app.pagetemplate.viewpagetemplatefile import ViewPageTemplateFile
3.from boom.bookmarker import Mark
4.
5.from zope.app.form.interfaces import ConversionError
6.from zope.app.i18n import ZopeMessageFactory as _
7.
8.from zope.lifecycleevent import ObjectCreatedEvent, ObjectModifiedEvent
9.import zope.event
10.
11.class BoolWidget(FileWidget):
12. __call__ = ViewPageTemplateFile('widget.pt')
13.
14. def _toFieldValue(self, input):
15.
16. delete = self.request.get(self.name+'.delete')
17.
18. if delete=='False' or input == None or input == '':
19. return self.context.context.datax
20. try:
21. seek = input.seek
22. read = input.read
23. except AttributeError, e:
24. raise ConversionError(_('Form input is not a file object'), e)
25. else:
26. seek(0)
27. data = read()
28. if data or getattr(input, 'filename', ''):
29. return data
30. else:
31. return self.context.missing_value

11 - Наследуемся от FileWidget и перекрываем 2 метода call и _toFieldValue
В строке 16 получаем значение флага.
1819 проверяем нужно ли изменять объект, если не нужно или поля не заполнены
возвращается неизмеренный атрибут.


Шаблон формы:

1.<html xmlns="http://www.w3.org/1999/xhtml"
2. xmlns:tal="http://xml.zope.org/namespaces/tal"
3. xmlns:metal="http://xml.zope.org/namespaces/metal"
4. metal:use-macro="context/@@standard_macros/view">
5.<body>
6.<div metal:fill-slot="body">
7.<form class="edit-form" enctype="multipart/form-data" method="post"
8. action="." tal:attributes="action request/URL">
9. <h1 tal:content="view/label">Edit something</h1>
10. <div class="summary" tal:condition="view/status"
11. tal:content="view/status">Status</div>
12. <div class="row" tal:repeat="widget view/widgets">
13. <div class="label">
14. <label for="field.name" title="The widget's hint"
15. tal:attributes="for widget/name; title widget/hint"
16. tal:content="widget/label">Label</label>
17. </div>
18. <div tal:condition="widget/error"
19. tal:content="structure widget/error">Error</div>
20. <div class="field">
21. <input tal:replace="structure widget" />
22. </div>
23. </div>
24. <span class="actionButtons" tal:condition="view/availableActions">
25. <input tal:repeat="action view/actions"
26. tal:replace="structure action/render"
27. />
28. </span>
29.</form>
30.</div>
31.</body>
32.</html>

Шаблон виджета:

1.<div xmlns:tal="http://xml.zope.org/namespaces/tal">
2.
3. <input type="file" id="checkbox.flag" value=''
4. tal:attributes="id string:${view/name};
5. name string:${view/name};
6. "
7. />
8.<p>
9. <input type="radio" id="checkbox.flag"
10. tal:attributes="id string:${view/name}.delete;
11. name string:${view/name}.delete"
12. value="True" /> Изменить
13.</p>
14.<p>
15. <input type="radio" id="checkbox.flag"
16. tal:attributes="id string:${view/name}.delete;
17. name string:${view/name}.delete"
18. value="False" checked /> Не изменять
19.
20.</p>
21.</div>

четверг, 10 апреля 2008 г.

Sony VGN-NR110

Появилась необходимость установки драйверов на ноутбук VGN-NR110, вроде ничего сложного, но, родная операционка на борту Vista® Home Premium (англ), а я поставил на него Vista Ultimate (рус). Проблема заключалась в том что драйвера подходят только к Home Premium и только англоязычной версии. При запуске происходит проверка что за операционка стоит и как только установщик понимает что ось не родная, шлет в лес. Такую практику начали использовать многие компании и не только Sony. Но проблема решилась очень даже просто: при запуске инсталятора драйвера распаковываются в папку Temp, откуда устанавливаются без проблем, ко всему прочему: большенство с поддержкой русского языка.

понедельник, 7 апреля 2008 г.

Собственный виджет для поля.

Добавим в интерфейс еще одно поле Bool.

1.# -*- coding: koi8-r -*-
2.from zope.interface import Interface
3.from zope.schema import TextLine, Bool
4.
5.class IMark(Interface):
6.
7. datax = TextLine(
8. title=u"Data",
9. description=u"Des",
10. required=False)
11.
12. flag = Bool(
13. title=u"Bool",
14. description=u"Des",
15. required=False)

Добавленны стороки 12 - 15

Теперь если оставить остальной код без изменений (Собственная форма добавления
), при добавлении Mark мы получим следующюу форму:



Но хотелось бы что бы она имела немного другой вид:



Для этого нужно использовать собственный виджет:

1.from zope.app.form.browser.boolwidgets import CheckBoxWidget
2.from zope.app.pagetemplate.viewpagetemplatefile import ViewPageTemplateFile
3.
4.class BoolWidget(CheckBoxWidget):
5. __call__ = ViewPageTemplateFile('widget.pt')

Класс BoolWidget наследуется от базового CheckBoxWidget, и реализует метод вызова шаблона.

1.<div xmlns:tal="http://xml.zope.org/namespaces/tal">
2.<p>
3. <input type="radio" id="checkbox.flag"
4. tal:attributes="id string:${view/name};
5. name string:${view/name}"
6. value="on" checked /> True
7.</p>
8.<p>
9. <input type="radio" id="checkbox.flag"
10. tal:attributes="id string:${view/name};
11. name string:${view/name}"
12. value="" /> False
13.
14.</p>
15.</div>

Здесь мы используем форму ввода radio вместо checkbox.

В классе добавления формы укажем что поле flag использует наш собственный виджет (строка 15):

1.from zope.component import createObject
2.
3.from zope.formlib.form import AddForm, Fields, applyChanges
4.from boom.interfaces import IMark
5.from boom.widget import BoolWidget
6.from zope.formlib.namedtemplate import NamedTemplate
7.from zope.formlib.namedtemplate import NamedTemplateImplementation
8.from zope.app.pagetemplate import ViewPageTemplateFile
9.
10.
11.
12.class MarkAddForm(AddForm):
13.
14. form_fields = Fields(IMark)
15. form_fields['flag'].custom_widget = BoolWidget
16.
17. label = u"Add BookMarker"
18.
19. template = NamedTemplate('mark.form')
20.
21.
22. def create(self, data):
23. mark = createObject(u'boom.mark')
24. applyChanges(mark, self.form_fields, data)
25. return mark
26.
27.form_template = NamedTemplateImplementation(
28. ViewPageTemplateFile('form.pt'))

В реализации нужно так же указать значение поля flag по умолчанию (строка 14)

1.# -*- coding: koi8-r -*-
2.__docformat__ = 'restructuredtext'
3.
4.from zope.interface import implements
5.from zope.app.container.contained import Contained
6.
7.from boom.interfaces import IMark
8.from persistent import Persistent
9.
10.class Mark(Persistent):
11. implements(IMark)
12.
13. datax = u''
14. flag = False
15.
16.from zope.component.factory import Factory
17.
18.markFactory = Factory(
19. Mark,
20. title=u"Create a new mark",
21. description = u"This factory instantiates new mark."
22. )

Остальной код оставляем без изменений.

Katapult





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