自己紹介

自分の写真

朝ネスのマスターやってる人。
巷では「けもネス」って呼ばれてるけど、「朝ネス」です。
どうか間違えないでください。

2014年12月23日火曜日

nodejsを使っていて気付いた点。

最初に断っておくけど、私はjavascript初心者です。
なので9割方はjavascriptをディスってます。
あと変なネタ混じってます。スルーしてください。
それとTipsでも何でもありません。ただの作文です。感想です。



 趣味で家計簿サーバ作ってるんだけど、
①リアルタイム処理をすごく簡潔に書ける。
②サーバの構築がものすごい楽。
という風の噂を小耳に挟んだ事があった様な気がしたので、
「nodejs」を使って最近日曜の半分以上を使ってがりがりやってたので、
分かった事の10分の1を纏めます。


最初は何とかなるって思ってました、nodejsって結構前から出てる最新型なので、
javascriptのほうも全く知らなかったのでいい勉強になると思い、
そしてリアルタイム通信が魅力的でした。
扱いづらいプラットフォームと言語とかって話だが、最新型が負けるわけねえだろ!行くぞおおぉぉあ!!


nodejsのデメリット

  1. サーバ側でnodejs特有の書き方を覚える必要がある
  2. 実はそんなに速度ない
  3. 頻繁に更新される
  4. 致命的な不具合があるとサーバが即停止する
  5. 「co」を使わないとお話にならないじゃん・・・
  6. 「co」も割と頻繁に更新されてる
  7. 言語がjavascriptである


nodejsのメリット

  1. サーバの構築がapacheとphpとmysqlのサーバ組むより、アホみたいに楽
  2. クライアント側であるwebビュアー側との通信もそれなりに楽
  3. サーバとクライアントとのリアルタイム通信がアホみたいに楽


こんな感じですね、感想。


それでまとめとして。

  1. javascriptのせいで大きな開発をするべきではない
  2. 不具合あるとサーバが即停止するので絶対ミスれない
  3. javascriptのせいでメンテ性がアホみたいに低い
  4. 初期開発効率がめちゃくちゃ高いけど、javascriptのせいですぐに急激に開発効率が下がる
結論「だいたいjavascriptのせい」


次、行きます



 前章のまとめでは(javascriptのせいで)デメリットが大きすぎて割りに合わないと
言い切りましたが、初期開発効率が非常に高いという点に重点を置くならば、
小さいプログラムを書く上では非常に良いものです。また、よく訓練されたjavascripterなら
コールバック地獄を中をすがすがしくコーティングしていくでしょう。なので、
要はjavascriptでの開発耐性がものを言う戦場なのです。
 しかし、javascriptでコールバックとか知らんとか、jquery信者とか、
でもしかプログラマーな方々は、即座にコールバック地獄の中を渡り歩いて行かなければ
ならないのです。ですが、もし、この茨の道を通り、生存しているならば、
あなたはjavascriptでの開発力を上げられるでしょう。


それでまとめとして。
  • javascript初級者なら見事なまでのコールバック地獄を堪能できる。
  • コールバック知らない人はこれで嫌でもコールバックが分かる。
    • これで生きていれば素養の持ち主として認められる可能性が上がる
    • もし思考停止すると「お前で28人目。恐れるな、バグまみれになる時間が来ただけだ」
  • 訓練されたjavascripterなら大規模開発も出来る。
  • 不具合が絶対許されないので変な気分に浸れる。

結論「javascriptのクソさを学ぶなら最適じゃない?」


次、行きます



 前章でコールバック地獄に揉まれるので、初心者だと生きているだけで奇跡に近いと
言いました。ですが別にひたすらコールバックに揉まれることがあまりありません。
知能が高ければ「co」というモノがあり、これを使いこなせればある程度コールバックを
緩和することが出来ます。しかし、そもそもこの「co」が非常に癖の強いモノで、
まず例文を動かす事ができたら
やっぱり大したことない! 言われたとおりだ、ハハハ!
って調子に乗っていいと思っていいです。そのあと過信しすぎてしまったが為に死にます。
  1. カリー化を知らないといけない
  2. カリー化しないといけない
  3. トップコードに書けない
  4. 自らもコールバック関数を書かないといけない
まずmysqlを使おうとすると、mysqlのライブラリをカリー化しなければいけないのですが、
これ自体は問題は無いのです。問題はこのライブラリのメソッドを使った自作ライブラリなんか
作ろうとすると死にます。なぜならクラスオブジェクトの中の関数なので、関数というより
メソッドなのです。メソッドは使えるところが限られますし、使う条件もあります、クラスがなければ
絶対に動きませんし、クラスのほかの関数に依存だってしてあるときがあります。
これを自作関数でラッパーしてカリー化するにはクラス内部にカリー化を仕込まないと
いけないのですが、私はメンドクサイので、参照だけ解決して無理やり実装しました。
このあたりの実装は様々あると思うので詳しくはググってください、無いかもしれないけどね。

じゃあ「co」は使えないのか?っていうと、正直デメリットが大きすぎて微妙です。提供された
ライブラリにある関数だけなら何とかなります。ですがこれをラップした自作関数等は
色色メンドクサイ作業が山積みになります。さらにそもそも「co」を使用することによって
速度低下に繋がるのでは?といった検証しなければならない問題があります。

 「じゃあ小規模で収まるならば、それこそ使わなくて良いのでは?
コールバックも10重もしないし、変なのに頼りすぎるのも駄目だろう。なにより
無駄に保守性が下がるのはよろしくない。」と私は思っているので、正直、小規模であれば
「co」を使おうが使わまいがあまり状況は変わらないと思ってます。初心者だと
コールバック地獄から脱出したい一心で「co」に過度な期待をすると返り討ちにされます。
また、この「co」は2014年に更新されまして
気軽にアップデートしたら動いてたプログラムが動かなくなりました。
原因は「co」の基本構文が変わった事で構文エラーが吐かれたことでした。
「co」は特殊な構文なので探すのは容易で修正も容易ですが、なかなかぞっとします。
話が…違うっすよ…coは…特別だって…


それでまとめとして。
  • 「co」はすごい
  • すごいけどカリー化とかしないといけない
  • mysqlのライブラリとかをラッパーした奴は大体カリー化できない

結論「coは既存の問題を幾つか解決するが、
それ以上に問題を生産する。カリー化しなければいけない。」


次、行きます



 前章で「co」なくてもいいんじゃね?って結論が出ました。
問題はこれを使うか使わないかですが、それは他人が決めることじゃなかろうさ。
最終的な決定権は自分にあります。責任も自分にあります。
好きにコードを書き、理不尽に不具合が起きる。楽しいjavascriptライフを!



最後のまとめ
私の技術力が低いだけ。



2014年10月14日火曜日

火炎ちゃんかわいい

最近クリペがメインになった。なってしまった。
サーフィスちゃんプロにもクリペ入れてあるのでワークスペースの移行を偶にしないといけない。
そんな時の強い味方!


C:\Users\ユーザ名\Documents\CELSYS\CLIPStudioPaintVer1_1_0


これをまんま移せばいいらしい。でもこれだけだとツールの配置まで一緒にならない。
ツールの配置は今のところ手動です。はい。





以下どうでもいい話。

アルバイトでファイルの更新する際にどこら辺を更新したのかとか、見比べる際に
Winmerge使ってるんだけど。偶に比較が全行差違が出る場合がある。
全行違うとかありえないし……全行色つきとかありえないし……
これは「改行コード」が違うので出てくる問題で、これは設定を弄くれば治るとか。なんとか。
詳しくは「Winmerge 改行コード」で調べるといいよ。





次、TortoiseSVNのお話

偶にコミットとか、ファイル更新とかに失敗してその後弄くれなくなる問題。
なにやらクリーンアップしないといけないらしいが。
「クリーンアップも出来ません、クリーンアップしてください。」いや死ねよ。
ってなったら次はlogファイルってなるけど「logファイル」なんてものは存在しないんじゃ……
って方にオススメなのがこの方法「SQLite」を用いて、更新し損ねたデータを消し飛ばす。
軽く説明すると。

まずSVNの中にある
.svn/wc.db
こいつが壊れてるので、直すよ!
とゆーわけでまずはコマンドプロンプトとか使って
うんぬんかんぬん/.svn/
まで移動します。
そしてこの中にSQLiteの実行ファイルを入れます。sqlite3.exeとか。
コマンドプロンプトからsqlite3.exeを実行、
sqlite3.exe wc.db "delete from work_queue"
とかする。

詳しくは「delete from work_queue」でググってね。
まさか最終的にまた英語で書かれたウェブページにたどり着くとは思わなかった。
ちなみに英語ニガテな人も大丈夫。グーグル先生に翻訳してもらえばギリギリ大丈夫。
必要な情報は拾えるよ。ただし文字列検索程度はしっかりね。ググり能力が試される!




次、

mysqlで適当な一時テーブルを作る話

もうこれは本当に馬鹿らしいので真似しないでください。


SELECT
    T1.*
FROM
    (
                  SELECT 1
        UNION ALL SELECT 2
        UNION ALL SELECT 3
        UNION ALL SELECT 4
        -- 以下同じ用に続く。
    ) AS T1
;


ええ、ひたすらUNION ALLで繋いでレコード数を稼ぐんですよ。

mysqlにはQueryで一時テーブルが作れないからまじ困ったけど。これで解決。


最後に写真をぺたぺた



これの写真の撮り方忘れた、確か
暗くして
炊いて
f開放
だった気がする