CoffeeScriptで複数メソッドあるjQueryプラグインのひな形

jQueryで複数メソッドあるプラグインが作りたいとき、いくつか作り方があるみたいですが

とりあえず公式に従っとけばいいだろうということで下の方にあるjQuery複数メソッドあるプラグインの例をCoffeeScript化してみました

複数のメソッドがあるjQueryプラグインをCoffeeScriptで作りたくなった時に便利!!!かも

http://docs.jquery.com/Plugins/Authoring

do (jQuery) ->
	$ = jQuery
	methods = {
	init : ( options )  ->
		console.log options
	,
	print : (content) ->
		console.log content
	};

	#以下は変わらない
	$.fn.myTestPlugin = ( method ) ->
		# Method calling logic
		if  methods[method] 
		    return methods[ method ].apply( this, Array.prototype.slice.call( arguments, 1 ))
		else if  typeof method == 'object' || ! method
		    return methods.init.apply this, arguments 
		else 
		    $.error 'Method ' +  method + ' does not exist on jQuery.tooltip' 

#ここからPluginじゃない
	$('div').myTestPlugin({
		initArgs :" init args "
	})
	$('div').myTestPlugin("print","test");

ちなみにコンソールの出力は

Object {initArgs: ” init args “}
test
こんな感じになってます。
ちなみにコンパイル後のJavaScriptはこんな感じです
// Generated by CoffeeScript 1.3.3

(function(jQuery) {
  var $, methods;
  $ = jQuery;
  methods = {
    init: function(options) {
      return console.log(options);
    },
    print: function(content) {
      return console.log(content);
    }
  };
  $.fn.myTestPlugin = function(method) {
    if (methods[method]) {
      return methods[method].apply(this, Array.prototype.slice.call(arguments, 1));
    } else if (typeof method === 'object' || !method) {
      return methods.init.apply(this, arguments);
    } else {
      return $.error('Method ' + method + ' does not exist on jQuery.tooltip');
    }
  };
  $('div').myTestPlugin({
    initArgs: " init args "
  });
  return $('div').myTestPlugin("print", "test");
})(jQuery);

 

 

『ブロック崩しディフェンス』というゲームを作ってみた

ブロック崩しとディフェンスを掛けあわせた
ブロック崩しディフェンスを作りました

↓で公開しています
ブロック崩しディフェンス-Google Play

簡単なゲーム内の説明いたします

ボールが無くなるか,ブロックが下まで来たら負けです
いろいろな攻撃をしてブロックが下に来るのを阻止してください

 

上に表示されているMPとは?

MPの分だけ以下のツール(タワー)を設置または使うことができます

使えば減りますが,レベルアップ時にMPは自動的に回復します

  • 拡散弾

左のMP30消費するのが8個ボールを出し

右のMP50消費するのが16個ボールを出します

  • 砲台

ボールを一定時間ごとに発射します

  • タイムリーパー

白で表示されているときに周りを遅らせます

  • ミサイル砲台

ミサイルを発車する.ミサイルは一番下のブロックに追尾し,ブロックにあたって壊れるまで飛び続ける

  • トレジャー

一定時間ごとにMP回復

  • スライダー

一度触れたブロックに対して壁までスライドさせる.

スライド中は逆にスライドさせるスライダーと重なると下に行く

  • ジャンパー

同時に一匹だけジャンプさせる.一時的に浮かせる

  • ストッパー
一定時間一個のブロックだけ止める
  • アタッカー

同時に何個でも上にいるブロックに対して攻撃する

アニメーションと攻撃は連動している

 

といった感じです

内部的にはPyGameを利用しています

 

何か質問などがあればどうぞ

SublimeText2のFTP、SFTPプラグインでアップ・ダウンロード作業を自動化する

sftp-config.jsonを以下のようにすると
ファイルを開いた時にダウンロードしてきて、保存した時にアップロードということができるようになります。

{

"type": "sftp",
"save_before_upload": true,
"sync_skip_deletes": false,
"confirm_downloads": false,
"confirm_overwrite_newer": false,

"host": "test.com",
"user": "******",
"password": "*********",
"port": "22",

"remote_path": "/path_to_remote/",
"ignore_regex": "(\\.sublime-project|\\.sublime-workspace|sftp-config(-alt\\d?)?\\.json|sftp-settings\\.json|/venv/|\\.svn|\\.hg|\\.git|\\.bzr|_darcs|CVS|\\.DS_Store|Thumbs\\.db|desktop\\.ini)",
"connect_timeout": 30,
"upload_on_save": true, 
"sync_down_on_open":true,
"confirm_sync":false,
}

sublime-text2で入力モード(INSERT MODE)を抜けるときに英語にする

使えるのはMacのみだと思います

Vintageプラグインを利用時にINSERT MODEで使っているときにエスケープキーを押したら、
自動的に英語に切り替わってくれたら嬉しいのにって思っていました

そこでどうにかする方法を何とか見つけましたのでお知らせします。

多少めんどくさいんですが
Sublime Text2のプラグインを作るちょっとしたチュートリアルにもなるかなと思います。

まずTools→NewPluginをクリックし下記を貼り付けます。

 

そして保存するのですが、そのままの場所で保存しないでください。
~/Library/Application\ Support/Sublime\ Text\ 2/Packages
フォルダに保存画面で移動して
Esclishフォルダを作成し、その中にEsclish.pyという名前で保存してください。

import sublime_plugin
import os
import platform

class EsclishCommand(sublime_plugin.TextCommand):
	def run(self, edit):
		if platform.system()!="Windows":
			cmd = """
			osascript -e 'tell application "System Events" to key code {102}' 
			"""
			os.system(cmd)

		self.view.run_command('exit_insert_mode')

まだこのままでは使えるようになりません。

~/Library/Application\ Support/Sublime\ Text\ 2/Packages/Vintage
フォルダを開き、その中にあるDefault.sublime-keymapを開きます。一番最初の

	{ "keys": ["escape"], "command": "exit_insert_mode",
		"context":
		[
			{ "key": "setting.command_mode", "operand": false },
			{ "key": "setting.is_widget", "operand": false }
		]
	},

となっているexit_insert_modeをesclishに変えて保存してください。
これで作業は完了です。

ANTLRでCommonTreeを継承した抽象構文木の作成

一つ毎に処理を変えたいけどCommonTreeとTreeWalkerだけだと、API側の処理を追加したいと思った時に困る
Visitorを自力で作るときとかにそういうことをしたいはず
とにかくソースコードをGitHubにアップしておきます。
NodesExtendsCommonTree

↓このソースが一番のポイントだと思います トークンの値が来たらトークンを作成し、トークンが来たらトークンを親クラスに渡すといったことを行なっています。

import org.antlr.runtime.*;
import org.antlr.runtime.tree.*;
public class ASTNode extends CommonTree {
	public ASTNode(Token t) {super(t); token=t;}
	public ASTNode(int i) { this(new CommonToken(i,"ASTNode"));}               
    public ASTNode(ASTNode node) { super(node); }
	public Tree dupNode() { return new ASTNode(this); } 
    public String toString() { return token.getText()+"<ASTNode>";}
}

クックパッドの開発コンテストに参加してみた

http://info.cookpad.com/24contest3
結果は入賞ならず
まだまだ腕が足りないようですね
こんな感じで応募しました。
何か意見やツッコミがありましたらよろしくお願いします

▽作品のタイトル – Product title:
DAY QUEST!

▽作品のURL – Product URL:
http://kogitune.com/24contest/

▽成果物の説明 – Description of the product:
一日の終わりを楽しくするというのは、ワクワクして一日の終わりを待つものだと考えました。
そこで、一日かかってあなたの分身が冒険し、一日の終わりにその結果をあなたを見ることができるようにしました。
あなたが忙しい一日、あなたの分身が冒険します。あなたは一日一度サービスに訪問して、分身を冒険させるだけで、勇者はどんどん強くなります。
あなたは毎日の終わりが楽しみになるはずです。

ANTLR3.4でvoid =nullとエラーが出る

コンパイラを作るために格闘中です。

JavaParser.java:23842:
式の開始が不正です。
void =null;
^

原因はわかっていませんが、バグのようでANTLR3.3のjarを使えば解決します。http://www.antlr.org/downloadからantlr-3.3-complete.jarをダウンロードして、
Javaのパーサの場合だと
http://www.antlr.org/grammar/1207932239307/Java1_5GrammarsからJava.gとJavaTreeParser.gをダウンロードして、

java -cp antlr-3.3-complete.jar org.antlr.Tool -o generated Java.g
java -cp antlr-3.3-complete.jar org.antlr.Tool -o generated  JavaTreeParser.g
cd generated
javac -cp ../antlr-3.3-complete.jar ./*.java

といったようにすれば大丈夫でした。

apacheのバーチャルホストの設定でForbidden!!で詰まった

httpd.confの設定はこんな感じで

<VirtualHost *:80>
    DocumentRoot /home/testuser/example.com
    ServerName example.com
    ErrorLog logs/example.com-error_log
    CustomLog logs/example.com-access_log common
</VirtualHost>
<Directory "/home/testuser/example.com">
   order deny,allow
    deny from ALL
    allow from ALL
    AllowOverride all
</Directory>

この環境で以下のコマンドを入力しましたがうまくいきませんでした。

chmod 755 /home/testuser/exaple.com/
chown -R apache /home/testuser/exaple.com/
chmod 755 /home/testuser/exaple.com/index.php

これでもダメで
最終的にこれでうまくいきました。

chmod 755 /home/testuser/

そうです。パーチャルホストのフォルダがあるフォルダのパーミッションが重要だったということでした。

モデルにアクセスしやすくするCakePHPプラグインを作ってみた

Dbaccessです。

例えば
今までCakePHPでユーザー名からユーザーIDを求めたいと思った時、
コントローラに
$this->User->get_id_By_username(‘John’);
と書いて、モデルにget_id_By_username($username)メソッドを実装しそこに
return $this->find(‘all’,array(‘conditions’=>array…
といった文を書く必要がありました。(コントローラ内でもできますが。)

そのめんどくささをこのPluginを入れて3ステップの環境設定を行うと。
$this->User->get_id_By_username(‘John’);
と書くだけでモデルに実装を書く必要がなくなり意図したものを取り出すことができます。

手順もGitHubにアップしているREADME通りなのですが、
app/pluginフォルダの中で
git clone git@github.com:takahirom/Dbaccess.git
とgit cloneすると手順一は終えることができます。

ソースコードは数十行程度なのでそんなに頑張ってないですが。
CakePHPのBehaviorで使えるmapMethodsは面白いのでいろんな活用法が考えられそうです。

CakePHP(2.0)の基本を抑えるために公式チュートリアルをしてみる 基本設定編

Blog Tutorial
これをするとブログが出来るらしい
cakeでブログを作る気はないけど、自己流コーディングではなくどういう作り方で作ると正攻法なのかを知ることは大切であると思うのでやってみます

This tutorial will walk you through the creation of a simple blog application. We’ll be getting and installing Cake, creating and configuring a database, and creating enough application logic to list, add, edit, and delete blog posts.

このチュートリアルは簡単なブログアプリケーションの作成を通して行う。私たちはCakeを手に入れインストールして、データベースの作成と設定をする。そしてブログリストや追加編集削除をするのに十分なアプリケーションの作成を行う。

ログインとかはどうなんだろう?よくわからないが続けていこう

必要なものとして

1ウェブサーバー

2データベースサーバー

3基本的なPHPの知識

4MVCプログラミングの基本的なパターン

だそうです。

最初からスタートです。

Getting Cake

git clone git://github.com/cakephp/cakephp.git

とりあえずこれしてみる

 

# git clone git://github.com/cakephp/cakephp.git
 Initialized empty Git repository in /root/cakephp/.git/
 remote: Counting objects: 149351, done.
 remote: Compressing objects: 100% (29771/29771), done.
 remote: Total 149351 (delta 117439), reused 145591 (delta 115094)
 Receiving objects: 100% (149351/149351), 20.22 MiB | 356 KiB/s, done.
 Resolving deltas: 100% (117439/117439), done.

無事終わったっぽい

Regardless of how you downloaded it, place the code inside of your DocumentRoot. Once finished, your directory setup should look something like the following:

/path_to_document_root

|-/app

|-/lib

|-/plugins

|-/vendors

|-.htaccess

|-index.php

|-README

ということでDocumentRootにコピーするのだけど他に色々ファイル置いててちょっと置きたくないのでここでは

/path_to_document_root/cakephp

|-/app

..

と言った感じにする(私の環境ではcp -R cakephp /var/www/html/cakephp)

Creating the Blog Database

Next, lets set up the underlying database for our blog. if you haven’t already done so, create an empty database for use in this tutorial, with a name of your choice. Right now, we’ll just create a single table to store our posts. We’ll also throw in a few posts right now to use for testing purposes. Execute the following SQL statements into your database:

次に、私たちのブログのための下に書いてあるデータベースのセットアップをしよう。もしあなたがこのチュートリアルのためのデータベースを作っていなかったらの自由な名前のデータベースをつくろう。そして今私たちの記事?を蓄える一つのテーブルを作る。ただテストの目的で使うために私たちはいくつかの記事を入れる。これらのSQLをあなたのデータベースで実行しよう。

とりあえずblogデータベースを作成する

そして

 

/* First, create our posts table: */
CREATE TABLE posts (
id INT UNSIGNED AUTO_INCREMENT PRIMARY KEY,
title VARCHAR(50),
body TEXT,
created DATETIME DEFAULT NULL,
modified DATETIME DEFAULT NULL
);
/* Then insert some posts for testing: */
INSERT INTO posts (title,body,created) VALUES ('The title', 'This is the post body.', NOW());
INSERT INTO posts (title,body,created)
VALUES ('A title once again', 'And the post body follows.', NOW());
INSERT INTO posts (title,body,created) VALUES ('Title strikes back', 'This is really exciting! Not.', NOW());

 

を実行(phpMyAdmin利用)

Cake Database Configuration

A copy of CakePHP’s database configuration file is found in

/app/Config/database.php.default. Make a copy of this file in the same directory, but name it database.php.

database.php.defaultをコピーで名前はdatabase.php

私の環境での話

cd /var/www/html/cakephp/app/Config

cp database.php.default database.php

そして

The config file should be pretty straightforward: just replace the values in the $default array with those that apply to your setup. A sample completed configuration array might look something like the following:

この設定は簡単で以下のように$default配列の値を変えるだけでセットアップできる

<?php
public $default = array(
'datasource' => 'Database/Mysql',
'persistent' => false,
'host' => 'localhost',
'port' => '',
'login' => 'cakeBlog',
'password' => 'c4k3-rUl3Z',
'database' => 'cake_blog_tutorial',
'schema' => '',
'prefix' => '',
'encoding' => ''
);

Optional Configuration

/app/Config/core.phpの187行目192行目のセキュリティソルト、とかシードを書き換え

ドキュメントルートにいって

whoami.phpを作成して<?php echo `whoami`; ?>で自分がなんというユーザー名でこのphpを実行しているか見る

chown -R ユーザー名 app/tmp

とする

今日はつかれたのでここまで!