イヤホンが断線したので半田こて買って修理してみた
イヤホンが聴こえなくなり、修理に出そうかと思ったのですが、
3000円くらい掛かるのと、半田こてに興味があったので、
半田こてセットを買ってD.I.Y.してみました。
準備
- 半田こてセット
- 最悪こてと半田があれば問題無いです
- 出版社/メーカー: 太洋電機産業
- メディア: Tools & Hardware
- 購入: 11人 クリック: 38回
- この商品を含むブログ (4件) を見る
- はさみ
- ライター
- イヤホン
- 交換用ミニプラグ
NEUTRIK NYS231-BG 3.5φステレオミニプラグ 金メッキ端子 (ブラックニッケルボディ:適応ケーブル4mmまで)
- 出版社/メーカー: ノイトリック
- メディア: エレクトロニクス
- クリック: 1回
- この商品を含むブログを見る
作業
半田付けまで
- イヤホンの先をはさみで切り、さらに数cm分ケーブルのみをはさみで上手く取り除きます。
- ミニプラグのカバーを先にケーブルに通します。
- 赤・青・金の3本の線があるので、先をこねて解きます。
- 線の先をライターで炙って被覆を取り除きます。
- ミニプラグを音楽プレーヤーに挿して、音楽を流した状態にします。
- 3本の線をミニプラグに当ててみて、イヤホンが聴こえるかどうかを試します。
- 3本の線がミニプラグのどの場所に対応するかは場合によって異なるらしいですが、自分は左(青)、右(赤)、中央(金)でした。
- この時、線を当てる場所や角度が多少ずれても聴こえる状態でないと、完成した時ちょっとの衝撃で聴こえなくなる可能性があります。
半田付け
- 線をミニプラグの穴に内側から通し、すぐ溶接できる状態まで安定させます。
- ここはめちゃくちゃ苦労しました。中央を最後に通すと比較的やりやすかったです。
- 半田こてを温めます。台に置いておきましょう。
- (上の半田こてセットであれば)バネ状になっている半田の先5cmくらいを解きます。
- いよいよ溶接です。順番としては
- 半田こてを溶接箇所に先に当て
- 半田を当てて溶かし
- 十分溶かしたら半田を離し
- 半田こてを最後に離します。
- 3つ全部溶接し終わったらカバーを付けて完成です。
感想
- 面白い
- 十分聴こえる状態まで回復
- 机拭こう
参考
シェルスクリプトでファイル名を正規表現比較で分岐して一括リネーム
.jpgをつけずに保存してしまった画像ファイルに一括で.jpgをつけたい。
ただし同じフォルダに.jpgファイルなどもあるのでそれらはリネームしたくない。
そんな状況になったのでshellで正規表現を使って一括リネームした話。
for f in * ;do if [[ ! $f =~ .*(jpg|png|sh) ]];then mv $f $f.jpg fi done
絶対「えっ?そんなのmv *.jpg ./tmp
とかで避ければ良い話じゃん!」とか言ってはいけない。
参考
シェルの基本
シェルスクリプト入門 書き方のまとめ | Memo on the Web
記号について
記憶力悪いしシェルを頻繁に使わないのですぐ忘れるのです。
Pythonで競技プログラミング(プロコン)
今更ではあるが今後AtCoderの問題を解く上で使ったライブラリとか手法とかを
ここにまとめていこうと思う。python限定。
入出力
基本
i = input() x,y = map(int,raw_input().split())
応用
複数行を一気に読んで、入出力のオーバーヘッドを無くせる。
(行数が多い時、稀にこれをしないとTLEになる。)
lines = sys.stdin.readlines()
因みにローカルで実行するときは<ctrl-d>
とかでEOFを検知させる必要が有る。
ローカルでの実行
クリップボードにテストデータ(テキスト)コピーしたあと、
以下で簡単に実行できる。
pbpaste| python test.py
問題が難しくて、テストデータを何回も使いそうだと思った場合は、
ファイルに書き出しておく。
pbpaste > dataset1 pbpaste > dataset2 python test.py < dataset1 python test.py < dataset2
ライブラリ
heapq
優先順位付きキューを実現するモジュール。 Donutsコン2015C問題などで使用したが、すごく使う機会が多い。 基本的に「要素を追加・最小値を削除」が継続的に必要な時に使う。
from heapq import heappush, heappop, heapify heap = [2,3,7,1] heapify(heap)
以下の3つの機能に対応する操作がある。
キューに対して要素を優先度つきで追加
heappush(heap,element)
最も高い優先度を持つ要素をキューから取り除き、それを返す
heappop(heap)
最も高い優先度を持つ要素を取り除くことなく参照
heap[0]
itertools
組み合わせや順列を使うときは、素直にライブラリを使うのが良さげ。 Donutsコン2015のB問題で使用(実際には216は64*1024=105程度のオーダーしか無いので十分扱えたが…)
Python で組み合わせや順列を得るときは itertools を使う | CUBE SUGAR STORAGE
- 5C2だと
itertools.combinations([1,3,4,6,7],2)
Union-Find
Makoto Hiroiのページを参考にしました。
ARC#032のB問題で使用。
class UnionFind3: def __init__(self, size): # 負の値はルート (集合の代表) で集合の個数 # 正の値は次の要素を表す self.table = [-1 for _ in xrange(size)] # 集合の代表を求める def find(self, x): if self.table[x] < 0: return x else: # 経路の圧縮 self.table[x] = self.find(self.table[x]) return self.table[x] # 併合 def union(self, x, y): s1 = self.find(x) s2 = self.find(y) if s1 != s2: if self.table[s1] <= self.table[s2]: # 小さいほうが個数が多い self.table[s1] += self.table[s2] self.table[s2] = s1 else: self.table[s2] += self.table[s1] self.table[s1] = s2 return True return False def main(): lines = sys.stdin.readlines() n,m = map(int,lines[0].split()) uf = UnionFind3(n) for line in lines[1:]: a,b = map(int,line.split()) uf.union(a-1,b-1) size = 0 for v in uf.table: if v < 0: size += 1 print(size-1) main()
最初self.table
にはsize個の-1が入っている。
これは、要素数1の集合がsize個あるということ。
負の値を持つのはルートだけなので、負の個数を調べれば素集合の数がわかる。
nCr mod m(コンビネーションのmodulo計算)
プロコンでは組み合わせnCrの計算結果を出力させる際に、数が大きくなっても大丈夫なようにmodulo計算させる場合が多い。
(ARC#039のB問題など)
def modc(a,b,m): c = 1 for i in xrange(b): c = c * (a - i) % m c = c * modinv(i + 1,m) % m return c def egcd(a, b): (x, lastx) = (0, 1) (y, lasty) = (1, 0) while b != 0: q = a // b (a, b) = (b, a % b) (x, lastx) = (lastx - q * x, x) (y, lasty) = (lasty - q * y, y) return (lastx, lasty, a) def modinv(a, m): (inv, q, gcd_val) = egcd(a, m) return inv % m
nCr mod m
はmodc(n,r,m)
で得られる。
modulo(合同式)の四則演算
- 加算:(a + b) mod m = (a mod m) + (b mod m)
- 減算:(a - b) mod m = (a mod m) - (b mod m)
- 乗算:(a * b) mod m = (a mod m) * (b mod m)
- 除算:(a / b) mod m = (a mod m) * b'
- b'はb mod mの逆元(逆数)で、上記のmodinv(参考)で求められる。
Pylearn2でディープラーニングまとめ
Pylearn2のインストール
今ナウいディープラーニングのライブラリ「Pylearn2」のインストールとチュートリアル - Qiitaを参考にしました。
virtualenv --no-site-packages pylearn2env source pylearn2env/bin/activate pip install numpy pip install scipy pip install setuptools pip install matplotlib pip install --upgrade --no-deps git+git://github.com/Theano/Theano.git pip install -e git+https://github.com/lisa-lab/pylearn2.git#egg=Pylearn2
bin/activate
で環境変数の設定
There's no magic: virtualenv edition - Blog - Hacker Schoolとか見たりして
activate時に自動的に変数を設定。
もちろんこれらはその都度入力するのでも問題無い。
export PYLEARN2_VIEWER_COMMAND="eog --new-instance" # 適当などこかに書く。GNOMEの場合 export PYLEARN2_VIEWER_COMMAND="open -Wn" # Macの場合 unset PYLEARN2_VIEWER_COMMAND # deactivate()内
また、データパスをexport PYLEARN2_DATA_PATH
で設定。
準備知識から実践まで
これらの資料を順に読んだら一通り理解できました。
準備知識(Auto Encoderなど)
Auto Encoderについての詳細
Pylearn2の詳しい使い方
サンプルデータを使って文字認識
思ったこと
確かに特徴抽出は自動になったけど、結局チューニングが難しいので扱うのは容易くなさそう。
Git超入門チートシート
いつやるの?Git入門 v1.1.0が個人的にすごく分かりやすかったので、
覚える意味も込めて簡単にまとめました。(といっても羅列しただけだけど…)
用語
- HEAD
- gitリポジトリが見ている最新のcommit状態
- branch
- コミットツリーの内の、どれかのコミットを指す単なるフラグ
- 参考のところのスライドの図(127~ of 211)が分かりやすかった。
- ワークツリー
- 作業ディレクトリ。
- ステージングエリア
- 次回コミット時に扱うファイル群を管理するインデックス。
コマンド一覧
基本
git status
- branchの状態や変更されたファイルを教えてくれる
git add .
- 変更されたファイルをすべて加える
git commit -m “first commit"
- aオプションですべてのファイルをaddしてからコミット
git rm
- 削除&削除情報のaddを同時にやったのと同じ?
git mv
- 移動以下略
git reset HEAD <file>
- ステージングエリアをgitのHEAD状態に戻す
- 参考URL
git checkout -- <file>
- 作業ディレクトリをステージングエリアの状態に戻す
git log --graph --color
- コミットログを見る
gitk
- GUI起動
ブランチ
git branch -a
git branch <new_branch>
git checkout <branch>
- 作業中のブランチを切り替える
git checkout -b <new_branch> [<start_point>]
- Gitのブランチを作成して切り替える
git merge <branch>
- 現在のブランチに指定ブランチをマージ
git rebase <branch>
- 現在のブランチを指定ブランチからリベース
リモート
git clone <url>
git remote add <repo> <url>
- repo:リモートリポジトリの名前。大抵origin
git remote
- リモートリポジトリ一覧を表示
-v
でurlも合わせて表示
git push <remote> <refspec>
- 例:
git push origin master
- originはリモートのurlの名前、masterはリモートのブランチ名
- 例:
git fetch <remote> <refspec>
- 例:
git fetch origin master
- originのmasterをローカルのgitに適用する
- 例:
git pull <remote> <refspec>
- mergeも一緒にする
その他
git rm -r --cached .
.gitignore
の設定を反映させる。
リモートリポジトリとの接続に鍵を使う
Bitbucketアカウント作成〜ローカルのGit既存プロジェクトをインポート(push) | EasyRambleが分かりやすいです。
MySQLからSQLite3へデータベースを移行する
ツールが無いかと探してみたらあったのでストック。
使い方は以下を実行してパスワードを入力するだけ。
./mysql2sqlite -u <ユーザ名> -p <MySQLのDB名> | sqlite3 <SQLite3のDB名>
MacにMEAN.IOを入れてTwitterのOAuthログインできるWEBアプリの作成まで
Dockerで開発するわけにもいかないので、ローカルで開発できるようにします。
MEANに必要な全てをインストールしていきます。
インストール
MongoDB
brew update
brew install mongodb
初期状態でdbpathは/usr/local/var/mongodb
、
logディレクトリは/usr/local/var/log/mongodb
になってて、
文句は無いのでこのままにしておきます。
起動自動化
Linuxにはchkconfigがありますが、Macにはlaunchctlがある模様。
MacでMongoDBをDaemon化して自動起動させる - Meltdown Countdown rev.
ここのサイトさんを参考に以下のコマンドを実行して、
org.mongo.mongod.plist
ファイルを作成。
sudo curl https://gist.githubusercontent.com/marutanm/976445/raw/org.mongo.mongod.plist | sudo tee /Library/LaunchDaemons/org.mongo.mongod.plist > /dev/null
ラベルはmongod
とかに変えてもいいかもしれません。
そしてとりあえず起動。
launchctl load /Library/LaunchDaemons/org.mongo.mongod.plist
Node.js
普通に公式でダウンロードしたパッケージを実行すれば良いです。
パーミッションの設定
このままだとNode.jsのパッケージマネージャであるnpmを使う際に、
毎回sudoを付けなくてはいけないので、以下を実行。
sudo chown -R `whoami` ~/.npm sudo chown -R `whoami` /usr/local/lib/node_modules
Homebrewとかもsudo付けないのでこちらの方が落ち着きます。
Express
npm install -g express
gオプションを付けると全てのプロジェクトでパッケージを使えるように
グローバルインストールしてくれる。
Bower
Twitter社が作ったフロントエンド用のパッケージマネージャらしいです。
これも後で使うのでインストール。
npm install -g bower
Grunt
npm install -g grunt-cli
MEAN
いよいよ本体です。素直にトップページに書かれているコマンドを打ちます。(sudoは除いて)
npm install -g mean-cli
これで必要なものは全てインストールされました。
アプリの用意
雛形アプリの作成
アプリは以下のコマンドで簡単にディレクトリ配下に作成できます。
mean init yourNewApp
依存モジュールのインストール
先ほど作ったアプリのルートディレクトリに潜り込んで、
依存モジュールをインストールします。
cd ./yourNewApp npm install
BowerによるCSSパッケージ等のダウンロード
同じディレクトリで以下を実行。
bower install --allow -root
起動
アプリのルートディレクトリで単純に以下。
grunt -f
自分の場合fオプションが無いと実行できませんでした。
これで、晴れてhttp://localhost:3000でアクセスできます。
起動オプション
起動するポート番号なんかはどこで設定するのだろうと調べたら、
config/env/all.js
にprocess.env.PORT
という変数を発見。
Node.js の起動オプション、環境変数、npm start の話 - Block Rockin’ Codes
このサイトさんに以下のように書かれていました。
オプションとは違いますが、起動時にあわせて使います。 基本は、 xxx=yyy という変数をつけて実行すると、ランタイムからはprocess.env.xxx で yyy の値を文字列値として受け取れることを利用しています。 慣習的に NODE_XXX という変数が使われます。例えば独自変数 NODE_MY_FLG を指定したい場合。
$ NODE_MY_FLG=true node server.js
このように指定できます。
よって、ポート番号や起動する環境を指定したいときは以下のように書きます。
NODE_ENV=test PORT=8080 grunt -f
Twitter-OAuthの設定
CONSUMER KEY・SECRETの取得
Application Managementでアプリを作成しましょう。
- Callback URLには
http://127.0.0.1:3000/auth/twitter/callback
と書いてください。- localhostじゃない理由は、それだと登録できないからです。
- Consumer KeyとConsumer Secretはメモしましょう。
設定ファイルに書き込み
config/env/development.js
を書き換えましょう。
twitter: { clientID: 'YOUR_CONSUMER_KEY', clientSecret: 'YOUR_CONSUMER_SECRET', callbackURL: 'http://127.0.0.1:3000/auth/twitter/callback' },
これで後はhttp://127.0.0.1:3000にアクセスするだけです。以上で終了です。