[日記] コマンド間違ってファイル消しちゃった

2011/12/29

こんにちは。きんくまです。

もうすぐ今年も終わりですね。
さて、先日ブログにこんなメモを残しました。

>> [terminal] ターミナルで.DS_Storeファイルを再帰的に消す

そんで、やっちゃいましたよ。
作業中に、ふーっと、まとまりのいいところまできたので、gitでコミット。
あるフォルダの.DS_Storeファイルを消そうと思って、コマンド打ったんですよ。
そしたら、ですね、なんかおかしいんですよ。
あれ????
なんか全部ファイルが消えてるんですけど…。

コマンド打ったディレクトリ以下が空のフォルダ残して全部消えちゃってます。
すごく焦ったんですよ。
それで、
「いや、なんの、gitで回復させれば大丈夫だっつーの。」
とか青くなりながら、gitコマンドうったら、
「gitのリポジトリなんかないよ。」
とかメッセージが帰ってきたんですよ。

いやいやそんなことないって、とかいって、見てみたら、リポジトリごとごっそり
消去してしまっていたという、、。

コマンドもう一度ちゃんとみたところ、rmのオプションの-nameが抜けていて、
名前で検索せずに、何もかも削除ということをしてしまっていたようです。

ターミナル上で、ファイルを削除するとゴミ箱行かないで、いきなり削除されちゃうんで、
もとに戻せないという。

いやー焦りました。
そしたら、TimeMachineが俺にはあるじゃマイカと、TimeMachineのデータが入っている外付けHDDをつないでみたところ、2日前にたまたまバックアップしていたのを発見。
普段、1ヶ月に1度やるかやらないかの、きまぐれバックアップだったのですが、
何故かそのときは気が向いてやっていたという。
なので、2日前までは戻れるということになりました。
はじめてTimeMachine使いましたよ。助かりました。

いつもは、こういう置換削除みたいな、ヒヤリ系は必ずどこかに一度バックアップコピーしてから作業しているんですが、gitのリポジトリあるからいいやとか、ターミナルも少し慣れてきたかな、みたいな気のゆるみがあり、全くしていませんでした。

作業的には、実際のところ半日分くらいのところだったので、そこまで大事にはいたらなかったのですが、なんだか自分の気のゆるみを指摘された気分になりましたよ。

対策としては、以下の感じにしようかと。

1) TimeMachineのHDDつけっぱなし+スイッチON状態にしておいて、絶対に1時間前に戻れるようにしておく
2) rmコマンド打つときは慎重に。-iオプションつけて、プロンプト出させたり、再帰処理の時は絶対にバックアップをとってから行う
3) gitのリポジトリのあるディレクトリではterminalの作業は行わないようにする。gitリポジトリ以下の階層でもgitコマンドは使える(というのを今回知った)

LINEで送る
Pocket

[iOS] iPadでスクロールさせたときに、CSS3 アニメーションが止まる

2011/12/26

こんにちは。きんくまです。
CSS3アニメーションのこんなコードを書いて、あるエレメントに適用しました。

@-webkit-keyframes flapping {
   0% {
   	-webkit-transform:scale(0,0);
   	opacity:1;
   }
   100% {
   	-webkit-transform:scale(1,1);
   	opacity:0;
   }
}

でも、iPadでスクロールさせたときに、CSS3 アニメーションが止まってしまい、困ってしまいました。
正確に言うと、0%のキーフレームの位置からそれ以上進まなくなってしまうのです。

ググったところ、こんな感じのページを発見。

>> GPUアクセラレーターが使える環境で強制的に有効にできるCSSの指定方法

CPUからGPUのレンダリングの切り替えのタイミングでsafariがちらつくとのこと。
最初からGPUレンダリングを使えば、そんなことなくなるよ。
これをするために、こんなCSSプロパティを使えばいいみたい。

-webkit-transform-style: preserve-3d;

そしたら、うまいこと解決してくれました。
助かりました。どうもです。

たぶん予想するに、スクロールするときにその切り替えのタイミングが起こっていたのかもしれませんね。

LINEで送る
Pocket

[JavaScript] Canvas2D で3D ドーナツ

2011/12/25

こんにちは。きんくまです。

z-sortがうまくいっていないのですが、ドーナツを表示することができました。
3Dドーナツは別名トーラスというそうです。
点の取り方は、中心から離れたところに円を描いて、それをぐるっと1周させるとできました。
行列使って、回転させるとできましたです。


あとすごいドーナツを見つけたので、載せておきます。
途中からレンダリングが次々と切り替わっていくので重くなりますが、面白いです。
>> http://raksy.dyndns.org/torus.html

それで、今回は1から書いてみてるのですが、なかなか勉強になります。
行列、内積、外積とか。
以前にやったときは急ぎ足でやっていたので、あんまり理解していなかったのですが、
今回はわりと考えながらやっているので、得るものがありました。

あと面白いと思うのは、直線で点をつなげて塗りつぶせれば3Dでも描画できるということです。

もう少しやってみようと思います。

LINEで送る
Pocket

[terminal | ターミナル] ターミナルで.DS_Storeファイルを再帰的に消す

2011/12/24

こんにちは。きんくまです。

gitのレポジトリの中に.DS_Storeファイルが含まれているのに気がつきました。
.DS_StoreファイルはMac OSが使うものです。

レポジトリの中にこれらのファイルを入れたくなかったので、
こんな感じに消しました。

最初に、ターミナル上で、そのディレクトリから再帰的に.DS_Storeを消します。

find . -name '.DS_Store' | xargs rm

次に、~/.gitignore_globalを作成しまして、こうやって書きました。
このファイルはgitのグローバル設定をするものです。

2011/12/28更新
そのあとに、このコマンドをターミナルで打つ必要がありました。

git config --global core.excludesfile ~/.gitignore_global

もし、特定のディレクトリのみに設定したい場合は、.gitignoreをそのディレクトリに置けばよいです。
これは、書かれているファイルをステージに上げないようにします。

# OS generated files #
######################
.DS_Store*
ehthumbs.db
Icon?
Thumbs.db

最後にこの状態でコミットしました。

これらのサイトを参考にしました。どうもです。
>> フォルダ以下を再帰的にgrep検索する方法 – gorton-lab 日記の下書き
>> Help.GitHub – Ignore files

LINEで送る
Pocket

[JavaScript] Canvas2D で 3D

2011/12/20

こんにちは。きんくまです。
3Dの基礎理論をまたやり直しています。


これらの本を使っています。
私みたいな初心者向けなので、とてもよいです。

>> ActionScript 3.0 アニメーション
>> ゲーム開発のための数学・物理学入門

AS3でも前に一度やっているのですが、JavaScriptでもう一回やってみようと思っています。

上のデモはこうやりました。
CoffeeScript を最初に書いて
Cakefile が .coffee ファイルたちを監視していて、jsにコンパイル
という感じです。

LINEで送る
Pocket

[JavaScript] ファイルに変更があったらコンパイルしてファイルを連結して書き出すCoffeeScriptのCakefile

2011/12/18

こんにちは。きんくまです。

CoffeeScriptを勉強中です。
Cakefileというのを見つけました。そんで調べてみました。
バッチファイルのようなものだと思いました。

こんな感じに使いたくなりました。

1. src/*.coffeeファイルたちを監視
2. もし変更(保存)があったら、コンパイルする
3. コンパイルしたものを連結して lib/main.js に書き出す

下のコードを書きました。
これであってるのかどうかわかりませんが、動きます。

Cakefile

{spawn} = require 'child_process'

task 'watch', 'watch src/ and concatenate them to lib/main.js', (callback) -> 
  watch = spawn 'coffee', ['-w', 'src/']
  watch.stderr.on 'data', (data) ->
    process.stderr.write data.toString()
  watch.stdout.on 'data', (data) ->
    console.log 'file changed'
    build = spawn 'coffee', ['-j', 'lib/main.js', '-cl', 'src/']
    build.stderr.on 'data', (data) ->
      process.stderr.write data.toString()
    build.on 'exit', (code) ->
      if code is 0
        console.log 'build complete'

使い方
ターミナル上でこう打ちます

cake watch

これらのページを参照しました。ありがとうございますです。

>> Cakefile(zsh) – podhmoの日記
>> CakeFileの使い方 -CoffeeScript- – プログラムdeタマゴ
>> node.js – coffee script cakefile task not finishing – Stack Overflow
>> [HowTo] Compiling and Setting Up Build Tools – GitHub
>> The Little Book on CoffeeScript – Compiling

LINEで送る
Pocket

[JavaScript] CoffeeScriptをmacにインストール

2011/12/16

こんにちは。きんくまです。

CoffeeScriptというものがあります。

coffee_install1

これはどういうものかといいますと、.coffeeファイルをJavaScriptへコンパイルするものです。

1. .coffeeという拡張子のファイルに、JavaScriptより簡潔な書き方で(ていうか独自)プログラムを書きます。
2. .coffeeファイルをJavaScriptファイルにコンパイル
3. この書き出されたJavaScriptファイルは普通のJSファイルなので手書きのものと変わらず、ブラウザで動く

CoffeeScriptのトップページに.coffeeファイルとコンパイル後のファイルが比較して載っているので、
参考にしてみるといいかもしれないです。

それで、今Canvasタグを練習していたのだけれど、CoffeeScriptで書いてみたくなったので、今回はそのインストール方法について書きますです。

ちょっと話を脱線するとCanvas2Dで3Dをやるのはjsdoitで検索をかけてみたらもう1年ぐらい前に盛り上がっていたみたいですね。こんな感じ。
>> 変体
>> HTML5で3D その6(ドーナツ)

これを自分でも作ってみたいなと思っているところです。
あとCanvas3Dの本命はWebGLになると思うので、こっちが終わったら、
そっちの方も今度やってみたいと思っています。
>> Learning WebGL
>> Learning Three.js

インストールの続き

CoffeeScriptのページを見ると、インストールにはNode.jsとnpmが必要と書いてあります。
>> Node.js
>> npm

Node.jsはブラウザの外で動かすJavaScript実行環境です。Chromeのv8エンジンで動いているみたいです。
npmはNode Package Managerの略で、Nodeを使ったツール(例えば今回のCoffeeScriptとか)をインストールときに依存関係のあるデータなどを自動で管理してくれるものです。これがあると、自分でライブラリを個別にインストールしたりしなくてもよいので楽になると思う。

で、さっきみたら、Node.jsのmac用のインストーラを使うとNode.jsとnpmがもれなくインストールされます。

coffee_install2

インストールが終わったら、ターミナルを起動して、バージョンを確認すれば、
インストールされていることが確認できると思います。

node -v
npm -v

それぞれ私の環境tだと、v0.6.6と1.1.0-beta-4と出力されました。
これでCoffeeScriptのインストールの準備が整ったので、
ターミナルで次のコマンドを入力。

sudo npm install -g coffee-script

パスワードを入力するように求められるので、アカウントのパスワードを入力すれば
あとは、自動でCofeeScriptのインストールが完了します。

ターミナル上でこう入力すると

coffee -v

CoffeeScript version 1.1.3と出力されました。
試しに、コンパイルしてみます。

test.coffee という名前のファイルにこう書きます。

square = (x) -> x * x

そのファイルのあるディレクトリにターミナルで移動して、以下を入力します。
ディレクトリパスを入れるのが面倒なときは、ツールを使ったり、フォルダをそのままターミナルにドラッグドロップすると便利です。

cd ディレクトリパス
coffee -c test.coffee

うまくいくとtest.jsというファイルが出力されます。

test.js

(function() {
  var square;

  square = function(x) {
    return x * x;
  };

}).call(this);

それで、jsとかhtmlはAptanaを気に入っているので、こっちでやるときの豆知識。
(ターミナル上のemacsを使ってファイルを書いて、戻ってコンパイルというのは良さそうなのですが、個人的にはemacsが使いこなせないのです。でも、キーバインドはemacsにしている。)

Aptana画面左上の部分にターミナルボタンがあるので、それを押すと、ターミナルがAptanaの画面の中に表示されます。

coffee_install3

coffee_install4

そうすると、編集中のファイルのディレクトリをカレントにしたターミナルが立ち上がり、普通に使えるようになります。
だから、Aptana上で編集して、Aptanaの中のターミナルでコンパイルできると。
おー、便利。

今回のエントリはこのAptana内部のターミナル機能に萌えーっとしたので、書きました。

※追記
-wを使うと便利みたい。ファイルが保存された時点で、勝手にコンパイルしてくれるという。どうもです。
>> CoffeeScript マジ Coffee でかわいい – glasses factory

こんな感じに書く。

coffee -w -c test.coffee

そしたら、保存するたびに、自動でコンパイルしてくれちゃうよ。
やめたくなったらControl+cだよ。

LINEで送る
Pocket

ページトップへ戻る