Running PHP on Heroku with mbstring

Heroku is PasS environment which supports PHP unofficially. It is missing some of extensions initially. One instance is mbstring. However I noticed that mbstring is able to build on heroku run bash and can be loaded from project local php.ini configuration.
I put the mbstring.so on github. If you need it, just copy into your project and put php.ini which include:

extension=/app/www/mbstring.so

Example

This application is running on heroku with mbstring.

Enjoy php on heroku!

CandyCane v0.8.6 is available now.

Download section on github

3 months have passed from last release. Finally I published zip and tar ball of latest CandyCane. This release fixes various bugs. Particularly account management section got better email support for account activation.
Many new contributors made these progress. They are really great supporter of CandyCane. I will buy a beer each next time I meet them.

git shortlog -sn v0.8.5...v0.8.6
    26  Yusuke Ando
     7  Mindiell
     5  okonomi
     3  ialbors
     2  Shogo Kawahara
     1  Òscar Casajuana
     1  Ignacio Albors
     1  Sebastien pencreach
     1  Hisateru Tanaka

I’m focusing on migration to CakePHP2.1 for next release. CakePHP2.1 will bring huge productivity for CandyCane. Cherry trees may be cerebrating our release I guess.

  • Bug #215: ユーザー追加画面にアクセスするとPHPのNoticeメッセージが表示される
  • Bug #216: DBの初期データでユーザーの言語設定値が間違っている
  • Bug #217: Email notifications
  • Bug #219: チケット一覧に期限日を表示すると開始日が表示される
  • Bug #223: Projects can’t be removed
  • Bug #227: Unable to set admin user
  • Bug #231: Administration / Informations
  • Bug #233: Preview of a wiki page
  • Bug #234: Number format in help text when creating a new project
  • Bug #238: Number of issues
  • Bug #239: Creating a role with a name length greater than 10 characters
  • Bug #240: Forbidden characters in user name ?
  • Bug #241: No notifications to admin when a new user subscribe
  • Bug #243: Trying to unarchive a project : url not found
  • Bug #249: Unable to uninstall the cc_like_it plugin
  • Enhancement #226: configuration of a project
  • Enhancement #232: Modifying version

Now you can make your plugin for CakePHP based Redmine.

As you know CandyCane is CakePHP based Redmine clone. We have released CandyCane v0.8.4 just a hour ago. From now CandyCane is ready to plug your plugin! Making perfect product for everyone should be too far goal. But plugin system give you ability to change CandyCane as you like. I really wish you make your plugin for missing features like beautiful charting, more agile like dashboard. YOU CAN MAKE IT ON CAKEPHP WAY!
Let’s get walk through the overview of plugin system for CandyCane.

Basic of plugin for CandyCane

CandyCane plugin is actually CakePHP plugin. You can put CakePHP MVC based codes as plugin. Also you can interact with Models, Helpers, Components of CandyCane. For example, you can pull ticket data, project data or any other data from CandyCane model classes. Pages you made need to be integrated with CandyCane. CandyCane has some API for that. You will call those API from init.php in your plugin.

Adding new page to top menu

On your want to run your page as a application wide page, your page should be added into top left menu. To adding link to your page there, use MenuContainer object from init.php in your plugin.

$menuContainer = ClassRegistry::getObject('MenuContainer');
$menuContainer->addTopMenu(
	array(
		'url' => '/cc_nyancat/nyan/index',
		'class' => 'nyan-cat',
		'caption' => 'Nyan Cat',
		'logged' => false,
		'admin' => false
	)
);

Adding new page in project level tab


Usually pages works as an item under some project. In that case, your page should be added as project level item. to do that, use MenuContainer class again. Also route setting must be added to determine which is the current project.

$menuContainer->addProjectMenu(
  'nyancat',
  array(
          'plugin' => 'cc_nyancat',
          'controller' => 'cc_nyancat_chart',
          'action' => 'index',
          'class' => '',
          'caption' => 'Nyan Down Chart',
          'params' => 'project_id',
          '_allowed' => true // for bypassing permmission system.
  )
);
// make sure put new route setting which includes project_id
App::import('Core','Router');
Router::connect('/projects/:project_id/nyanchart/:action', array('plugin' => 'cc_nyancat','controller' => 'cc_nyancat_chart'));

Injecting HTML piece to various places


When you want to change existing pages in CandyCane, you can interrupt page rendering based on template. You can hook specific template by HookContainer class. As long as templates are separated well, you can inject your code into existing page. In this example, Nyan Cat will be shown after the template of related issues.

$hookContainer = ClassRegistry::getObject('HookContainer');
$hookContainer->registerElementHook(
	'issues/relations', // target element name.
	'../../plugins/cc_nyancat/views/elements/nyancat', // additional template you want to inject.
	false // it should be true when you want to inject before the target template.
);

Installing plugin

Installing plugin requires manual step currently. It should be automated some time in future. But actual step is just unpack plugin and place it under app/plugins. All candycane plugin must be named starting with “cc_”. CandyCane will find init.php under the directory like “app/plugins/cc_*”.

To see detail, please try cc_nyancat plugin on my github page.
I hope you enjoying CandyCane and making your cool plugin on that.

Thanks.

PHP Matsuri was awesome!

PHP Matsuri is biggest php hackathon event which happens in Japan. About hundred of php hackers were around there. And they wrote their code, attended workshops and saw authors of frameworks. The venue was hotel and this event has been continuing about 30-hours. All people got fantastic time which is not able to explain in text. See the picture above. Can you see everybody seem tired and smiling? That is the proof of fantastic time.
I was one of organizers. Also I made a hack for CandyCane while this hackathon. Before writing post about the hack, I would explain what was PHP Matsuri.

Great Sessions

DSC05813

We’ve been inviting speakers from various framework communities. We had five of great guest speakers:

Each session were really impressive and provide latest information of web programming. We recorded those sessions. Now those are online at Vimeo.

24-hours hackathon


The hackspace was lines of big table located backside of venue. It opened at noon of first day and closed at noon of second day. It kept open over night. Almost 30-peoples kept developing over night. People spent lot of beers, energy drinks,snacks, musics, ninja costume, Angry Birds on big screen and their passion. Those things made us really productive.

41-demos at 2nd day

After the hack time, 41-peoples applied their hack to demo sessions. Each presenter had 3-minutes appealing time. Having 40 of lightning talks is bad idea under the normal circumstance. But PHP Matsuri made it special. We really enjoyed those talks and We hoped it doesn’t end. This part is most important element of this event. And this moment shows up only for people who participated 24-hours hackathon.

This post is too short to explain how was it exciting event. If you feel something from this post, I hope you will join us this event on next time. See you there!

2-minutes Install Screen Cast

We released v0.8.2 of CandyCane just now. This release is bug fix release. If you are seeing some bugs with latest version archive, You can just replace sources with this release. Also I Ando did a small presentation at CakePHP2 meetup in Tokyo. In this session, I made a screen cast of CandyCane. This shows how installing CandyCane easy. If you haven’t installed CandyCane yet, I highly recommend at least watch this screen cast. It is only 2-minutes movie which is showing all steps of install and demo through main functionality.
Remember, installing CandyCane is so easy. Just extract archive, change some permission and click through installer. That is it!

Introducing CakePHP version of Redmine.

Redmine is a popular bug tracking system which is built on Ruby on Rails. It has great functionality – managing bugs, organizing multiple project, customizability from administrator dashboard. But sometimes rails based application requires extra care for versioning of Ruby and related gems.

If Redmine is built on PHP, it would be easy to use.

On April,2009 we were inspired from this simple idea, and named this project as “CandyCane”. Now we released CandyCane v0.8.1.

Easy install


CandyCane has more than 130 action converted to CakePHP code. Project is focusing on basic issue management and WordPress like 3-minutes install. You can setup CandyCane very quick. Just upload files under document root, navigate to index and follow the instruction. if you don’t like it, just delete the folder and database tables. CandyCane doesn’t require any command line operation or administrator privilege.
CandyCane is also internationalized with gettext based locale file. It already supports 8-languages(chi,deu,eng,fre,jpn,rum,rus,tha). As we receive more translations, we make them available for immediate use within CandyCane. If you want to assist with translation, please feel free to send a pull request via Github.

Developers

DSC06895

16-developers contributed to CandyCane project already. On April 2009, eight Japanese CakePHP developers had 100-hours hackathon to start this project. Although 100 hours is not short, we were unable to finish in this time. Project has been continuing on internet. I, yando had a presentation about CandyCane on official CakePHP event “CakeFest 2011″. After that more developers started contributing project. It is including Graham Weldon (predominant) who is a core developer of CakePHP framework. Project keeps going on and it’s getting more active than before.

Future


CandyCane is not supporting repository viewer, gant chart, documents and forum feature. In CandyCane, those features will be implemented as plugin. We are going to work on code clean up including migration to newer version of CakePHP. After that build structure for plugin system. We will appreciate any bug report, translation, documenting and sending pull request!

Other Materials

Project on github.
https://github.com/yandod/candycane

Live demo and bug tracking of CandyCane itself.
http://my.candycane.jp/

presentation slide from CakeFest 2011.

screen cast of issue tracking. (early edition)

Hello World.

Finally I got an english tech blog on WordPress.com.

Follow

Get every new post delivered to your Inbox.

Join 1,919 other followers