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

Регистрация в Apple developer Program с помощью виртуальной карты

При регистрации в Apple developer Program на каком-то шаге нам сообщают: "извините, Вы не из тех стран, жителям которых мы не желаем геморроя и потому разрешаем платить карточкой через онлайн".
Отсюда, возникают пара проблем.

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

Вторая проблема, в этой форме в открытом виде необходимо передать реквизиты карточки, включая номер, дату истечения и код CVV.
Заходи кто хочешь! Бери сколько унесёшь! Я сегодня добрый, э-э-х гуляй, душа праздника просит...
Итак, что я сделал.
С некоторых пор, Яндекс, совместно с Интеркоммерц банком предлагают услугу "Виртуальная карта MasterCard Prepaid".
Через Евросеть, т.к. у них без процентов, пополняем Яндекс кошелёк на 99 долларов + небольшой запас, т.к. существует комиссия за конверсию из рублей в баксы и плюс 1.99 от номинала.

Идём на страницу покупки карты. Если вы залогинены, то увидите следующую картинку.


Соглашаемся с условиями и нажимаем "Купить карту".
Опция "уведомление по смс", в данном случае, нужна только собственного для успокоения, чтобы знать когда с карты снимут деньги. Никаких данных для подтверждения транзакции не приходило.

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

Закончили с реквизитами карты?

Не забудьте поставить свою роспись.

У меня сканера не оказалось, поэтому сфотографировал заполненную форму на фотоаппарат.
Сконвертировал в PDF.

И отправил через сервис бесплатных факсов GotFreeFax.com.

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

На этот раз я отправил два факса через GotFreeFax.com и два через FaxZero.com.
Это были выходные.
Но факсовая спам-атака сработала. Через пару дней в мобиле появилась смс, что карту обчистили на 99 баксов.
А ещё через 5 часов пришло письмо: "Дорогой ты наш, сэр (не такой дорогой как разработчики под большой Мак, платящие 200 баксов за год, но уж какой есть), спасибо и велком в наш чудный дивный мир".

вторник, 7 июня 2011 г.

Как в Git вывести файл из под версионного контроля

Что делать, если вы когда-то взяли файл под версионный контроль, а теперь поняли что он не нужен?
И что делать, если файл, который находится под контролем вы меняете локально, и эти изменения нельзя коммитить?
В обоих случаях .gitignore не работает. А действовать надо так:
$ git rm --cached <file>
Данная команда выведет файл из под версионного контроля при следующем коммите, но оставит его живым в рабочем каталоге.

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

Redmine готовый к развёртыванию на серверах приложений

Если у вас есть необходимость развернуть Redmine на сервере приложений типа Tomcat, то у вас есть такие пути:
- скачать исходники, обложиться мануалами, и потратить день-два, чтобы решить все траблы;
- или скачать предлагаемый файл WAR, подправить пару настроек, и получить рабочую систему в течение 15 минут.

Итак, качаем файл (за основу был взят Redmine 1.1.2-devel).

Внутри находиться схема с таблицами, которую необходимо воссоздать в базе.
redmine-VERSION.war\WEB-INF\config\redmine_default_data.sql
Реквизиты для первого входа стандартные для Redmine: admin/admin.
Сейчас схема только на русском, но планируется и английская версия.

Теперь, необходимо указать реквизиты для соединения.
redmine-VERSION.war\WEB-INF\config\database.yml
# MySQL (default setup).
production:
  adapter: jdbc
  url: jdbc:mysql://YOURSERVER.com:3306/DBNAME
  driver: com.mysql.jdbc.Driver
  username: YOURNAME
  password: YOURPASSWORD
  encoding: utf8
Последний по списку, но не по значимости, шаг. Настройка безопасности.
Необходимо сгенерировать уникальный ключ.
redmine-VERSION.war\WEB-INF\config\initializers\session_store.rb
# This file was generated by 'rake config/initializers/session_store.rb',
# and should not be made visible to public.
# If you have a load-balancing Redmine cluster, you will need to use the
# same version of this file on each machine. And be sure to restart your
# server when you modify this file.
 
# Your secret key for verifying cookie session data integrity. If you
# change this key, all old sessions will become invalid! Make sure the
# secret is at least 30 characters and all random, no regular words or
# you'll be exposed to dictionary attacks.
ActionController::Base.session = {
  :key => '_redmine_session',
  #
  # Uncomment and edit the :session_path below if are hosting your Redmine
  # at a suburi and don't want the top level path to access the cookies
  #
  # See: http://www.redmine.org/issues/3968
  #
  # :session_path => '/url_path_to/your/redmine/',
  :secret => '30e7cb1c1f4342cf1a3c42023a4d8ebf363792f63e711e3682b0a69ec42defd8d936c3a8aa556b40'
}

Можно использовать онлайновый HEX-генератор (только уберите пробелы и переносы).

И на этом всё, вы готовы к развёртыванию в сервере приложений.
Я проверял этот файл в Tomcat 6.0.26 на локальной машине, и в сервисе Cloudbees.com.
Везде работает великолепно.
Выше были перечислены только минимально-необходимые для успешного старта шаги. Теперь, когда и у вас развёртывание завершено, приступайте настройке остальных параметров, если есть такая необходимость:
redmine-VERSION.war\WEB-INF\config
Надеюсь кому-то это окажется полезным и сэкономит время.

Redmine 1.1.2 devel deploy ready WAR file

If you want to deploy Redmine to servlet container such as Tomcat, then you have two ways:
- download redmine source codes, read a lot of instructions, and spent about day or two to resolve all conflicts;
- or you just download my war-file, edit few settings, and you're done in 15 minutes.

Here's the file.

In the war-file you should find initial table scheme and run it on your database.
redmine-VERSION.war\WEB-INF\config\redmine_default_data.sql

Sorry guys, in this file it is on Russian, but I can make in English one, if you request me.

After that you should correct
redmine-VERSION.war\WEB-INF\config\database.yml

And the last step but not least is security. You should generate your own unique secret key.
redmine-VERSION.war\WEB-INF\config\initializers\session_store.rb

# This file was generated by 'rake config/initializers/session_store.rb',
# and should not be made visible to public.
# If you have a load-balancing Redmine cluster, you will need to use the
# same version of this file on each machine. And be sure to restart your
# server when you modify this file.

# Your secret key for verifying cookie session data integrity. If you
# change this key, all old sessions will become invalid! Make sure the
# secret is at least 30 characters and all random, no regular words or
# you'll be exposed to dictionary attacks.
ActionController::Base.session = {
:key => '_redmine_session',
#
# Uncomment and edit the :session_path below if are hosting your Redmine
# at a suburi and don't want the top level path to access the cookies
#
# See: http://www.redmine.org/issues/3968
#
# :session_path => '/url_path_to/your/redmine/',
:secret => '116315a0b6f594fa95bf163fce376b36de6bc53936327c4577f3f64f8e4c15af60eda37e4ff9562d'
}

You may use this online hex generator, for example (just remove the spaces).

And that's all, you're ready to deploy.
I've tested this file on the local machine and on Cloudbees.com service.
It works just fine on both.

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

Удалённая проверка источника питания на MacBook

Бывают разные случаи, когда полезно проверить подключен ли ноутбук к электросети.
Первый вариант, через VNC или Apple Remote Desktop загрузиться и посмотреть состояние в графическом режиме.
Но есть способ автоматизировать процесс.
В комплекте с MacOS идёт консольная утилита system_profiler.
Если её запустить просто так, то будет выдана куча системной информации.
Чтобы выделить только нужное, существует набор фильтров.
С полным списком можно ознакомиться командой:
$ system_profiler -listDataTypes
Available Datatypes:
SPHardwareDataType
SPNetworkDataType
SPSoftwareDataType
SPParallelATADataType
SPAudioDataType
SPBluetoothDataType
SPCardReaderDataType
SPDiagnosticsDataType
SPDiscBurningDataType
SPEthernetDataType
SPFibreChannelDataType
SPFireWireDataType
SPDisplaysDataType
SPHardwareRAIDDataType
SPMemoryDataType
SPPCIDataType
SPParallelSCSIDataType
SPPowerDataType
SPPrintersDataType
SPSASDataType
SPSerialATADataType
SPUSBDataType
SPAirPortDataType
SPFirewallDataType
SPNetworkLocationDataType
SPModemDataType
SPNetworkVolumeDataType
SPWWANDataType
SPApplicationsDataType
SPDeveloperToolsDataType
SPExtensionsDataType
SPFontsDataType
SPFrameworksDataType
SPLogsDataType
SPManagedClientDataType
SPPrefPaneDataType
SPStartupItemDataType
SPSyncServicesDataType
SPUniversalAccessDataType
Нас интересует только подсистема питания SPPowerDataType.
Выполняем:
$ system_profiler SPPowerDataType
Power:

    Battery Information:

      Model Information:
          Serial Number: 9G951015R4M1A
          Manufacturer: DP
          Device name: bq20z951
          Pack Lot Code: 0000
          PCB Lot Code: 0000
          Firmware Version: 0042
          Hardware Revision: 0001
          Cell Revision: 0122
      Charge Information:
          Charge remaining (mAh): 8346
          Fully charged: No
          Charging: No
          Full charge capacity (mAh): 11999
      Health Information:
          Cycle count: 99
          Condition: Normal
      Battery Installed: Yes
      Amperage (mA): -3316
      Voltage (mV): 7665

    System Power Settings:

      AC Power:
          System Sleep Timer (Minutes): 60
          Disk Sleep Timer (Minutes): 0
          Display Sleep Timer (Minutes): 60
          Automatic Restart On Power Loss: No
          Wake On AC Change: No
          Wake On Clamshell Open: Yes
          Wake On LAN: Yes
          Display Sleep Uses Dim: Yes
          GPUSwitch: 2
      Battery Power:
          System Sleep Timer (Minutes): 10
          Disk Sleep Timer (Minutes): 0
          Display Sleep Timer (Minutes): 7
          Wake On AC Change: No
          Wake On Clamshell Open: Yes
          Current Power Source: Yes
          Display Sleep Uses Dim: Yes
          GPUSwitch: 2
          Reduce Brightness: Yes

    Hardware Configuration:

      UPS Installed: No

    AC Charger Information:

      Connected: No
      Charging: No

Предпоследняя строчка
Connected: Yes
показывает, что подключен внешний источник питания.
И, наоборот,
Connected: No
говорит, что в настоящее время ноутбук работает от батареи.
А показатель
Charge remaining (mAh): 5893
уведомляет об оставшемся заряде. Зная
Full charge capacity (mAh): 12008
можно посчитать процент заряда.
Все необходимые нам индикаторы не составляет особого труда вычленить с помощью grep/awk, или, указав ключ -xml, распарсить результат с помощью Scala/Groovy.
Можно использовать Automator, в нём имеется встроенный компонент "Профиль системы" с аналогичным функционалом.
Теперь, с помощью cron, того же Automator и т.п. можно настроить, чтобы при падении заряда ниже какого-то уровня, отправлялось смс, почта и другие уведомления для принятия мер: воткнуть вилку в розетку или усыпить машину, если невозможно первое.

суббота, 9 апреля 2011 г.

Eclipse, Android: ошибка "Conversion to Dalvik format failed with error 2"

Оптимизировал я какое-то время назад работу Eclipse. Начитался разных форумов. Написал кучу разных опций в eclipse.ini. Полкучи потом выкинул. Файл принял вид:

-startup
../../../plugins/org.eclipse.equinox.launcher_1.1.1.R36x_v20101122_1400.jar
--launcher.library
../../../plugins/org.eclipse.equinox.launcher.cocoa.macosx_1.1.2.R36x_v20101019_1345
-server
-nosplash
org.eclipse.platform
--launcher.XXMaxPermSize
512m
-vmargs
-Dosgi.requiredJavaVersion=1.5
-Xms1024m
-Xmx1024m
-XX:PermSize
512m
-XX:MaxPermSize
512m
-XX:+UseParallelGC
-XX:+AggressiveOpts

Всё было хорошо. Всё работало быстро и я забыл про это подкручивание.

Потом какое-то время работал в Intellij Idea (рефакторинг у них непревзойдённый, конечно).

А тут мне понадобился удобный эклипсовский плагин от Questoid для доступа к SQLite-базе прямо из DDMS.
Запускаю среду, а оно мне выдаёт на любой проект.
Conversion to Dalvik format failed with error 2

Раз в Intellij Idea собирается нормально, то проблема явно локально-эклипсовая.
Два часа блуждал по сети, перепробовал кучу способов, пока не наткнулся на
http://code.google.com/p/android/issues/detail?id=9883

Убрал из конфига
-XX:+AggressiveOpts

Работает, зараза!

Мораль, излишняя оптимизация - зло.

четверг, 23 декабря 2010 г.

ffmpeg (ffserver) for windows

Собрал ffmpeg (включая ffserver) под cygwin.
Был использован ключ --disable-yasm.
Версия, согласно git log

commit 390071f52d1b4a768a0083dc55f3d3e361afc06c
Author: mstorsjo
Date:   Wed Dec 22 20:00:42 2010 +0000

 
Кому надо забирайте: страница загрузки или файл.