среда, 30 декабря 2009 г.

Open iPhone Development on any platform

All further instructions assumes that you have already did your jailbroke(blackra1n,redsn0w - no matter)
  1. Run cydia
  2. Install openSSH to be able to connect to your phone
  3. Install apt 0.7 strict - you will need this package handling utility to install additional libraries without using cydia.
  4. Connect to your phone via ssh(default password will be "alpine" without quotes)

    Example:

    $ ssh root@192.168.1.104
  5. Install essentials

    # apt-get install wget
    # apt-get install vim
  6. You will need libgcc(Thank you Saurik!)
    # cd /tmp
    # wget -c "http://apt.saurik.com/debs/libgcc_4.2-20080410-1-6_iphoneos-arm.deb"
    # dpkg -i libgcc_4.2-20080410-1-6_iphoneos-arm.deb
  7. Now it is toolchain's turn
    apt-get install com.bigboss.20toolchain
Almost done, let's try to compile our first application.
# vim main.c
Example:
#include <stdio.h> int main() {
printf("Hello world!");
return 0;
}
Compile:
gcc main.c -o main
Output:
ld: library not found for -lSystem collect2: ld returned 1 exit status
To get this step done you should copy {libobjc.dylib,libSystem.dylib} files from official iPhone SDK. Put these files into /usr/lib and create links to them.
ln /usr/lib/libSystem.B.dylib /usr/lib/libSystem.dylib ln /usr/lib/libobjc.A.dylib /usr/lib/libobjc.dylib
Now compilation will be successful!
./main Killed!
Oops...No luck... That's because you have not signed your application. iPhone OS have very strict rules to run applications on it. To sign your application you will need a provision profile(remember the story about official development)... Or... Let's say "THANK YOU" to Saurik again:
apt-get install ldid ldid -S main ./main Hello World!
ldid - is a tool that can sign your applications and make them runnable on the iphone.
Let's try with full weight iPhone application!
  1. You will need additional header files which can be found in official SDK or you can download it from here(link from http://antirez.com).
    Copy this folder into your iPhone and then to the /var/inculde
    $ scp -r include-2.0-sdk-ready-for-iphone/ root@192.168.1.104:~/
    # cp -r include-2.0-sdk-ready-for-iphone/* /var/include

  2. To avoid "framework not found" messages:
    ld: framework not found CoreFoundation

    You should copy frameworks folders from the official SDK to your phone.
    # scp -r PrivateFrameworks root@192.168.1.104:~/
    # scp -r Frameworks root@192.168.1.104:~/
    And install them:
    cd Frameworks
    ls | awk -F . '{print "mkdir -p /var/include/"$1";cp -r " $0"/Headers/* /var/include/"$1 ";rm -rf "$0"/Headers" }' | sh
    ls | awk -F . '{print "mkdir -p /System/Library/Frameworks/"$1"."$2";cp -r "$0"/* /System/Library/Frameworks/"$1"."$2}' | sh
    cd ../PrivateFrameworks
    ls | awk -F . '{print "mkdir -p /var/include/"$1";cp -r " $0"/Headers/* /var/include/"$1 ";rm -rf "$0"/Headers" }' | sh
    ls | awk -F . '{print "mkdir -p /System/Library/PrivateFrameworks/"$1"."$2";cp -r "$0"/* /System/Library/PrivateFrameworks/"$1"."$2}' | sh
    cd ../
    rm -rf PrivateFrameworks Frameworks
  3. Now you can download on of the sample applications to start from. You can find one at http://antirez.com or http://blog.aaronash.com

суббота, 5 декабря 2009 г.

How to restore your iPhone

I have just corrupted some files from /usr/lib directory on my iPhone... I was trying to get libgcc working on the 3.1.2 jailbroken firmware, but now I have deadPhone.
The are two possibilities to restore iPhone.

1. iPhone Restore Mode

Follow the steps below to turn your iPhone in Restore Mode.

  1. Shutdown your iphone with the hard reset "home button and power for 10 second"
  2. Connect the usb cable to the pc but NOT to the iphone"
  3. Open itunes
  4. While the iphone is off, press the home button for 5-10 seconds then plus the other end of the white connection cable into the iphone
  5. Do not remove your finger from the home button
  6. iTunes will detect it and you can now restore it

In restore mode iPhone will load some additional software to verify that u will not downgrade your firmware(remember that u can press "shift" to manually choose firmware in iTunes).
In my case lib folder was corrupted and no additional software can be started in recovery mode. So...

2. iPhone DFU mode

Follow the steps below


  1. Connect your iPhone to your computer.
  2. Turn iPhone off.
  3. Hold power and home together for 10 seconds (exactly).
  4. Release power but keep holding home until the computers beeps (observed on a PC) as a USB device is recognized.
  5. A few seconds later iTunes should detect your iPhone.
  6. If the Restore Logo is present on the screen, you are in Recovery Mode, not DFU.


DFU is absolutely PC/Mac side controlled process, so that was the catch.

пятница, 11 сентября 2009 г.

Extending BOOST_FOREACH

Just for fun занимаюсь дома проектом на C++... Встала задача предоставить пользователю возможность пробежаться по элементам внутреннего STL контейнера, без возможности издеваться над самим контейнером. Вытаскивать и begin и end ради такого довольно неудобно. Видел возможный вариант решения проблемы в графическом движке Ogre(немного укоротил, оставил суть):
 template <class T>
class VectorIterator
{
private:
typename T::iterator mCurrent;
typename T::iterator mEnd;
VectorIterator() {};
public:
typedef typename T::value_type ValueType;

VectorIterator(typename T::iterator start, typename T::iterator end)
: mCurrent(start), mEnd(end)
{
}

explicit VectorIterator(T& c)
: mCurrent(c.begin()), mEnd(c.end())
{
}

bool hasMoreElements(void) const
{
return mCurrent != mEnd;
}

typename T::value_type getNext(void)
{
return *mCurrent++;
}
};


Все прекрасно, за исключением того что по такому чуду инженерной мысли не естественно не будет работать BOOST_FOREACH, что явно не удобно и не привычно. Официальные доки Boost для решения подобных вопросов предлагают нам 2 возможных выхода:

  • Предоставить typdef на iterator и const_iterator и вытащить наружу begin и end.
  • Специализировать range_begin,range_end etc

Комбинируя оба варианта и используя friend можно предоставить пользователю доступ к BOOST_FOREACH и в тоже время спрятать от него настоящие итераторы...
template<typename T> class CollectionWrapper
{
public:
typedef typename T::iterator iterator;
typedef typename T::const_iterator const_iterator;

CollectionWrapper(T& collection):begin(collection.begin()),end(collection.end()){}

private:
iterator begin;
iterator end;

CollectionWrapper(){}

friend iterator range_begin( CollectionWrapper<T> & x ){return x.begin;}
friend iterator range_end( CollectionWrapper<T> & x ) {return x.end;}

friend const_iterator range_begin( CollectionWrapper<T> const & x ){return x.begin;}
friend const_iterator range_end( CollectionWrapper<T> const & x ) {return x.end;}
};

И теперь можно пользоваться:
std::string str = "some string";
CollectionWrapper<std::string> s(str);

BOOST_FOREACH(char ch, s)
std::cout<<ch<<std::endl;

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

How to detach a running process?

Пользуемся командой
disown _job name_

И после этого даже отключение от tty не убьет процесс

пятница, 31 июля 2009 г.

Rails install problem

gem install rails --include-dependencies

Не работает ?

Building native extensions. This could take a while...
ERROR: While executing gem ... (Gem::Installer::ExtensionBuildError)
ERROR: Failed to build gem native extension.

ruby extconf.rb install rails --include-dependencies
checking for fcgiapp.h... no
checking for fastcgi/fcgiapp.h... no
*** extconf.rb failed ***
Could not create Makefile due to some reason, probably lack of
necessary libraries and/or headers. Check the mkmf.log file for more
details. You may need configuration options.

Provided configuration options:
--with-opt-dir
--without-opt-dir
--with-opt-include
--without-opt-include=${opt-dir}/include
--with-opt-lib
--without-opt-lib=${opt-dir}/lib
--with-make-prog
--srcdir=.
--curdir
--ruby=c:/Program files/ruby/bin/ruby
--with-fcgi-dir
--without-fcgi-dir
--with-fcgi-include
--without-fcgi-include=${fcgi-dir}/include
--with-fcgi-lib
--without-fcgi-lib=${fcgi-dir}/lib


Gem files will remain installed in c:/Program Files/ruby/lib/ruby/gems/1.8/gems/
fcgi-0.8.7 for inspection.
Results logged to c:/Program Files/ruby/lib/ruby/gems/1.8/gems/fcgi-0.8.7/ext/fc
gi/gem_make.out

Попробуйте обновить gems
gems update --system

Все станет на свои места ;-)

воскресенье, 7 июня 2009 г.

Ubuntu 9.04 Virtual Box XP AC97

Столкнулся с проблемой - на Virtual Box в качестве guest стоит WinXP, host Ubuntu 9.04. Не прицепились автоматически драйвера аудио AC97. Установка свежих драйверов от Realtek влечет за собой BSOD. А вот драйвера постарше вполне работоспособны, ссылка ниже:
Realtek 2004

среда, 8 апреля 2009 г.

Template Toolkit bypassing wrapper

Встала задача, для одной из View - проигнорировать wrapper выставленный в конфиге, чтение списка рассылки по Catalyst, вывело на следующее решение, далеко не единственное, но мне чет больше понравилось чем остальное.
Во wrapper добавляем в начало что-нибудь в стиле:

[% IF template.nowrap %]
    [% content %]
    [% RETURN %]
[% END %]


И теперь во View можно написать

[% META nowrap=1 %]


И все )

суббота, 4 апреля 2009 г.

Catalyst with perl errors

Заметил одну очень неприятную вещь в Catalyst'е. Если в одном из ваших файлов допущена ошибка - запуск сервера падает с сообщением 'Unknown error'...
Для меня - человека только знакомящегося с Catalyst/Perl эта чудо ошибка вылилась в полтора часа сравнивания svn diff'ов и выявления того факта что в Perl нельзя опускать фигурные скобки после if +)
Для себя нашел следующее решение:

find . -name "*.pm" -exec perl -c \{\} \;

Таким образом сразу определяем в чем проблема.

четверг, 19 марта 2009 г.

iPhone OS 3.0

Запоздало, но все же список фич:
* Cut, copy, and paste across applications (including photos)
* Text message forwarding and deletion of individual messages
* Multimedia Messaging Service (MMS)
* The addition of Spotlight to search your entire device
* Searching in Mail, iPod, Calendar, Contacts
* Support for landscape keyboard mode in Mail, Notes, Text messaging
* In-App purchases (such as subscription renewals or buying extra game levels)
* Peer-to-peer networking via bluetooth (P2P)
* Apps that can control accessories
* Developer access to the Maps API (to embed Google Maps in apps)
* Core Location GPS technology for turn-by-turn directions
* Unified push notification Service (apps will update when not running)
* APIs to allow for in-app email or iPod access
* New video streaming capabilities (HTML 5 video, h.264 and HTTP streaming)
* Voice memos (can be emailed or sent via MMS)
* Enhancements to the Stocks app
* Syncing of notes with your Mac
* Shake to shuffle iPod songs
* MobileSafari will have auto-fill and antiphishing features
* Stereo bluetooth support
* Parental controls on the AppStore
* 1,000 new APIs (Application Programming Interfaces)

Особенно позабавил пункт "Developer access to the Maps API (to embed Google Maps in apps)", думаю многие кто уже писал приложения с картами под iPhone используюя webView и кучу велосипедов с javascript сейчас кусают локти +)

вторник, 17 марта 2009 г.

Mesa3D

Видео карточка моего ноута - откровенное чудо ) Огромный выбор OpenGL расширений...
Вот, он чудом здесь умещается:

GL_WIN_swap_hint GL_EXT_bgra GL_EXT_paletted_texture

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

воскресенье, 15 марта 2009 г.

Rails freeze

Как увеличить размер svn репозитория на 30МБ ? Очень просто - привяжемся к конкретной версии рельсов.

rake rails:freeze:gems

Уменьшить...

rake rails:unfreeze

суббота, 14 марта 2009 г.

iPhone OS 3.0

17 марта выйдет новая OS под iPhone...Довольно не маленький скачек с 2.2 на 3.0. Интересно что ждать от Apple. Самое главное на что я надеюсь это нормальная обратная совместимость, т.к. различия в поведении между 2.0,2.1,2.2 все же есть. Из мелочей также жду адекватного UIWebView(может оно наконец перестанет течь? может JavaScrit станет шустрей ?). Ну а так, вроде слышал о том что появится поддержка передачи файлов по Bluetooth(до этого кто не знал, Bluetooth можно было использовать строго для гарнитуры).
Такая смена версии должна отразиться в чем-то значительном, но в чем ?.. Поддержка сервисов ?.. Может MMS разрешат ?.. Flash ? Вобщем довольно интересно, ждем, благо осталось совсем немного...

среда, 11 марта 2009 г.

Rails vs MySQL

RoR 2.2.2 упорно не хочет дружить с MySQL 5.1
В ответ на rake db:migrate получаю

Mysql::Error: Commands out of sync; you can't run this command now: SHOW TABLES

Незнаю в чем собственно толком дело, времени разбираться нет, лечится downgrade'ом MySQL до 5.0...Если кто в курсе в чем проблема - было бы интересно узнать

воскресенье, 1 марта 2009 г.

Flexible SectionHandler

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

Благодаря такому handler'у, App.Config выглядит так:

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

воскресенье, 22 февраля 2009 г.

Svn backup via PowerShell

На днях все же дошли руки посмотреть на PowerShell. Поднял себе локальный svn server, дабы с комфортом заниматься "домашними" проектами. Встала задачка бэкапа... Получилось довольно деревянно ) Первый опыт с PowerShell

if(!(test-path z:\Svn_Backup)){mkdir z:\Svn_Backup}
cd ~/
svnadmin dump svn_repository > svn_dump
$path = "z:\Svn_Backup\"+(Get-Date).ToString("ddMMyyyy_hhmmss")+".dump.zip"
cd "c:\Program Files\7-zip"
.\7z.exe a -psvnbackup31337 ((gi ~/).FullName + "\svn_dump.zip") ((gi ~/).FullName + "\svn_dump")
cd ~/
mv svn_dump.zip $path
rm svn_dump

Z:\ - это мой NAS. сохраняем это все в фал формата ps1 и с помощью "Task Scheduler"'а ставим на 2 часа ночи каждого дня.
Вообще довольно удобная, гибкая система, хотя и весьма непривычно, к примеру на bash такое у меня бы заняло гораздо меньше времени...

суббота, 7 февраля 2009 г.

Glass windows



WPF - просто грандиозная вещь. Восхищаюсь тем насколько гибкой сделала этот framework Microsoft. Для того чтобы не пришлось самому долго потом искать, поделюсь здесь одним методом. В MSDN описывается как можно увеличить верхнюю "стеклянную" часть окна, немного изменив их пример можно добиться полностью стеклянного окошка...




Ну и не забыть сделать фон окошка цветом Transparent )

iPhone OpenAL

При использовании OpenAL, требуются файлы в формате caf(Core Audio Format кажется). Пользуемся замечательной командой:

afconvert -f caff -d LEI16@44100 -c 1 infile.wav outfile.caf