Gitを使ってみた
Gitを使ってみた
.zshrcや.emacs.elなどを屋外でも使いたくなったため、GitHubを利用するために、Gitの使い方を調べた。
結果的にはGitHubではなく、BitBucketに落ち着いた。
Gitの使い方
主に
GitHubを使ってみよう!導入と簡単な流れ、よく使うコマンドなど。 - YATのBLOG
に記述されている順に行った。
よく利用するコマンドだけまとめておく。
init : リポジトリの初期化 $ git init clone : 既存のリポジトリをローカルに複製。dirnameが無い場合はgitの名前がそのままdirnameになる。 $ git clone https://hogehoge dirname status : 変更が加えられたファイルを確認 $ git status diff : ファイルの変更点をdiffで表示 $ git diff filename $ git diff HEAD add : コミットするファイルを指定 $ git add filename commit : コミットする $ git commit $ git commit -m "メッセージをつける場合は-mをつける" $ git commit -a -m "自動で変更したファイルを追加したい場合は-aをつける" log : コミットログを閲覧する $ git log push : 公開リポジトリへプッシュする $ git push "公開リポジトリ(または名前、だいたいorigin)" "送信するブランチ(masterとか):送信先ブランチ(省略した場合は送信するブランチとおなじになる)" pull : 公開リポジトリの変更点をローカルリポジトリにマージ $ git pull "公開リポジトリ" remote : 公開リポジトリの設定 $ git remote "公開リポジトリ(git:~~とか)" "名前(だいたいorigin)" リポジトリを変更したい場合は以下を実行 $ git remote set-url "名前(だいたいorigin)" "変更する公開リポジトリ" checkout : ブランチを分けるときに使うらしいが自分はコミット前に元に戻す時に使っている $ git checkout "元に戻すファイル名"
その他コミットを取り消したり、pushを取り消す場合は、下記のURL参照。
git add, commit, push の操作を、それぞれの段階で取り消す方法 | deadwood
また、Gitで無視したいファイルがある場合は下記を参照。
git でログファイルなどを、バージョン管理から外す方法(.gitignore) - yun_kichiの日記
VLCで5秒スキップするLua Extensions作る
前置き
前からVLCの再生時に30秒や60秒スキップできないかなぁと思っていた。
なので今回作った。
欲しかった機能は以下のとおり
- スキップ秒数を指定できる
- 前にも後にもスキップできる
- 初期値は5秒にする (5秒の方が色々便利かなと思って)
- Numpad 1で前へ、Numpad 2で次へスキップ可能
プログラム
- skip_movie.lua
skip_second = 5 -- スキップする秒数。デフォルトは5秒 skip_previous_key = 49 -- Numpad 1 skip_next_key = 50 -- Numpad 2 function descriptor() return { title = "ムービースキップ",capabilities={} } end function activate() create_dialog() vlc.var.add_callback(vlc.object.libvlc() , "key-pressed", key_press) end function deactivate() vlc.var.del_callback(vlc.object.libvlc() , "key-pressed", key_press) end function close() vlc.deactivate() end function key_press(var , old , new , data) if new == skip_previous_key then skip_movie("Previous",skip_second) end if new == skip_next_key then skip_movie("Next",skip_second) end end function create_dialog() w = vlc.dialog("スキップする秒数を入力してください") w1 = w:add_text_input(skip_second,1,1,1,1) w:add_button("更新",click_Refresh,2,1,1,1) w:add_button("<",previous_skip,3,1,1,1) w:add_button(">",next_skip,4,1,1,1) end function next_skip() skip_movie("Next",skip_second) end function previous_skip() skip_movie("Previous",skip_second) end function click_Refresh() skip_second = tonumber(w1:get_text()) end function skip_movie(action,sec) local input = vlc.object.input() local now = vlc.var.get(input,"time") if action == "Previous" then sec=-sec end vlc.var.set(input,"time",now + sec) end
テキストボックスにフォーカスしている時にエンターキー押すとskip_secondが更新されるようにしたかったが、できないようだ。
仕方なく、更新ボタンを作成し、ボタン押下でskip_secondを更新するようにした。
一応、キーの値を取得するために作ったluaも載せておく。
function descriptor() return { title = "test" ,capabilities={} } end function activate() vlc.var.add_callback( vlc.object.libvlc(), "key-pressed" , key_press ) end function deactivate() vlc.var.del_callback( vlc.object.libvlc() , "key-pressed" , key_press ) end function close() vlc.deactivate() end function key_press(var , old , new , data) vlc.msg.info("Push key Number:"..new) end function create_dialog() w = vlc.dialog("Input Key!") end
<script type="text/javascript"> <!-- script() --> </script>でなぜコメントアウトするのか
久々に見てハマったのでメモ。
<script type="text/javascript"> <!-- function(){ ... } --> </script>
なんのことはない。
なぜコメントアウト内に書くのかというと、ブラウザのHTML読み込みに対して無視させるためである。
epgrecの録画済一覧ページをちょいといじった
前置き
自分の録画サーバのディレクトリ構成は以下のようになっている。
un_encode_ts/ : エンコード前のtsファイルを入れる encoded_ts/ : エンコード完了後のtsファイルを入れる mp4/ : エンコードしたmp4ファイルを入れる
現状は、インストールしたepgrecのままなので作成したasfのストリーミング先が un_encode_ts/ のままである。
これでは不便というかtsファイルが見れないので改良。
その他、便利かな?と思った機能を追加した。
以下、追加した機能
- asfのストリーミング先をencoded_ts/以下に変更
- ストリーミング先にmp4を追加
- テーブルを録画日時による昇順/降順で表示
- 1ページに表示する件数を選択
触ったファイル
触ったファイルは以下のとおり。
./templates/recordedTable.html ./recordedTable.php ./viewer.php
以下、差分。
- recordedTable.html
録画済ページ表示用ファイル。
optionとしてソート、表示件数を追加。
テーブルカラムとして、モードが不要だったので削除。
mp4のリンク先を追加。
@@ -153,0 +154,9 @@ +ソート<select name="sort"> + <option value="DESC">降順</option> + <option value="ASC">昇順</option> +</select> +表示件数<select name="table_items"> + <option value=50>50</option> + <option value=100>100</option> + <option value=500>500</option> +</select> @@ -174 +183 @@ - <th>モード</th> +<!-- <th>モード</th> --> @@ -176,0 +186 @@ + <th>mp4リンク</th> @@ -186 +196 @@ - <td>{$rec.mode}</td> +<!-- <td>{$rec.mode}</td> --> @@ -188,0 +199 @@ + <td><a href="{$rec.asf_mp4}" id="tid_{$rec.id}">mp4</a></td>
- recordedTable.php
データベースから録画済ページのデータを取得する。
$sort : ページ表示のソート用の変数
$table_items : 1ページの表示件数
を追加。POSTで受信する。
mp4のリンクページ 追加。
asfはviewer.phpで作成されるため、mp4かtsかの判定用としてGETメソッドのパラメータにfile_typeを追加。
@@ -13,0 +14,2 @@ +$sort = "DESC"; +$table_items = 50; @@ -43,0 +46,10 @@ + if( isset($_POST['sort'])) { + if( $_POST['sort'] != "" ) { + $sort = $_POST['sort']; + } + } + if( isset($_POST['table_items'])) { + if( $_POST['table_items'] != "" ) { + $table_items = $_POST['table_items']; + } + } @@ -47 +59 @@ -$options .= " ORDER BY starttime DESC"; +$options .= " ORDER BY starttime " . $sort . " LIMIT ". $table_items; @@ -60 +72,2 @@ - $arr['asf'] = "".$settings->install_url."/viewer.php?reserve_id=".$r->id; + $arr['asf'] = "".$settings->install_url."/viewer.php?reserve_id=".$r->id."&file_type=ts"; + $arr['asf_mp4'] = "".$settings->install_url."/viewer.php?reserve_id=".$r->id."&file_type=mp4";
- viewer.php
asfファイル作成ファイル。
GETでfile_typeを取得。
file_typeから作成するリンク先を encoded_ts 以下にするか mp4 以下にするか決めている。
@@ -17,0 +18 @@ +$file_type = $_GET['file_type']; @@ -41 +42,9 @@ - echo "<REF HREF=\"".$settings->install_url."/video/encoded_ts"."/".$rrec->path ."\" />"; + if( $file_type == "ts" ) echo "<REF HREF=\"".$settings->install_url."/video/encoded_ts"."/".$rrec->path ."\" />"; + if( $file_type == "mp4") { + $path_split = explode( "." , $rrec->path ); + $file_name = $path_split[0] . ".mp4"; + $file_dir = "/video/mp4"; + if( file_exists( "." . $file_dir . "/watched/" . $file_name ) ) $file_dir = $file_dir . "/watched"; + if( file_exists( "." . $file_dir . "/watched/2013/" . $file_name ) ) $file_dir = $file_dir . "/watched/2013"; + echo "<REF HREF=\"".$settings->install_url.$file_dir."/".$file_name ."\" />"; + }
客観的に見てミスを減らす方法
客観的にみる方法が少しわかった気がしたのでメモ。
1. 他人の誰かを思い浮かべる(自分は後輩を選んだ)
2. その人が、このファイルを確認してくださいとお願いしてきたと想像する
3. そこで、その人がミスを残したまま提出させないという心構えでチェックする。
後、間違ってたらなんで間違ってるのかを後輩(自分)に聞く。
そうすると答えは自ずとと出てくる。
後輩には悪いがこれが一番簡単だった
iPhone脱獄メモ
ここに記載されているものはセキュリティに関して考慮されてないので、自己責任で参考にしてください。
iPhoneにLinuxコマンドをいれる
Cydiaで
1. APT(バージョンいろいろあるけど全部)
をインストール。
その後、Cydiaまたはapt-getで
- vim
- adv-cmds(finger, fingerd, last, lsvfs, md, ps)
- inetutils(ftp, inetd, ping, rlogin, telnet, tftp)
- diffutils(diff, diff2)
- findutils(find, locate, updatedb)
- grep
- network-cmds(arp, ifconfig, netstat, route, traceroute)
- sudo
- shell-cmds(killall, mktemp, renice, time, which)
- top
- less
- zsh
- wget
を入れる
念のため、respringする。
iPhoneでgccでコンパイルする
wgetで、http://code.google.com/p/iphone-gcc-full/downloads/list から iphone-gcc.deb をダウンロード
dpkg -i iphone-gcc.deb
でインストール。
これだけでおkなはず。
試しにslコマンドをgccしてみればわかる。
iPhoneをモバイルNASにする
iPhoneをモバイルNASにする意味があるかどうかはわからんが、モバイルNASにした。
PCnetworkをインストールする
iPhoneのsmbdは飾りなのか全く動作しなかった。
そこでPCnetworkを使う
1. CydiaでPCnetworkをインストール
2. /var/mobile/Library/Preferences/com.pmbaty.pcnetworking-conf にアクセスし、sambaの設定をする。
3. 書き込み完了後、
chmod -w com.pmbaty.pcnetworking-conf
で書き込み不可にする。
これをしないとPCnetworkの設定を開くと設定が上書きされてしまう
iPadからLinuxMintにVPNでつないでみた
iPadからSplashtopで繋げたい。そのためにiPadからLinuxMintにVPNでつなぐようにした。
結論からいうと、結局VPN&VNCではLinuxMintに繋ぐ事はできなかったが、VPNで接続できるようにはなった。
VPNはPPTP、L2TP、IPsecなどがあるが、今回は1番簡単かつ資料が多そうなPPTPを使うことにした。(ちなみにPPTPは昨年に脆弱性が発見されたので使わない方がいい)
1. PPTPのインストール
sudo apt-get install pptpd
2. confファイルの編集
/etc/pptpd.conf
localip 192.168.200.1 remoteip 192.168.200.128-238
ここで不思議に思ったのは、勝手にローカルIPやリモートIPを割り当てていいのだろうかというところ。
なぜ行けるのかもわからないが、うまくできている。
ローカルIPの仕組みを知る必要がある。
/etc/ppp/pptpd-options
ms-dns さくらのDNS ms-dns さくらのDNS2
/etc/ppp/chap-secrets
# client, server, secret, IP addresses username pptpd "password" *
serverは/etc/ppp/pptpd-optionsのnameと同じにする事。
デフォルトはpptpdになっている。
*にはリモートに割り当てるIPアドレスを書く。
*なら192.168.200.128-238の全てから一つ適当に選ばれるはず。