「markdown」を含む日記 RSS

はてなキーワード: markdownとは

2016-09-14

色々試したがMarkdownは使いものにならないとわかった

markdownエディタが増えてきたのでメモ代わりになるかと使っているけど、いざそれを目的の形に変換しようとするとゴミだらけになってしま

結局、HTMLTeXを素で書いていたほうがはるかに楽だった

2016-07-25

gitにおけるコミットログ/メッセージ例文集100

私はコミットログの書き方に悩む英語の苦手な人間である。実際、似たような人は世の中に結構いるようで、頻出単語を集計したりまとめたものは既にあって役に立つのだけれど、これらはあくま単語の話であり、具体的な文を構成する過程でやっぱり困る部分がかなりあった。

要するに、どういう時にどういう文が使われているのか、ということを示した例文集が欲しいのであるググると他にも「例文集があればいいのに」みたいな声はあるくせして、しかし誰も作ろうとしない。何なんだお前ら。それじゃ私が楽できないじゃないか

仕方なく自分でまとめたので、増田に垂れ流しておく。

はじめに

ここで挙げているコミットログは全て実際のコミットログから転載である。当然ながら各コミットログ著作権はそれぞれの書き手にある。いずれも各英文でググれば出てくるし、フェアユース範囲なら許してくれるだろうと考え名前プロジェクト名は割愛したが、ここにお詫びと感謝を述べておきたい。

抽出条件だが、参考にできそうなコミットログを多く含んでいそうなリポジトリGitHubSTARの多い方からざっと目で見て適当に選び、それぞれ最新コミットから5000件抽出した(あわせて前処理として、コミットログ冒頭のタグ情報は消去した)。

結果として対象としたリポジトリは以下の通り。

atomのみ5400件抽出していたため、計25400件のコミットログベースである。このうち、以下の条件に合致するものは参考例にすべきでないとして一律排除した。

こうして残った8540件を眺めながら、適当に切り出したのがこの用例集である個人的に「うーんこの」と思った表現も、散見される場合は載せた。

ということで、以下用例を羅列していく。

用例集

オプションフラグメニューを追加した
ファイルを追加した
メソッド機能を追加した
実装を別のものへ切り替えた
  • Use args.resourcePath instead of args.devResourcePath
  • Use arrays instead of while loops
  • Use auto instead of repeating explicit class names
  • Use weak pointer instead of manual bookkeeping
  • Change all uses of 'CInt' to 'Int32' in the SDK overlay
  • Change Integer#year to return a Fixnum instead of a Float to improve consistency
新しく何かに対応した/機能上の制約を取り払った
何かを使うようにした
より好ましい実装に改良した
何かを出来ない/しないようにした
  • Don't bail reading a metadata instance if swift_isaMask isn't available
  • Don't exit until the parent asks for an instance
  • Don't include Parent pointer in Nominal/BoundGeneric TypeRef uniquing
  • Don't use MatchesExtension for matching filters
  • Don't use ES6 class for AutoUpdater windows class
  • Don't use MatchesExtension for matching filters
  • Avoid `distinct` if a subquery has already materialized
  • Avoid infinite recursion when bad values are passed to tz aware fields
オブジェクトの内容や挙動確認やすくした
Assertを追加した
不要コードを除去した
コードを移動した
名前修正した
さなバグタイポ修正した, 警告を潰した
バグや好ましくない挙動修正した
テストコメントドキュメントを追加した
テストを削除した
テストコメント修正した
ドキュメント修正した

表現傾向とまとめ

以上の用例をふまえ、今回の参考ログ8540件から先頭の単語を出現回数で並べると次のようになった。

Add1149
Fix1014
Update584
Remove566
Use382
Don't260
Make228
Move178
Change103
Rename85
Improve76
Avoid68
Allow65
Implement60
Handle58

コミットログの基本形はもちろん動詞 + 名詞である名詞固有名詞複数形、不可算名詞が多いが、単数形場合冠詞は a が使われるか、あるいは省略される。the はまず使われない。

何かを追加した、という表現では非常に広く Add が使われる。メソッドからテストドキュメントに至るまで大概これでまかなえる。

一方、何かを修正した、という表現では広く Fix が使われる。「何か」は typocrash といった単語からメソッド名まで幅広い名詞を取るが、動名詞はあまり取らないのと、that節は取らないのでその点は注意が必要である

Fix は「何かが正しく動くようにした」ことを示し、正しい動作内容が何かを説明しない。そこで正しい動作内容に言及したい場合Make sure が使われる(こちらはthat節が取れる)。ただし Fix よりもニュアンス的に重い表現と思われ、Fix を使わず Make sure ばかり使うのはちょっとキモいのではないかと思う(Ensure はさらに重い表現っぽい)。

また、Fixtypo 以外でのドキュメント修正に対して使われることは稀である。対して Update はドキュメントコメントテストに使われ、本体コード修正に対しては使われない。本体コード修正にあわせてテスト更新したなら Update が使われる。ただ、テスト機構それ自体バグ修正したなら Fix である

無駄な何かを単純に除去したなら Remove を使う。これまでのもの(A)からのもの(B)に切り替えたのであれば Use B instead of A か Change A to B が使われる。新たに何かを利用するようにしたのであれば Use を、利用を取りやめた場合Don't use を使うことが多い。

何かをしないようにしたなら Don't を、内部実装効率化なら Make A + 比較級/形容詞Improve が使われる。

中身の変更を伴わない単なる名前の変更なら Rename A to B、コード機能論理上の場所を移動させたなら Move A to B である

この辺はリファクタリングと呼ばれる行為と思うが、Refactor というぼんやりした動詞はあまり使われず、このように変更内容の種類に応じて動詞が使い分けられている。

余談

コミットログにはWhyを書くべきだ、というのを何かで見かけたので because とか since を使ったログがどの程度あるかを調べたが、8540件のうち22件だった。基本的に短く、シンプルに、一目で意味が取れるログが好まれる傾向がある。例えば get rid of とか2件しか使われておらず、圧倒的に remove である

一方で、シンプル単語だけど開始単語としては使われないものもある。例えば次のような単語である。Expand(9)、Extend(8)、Print(5)、Optimize(5)、Publish(4)、Append(4)、Modify(3)、Manage(2)、Revise(2)、Dump(2)、Insert(2)、Migrate(2)、Enhance(1)、Edit(1) 。いずれもカッコ内は8540件に対する冒頭での登場回数である。結局、より一般的平易な単語で表せたり、Refactor同様に抽象度が高すぎると使われないのだろう。

おわりに

8000件もログを見たおかげで、迷いなくコミットメッセージが思いつくようになったのが個人的には今回書いてて最大の収穫だった。たぶんカンニングペーパーを作る行為それ自体効率のいい学習になるという話と同じだと思う。

このまとめも100以上用例を転載してあるので、それを読むだけでも多少は効果があるんじゃないかと思う。同じようにコミットログ書きたくねぇなぁ英語わっかんねぇなぁと思っている人にとって、何か役に立つところがあれば幸いである。

2016-05-21

http://anond.hatelabo.jp/20160521163144

React.js界隈の人に聞きたい

http://anond.hatelabo.jp/20160521163144

最近某所で、React使うとjQuery不要だ的なタイトル記事を書いちゃた気がするので一応反応しときます。長文ごめんね。

えーととりあえず、あのタイトルは実際のところ省略しすぎであり、もちろん本来は「場合によってはjQuery不要」「jQueryは要らないこともある」と長く書いた方が正確です(本文ではちゃんとReactが万能ではない説明をしてる)。でも多少釣りっぽいタイトルの方が読まれるようなので反省はしていない。

そもそも世の中にそんなにSPAがあるのか

世の中の絶対数は知りませんが、自分脳内ではもう「ページ遷移しない方がずっと楽に開発できてユーザ体験も向上するのに、敢えてそうしない理由がない」という至極単純な話なので、そこは悩むところではないです。ページを複数作り、<input type="hidden">とかセッション変数とか駆使する面倒ごとは、書かないでいいなら二度と書きたくない。

というか、ちゃんと書かれたSPAは使っていてSPAであることにそもそも気づかないので、「SPAから使いづらい」という主張はよく分かりません。GitHubTwitterサイトSPA的なことをしている故に使いづらいでしょうか。偶然タブを開いてたので調べたらそうだったから紹介しますが、例えばWebpackのドキュメントサイトは(Reactではないけど)SPAで、ブラウザMarkdownレンダリングしていますhttp://webpack.github.io/docs/ )。サーバサイドで動くスクリプトタスクゼロ個人的にはこういう使い方で十分嬉しいです。

何にせよReactのメリットが真に活きるのはある程度の規模以上だと思うので、小規模で導入してjQueryより短くならないことは普通にあります自分中の閾値としてはJSコードが数百行超えるならもうReact使う。

JSXを使うことに抵抗ないんですか?

んー、要するに「別物であるDartCoffeeScriptは許すけど、ES6で書く以上はES6外の独自構文を混ぜるのは許さん」という主張だと解釈したのですが、そういうことですか? 正直その主張を聞いたのは初めてです。歴史的JSXとES6は完全に独立して発明されました。最近になってBabelが両方同時に扱えるようになりましたし、Babelはまさにそういう拡張性を重視しているツールです。それは「ああ便利になったね」というだけの話であり、なぜ「ES6とJSXは混ぜるな危険」となるのかよく分かりません。現にこれが最も標準的で人気の組み合わせです。

JSXを使うことへの抵抗」ということなら、とにかく見た目にコレがキモいと感じる人が非常に多いのは事実です。現に、JSXより見た目がキモくないことを売りにしている仮想DOM実装一定の人気を博していたりします。でもそういうライブラリは「キモさ」軽減のために結局新たな構文やら独自コンパイラやらを編み出して柔軟性を犠牲にしていますJSXは「関数呼び出しのシンタックスシュガーJavaScriptに1個導入するだけで問題を概ね解決する」というシンプルかつ一番表現力の高い解決方法だと思います仮想DOM思想に逆らわない最も素直なやり方であり、将来長持ちする気がしています

はい所詮JSXシンタックスシュガーなので、使いたくないなら使わず本来関数スタイル仮想DOMを書いてReactを使ってもいいです。タイプ量が増えて若干見づらくなるだけなんで。

それと、JSXじゃなくてテンプレートでいいじゃん的に思っているようですが、テンプレート仮想DOMでもなければJavaScriptでもないので、速度や機能の面でReactがやっていることに遠く及ばないと思います

5年後のビジョンがありますか?

Reactはもう登場して3年経過して未だに勢いが増していますし、日常で困らないレベルコンポーネント集も揃っています。React-Bootstrapはいいぞ、心が豊かになる。そろそろ採用してもアーリーアダプターとも言えんでしょう。むしろ真に先端を見るのが好きな人に言わせりゃ、2015年なんて「Reactが淡々成熟していくのを見ているだけの、つまらない年だった」みたいな感じらしいですし。

Reactは現時点で既に3年に1回レベルのビッグウェーブであることは疑いようがなく、「これが10年に1回、つまりjQuery以来のビッグウェーブなのかどうか」については、そう信じている人と懐疑的な人がいる、という状況です。私はAngularもCoffeeScriptも「3年に1回」レベルに感じたのでスルーしましたが、Reactには「10年に1回」の方になりうる素質を感じています個人の感想です)。将来もっと凄いものが出るとしたって、それは「ベターjQuery」ではなくて「ベターReact」でしょう。通常は「3年に1回」レベルでも試したり仕事に使ったりして構わないと思いますが、10年に1回の技術でなければ使わない主義の方は、あと2~3年待てばよいと思います

保守性に関して言うと、Reactは典型的な「ひとつの事だけをとても上手くやる」系のライブラリです。考え方のコツさえ掴めば、記憶すべき要素はjQueryやAngularと比べても圧倒的に少なく、むしろそこらのテンプレートエンジンを覚える方が面倒なくらいです。10年後に見ても何をやっていたのか30分で思い出したいというのであれば、むしろAngularとかよりReactを採用すべきだと思います

2016-05-07

無理だと分かっているけど増田に追加してほしい機能

Markdownで書けるようにすること。(可能ならgithub flavored markdownで)

普段はてなブログで書いててMarkdown使用する機会も多いので、記法を覚えるコストを極力少なくしたい。

はいっても、増田って多分レガシー構成してるし、そもそも増田実験プロジェクトのままだし、はてな上場しちゃったから「増田機能を追加」とかい地雷をわざわざ踏みに行かないだろうなって思って諦めてる。

http://anond.hatelabo.jp/20160507163959

読みなおしてみたら、元の記事には英語とか海外とかぜんぜん書いてないね

markdown海外発祥で「日本の」ってわざわざ書いてあるから海外メールとの比較してるって脳内で補完してたわ。

たぶん「markdown海外メールと同じような書き方だから広まった」でいいと思うけど。

http://anond.hatelabo.jp/20160507163959

流し読んで、そうかぁー、ぐらいに思ったけれど。

Wiki日本語英語wikipedia説明を読むと、まんま書いてあって。

  

それまでのマークアップ言語の一つとして、e-mail表記方法などから着想を得ている、ということらしいよ。

https://en.wikipedia.org/wiki/Markdown

  

wikiの出典として下記の記事が使われていて、

http://daringfireball.net/projects/markdown/syntax#philosophy

そこでは、

While Markdown’s syntax has been influenced by several existing text-to-HTML filters — including Setext, atx, Textile, reStructuredText, Grutatext, and EtText — the single biggest source of inspiration for Markdown’s syntax is the format of plain text email.

Setext, atx, Textile, reStructuredText, Grutatext, and EtText とか、初めて聞いたけれど、そんな幾つかのマークアップ言語

最大の影響を与え、着想の元となったものは、平易なプレーンテキストe-mailの書き方です。

みたいに書いてるね−。

物知り元増田に素直な増田質問してくれて、分かりやすくなったヨ。

(つうか、元増田よりも、はてな記法に習熟してそうな増田だな)

http://anond.hatelabo.jp/20160507073642

Markdownの利点

が何なのかわからなかったのは俺の読解力が足りないからなのだろうか?

日本人誰もがMarkdownを真に理解していない

Markdownとは、はてなブログでも採用されている表記法のこと。

# こういう見出しを書いたり

1. こういうリストや
1. こういうリスト

…を書くといい感じに表示されるやつね。

これをカタカタ打ち込んで投稿すれば、キレイに装飾されたブログ記事ができあがる。

似たようなものだと「はてな記法」やPukiWikiの記法流行ってたけど、なぜだか今はMarkdown一択時代

なぜMarkdownけが勝ち残ったのか? というと諸説あるかと思うけど、Markdownには他の表記法と決定的に異なる点がある。それは「メールで慣例的に使われていた書き方そのものである点」。

日本企業戦士メールを書くとこんな感じだろう。

第二営業部 **様

いつもお世話になっております第一営業部 永尾です。
お忙しいことは重々承知しておりましたが、またこのようなメールをお送りすること、何卒ご容赦ください。
第二営業部の皆様にはお忙しい中、当営業部長の退職送別会にお付き合いくださり誠に感謝しております。

さて、このたび当営業部では再度同送別会を開催する運びとなりましたので、改めてご案内申し上げます。


                  記
             
■「澤井部長を送る会2」要旨

 日時:3月25日(金曜日) 17時30分〜
 場所801会議室(今回はご参加頂きやすいよう社内にいたしました)
 会費:0円

※アルコール有り

■ 連絡欄
・出欠:「 」(出席または欠席)
・欠席の場合理由:「 」(自由記入・必須)

恐れ入りますが、明日3月24日までに返信にて出欠をお知らせください。
(重ねて申し上げますが会費は無料です)

幹事 永尾完治(第一営業部 内線118)

しかしこれはMarkdownではない。「日本人にとってのマークダウン」を考えるに、それは「■」や「・」、全角空白で構成された表記法のことを指すのだろう。ゆえに日本人はMarkdownの利点を享受できない──。

要するにMarkdownは「普段使いの書き方をいい感じに整える方法」であり、「覚えて使う表記法」ではなく「すでに知られている表記法意味を持たせたもの」と言える。だから同じ見出しに書き方が二通りあったりする。他の表記法にこういった重複はない。

そういうわけで「リアルタイムプレビュー」なんて機能を欲しがるのはMarkdownの利点を理解してないというか、Markdownでさえ「意味不明な表記法」と見なすことになってしまう。そうじゃないんだけど。

CC0

2016-05-01

コーディングじゃなくて文書書く作業でもAtom最強じゃね?

タブごとに文書を書けて入力途中でウィンドウ閉じたとき

入力途中であるっていう状態ごと保存してくれるってやっぱ必須機能だよね

秀丸とかサクラエディタとかMacならCotEditorとかその周りが弱くて使うの辛くなってきちゃった

閉じる度に「保存しますか?」とかいちいち確認されるの面倒くさいよ

Sublimeプラグイン入れたにしても日本語の相性悪すぎるから

結局Atomに落ち着いちゃった、起動ちょっと遅いけどね

Markdownプレビュー機能なんかも強力だしなかなかいい感じ

小説書くとかにも向いてんじゃないかな多分

2016-04-24

はてなかいブラックボックス

自分は今までずっと、ネットでの軸足みたいなもの2chに置いてきた

他の場所も見るし、2chが好きなわけでも勿論ないけれど、何かいつもフットワーク真ん中らへんにあった

もういいかなという気がして、手遅れにも程があるけど、次の場所を物色してる

その候補の中ではてなは、何故かアカウントすら作ってなかった いい機会なんでつくった

んで色々見始めたばっかなんだけど、今まで感じてた違和感がここに集まってた気がする

とりあえず一つだけ書かせてもらう

2ch雑談,ニュース板というのは大概、大手報道機関から記事刹那的ネタスレと各板の内輪ネタ構成されてる

からテレビ見てれば大概の話題は分かるし、内輪ネタは定期スレとして連打されるんで割とすぐ把握できる

でもそれらの枠から大きく外れるスレがあった

ぱっと見は他と変わらない

でも、そのスレタイにある名前が誰か分からない

ソースそいつ自身ブログ

検索してもよくわからないそいつサイトと、自動生成されたはてなのサービスしか出てこない

コメント欄はてブだけ妙に伸びてる

他のコミュニティというのはそういうもんだと切り捨てれば済む話ではある

ただ自分の知ってる(よく知らない)他の場所は直接覗けば何かしら分かった

ニュースコメントSNS内輪ノリ製作者とそのファン

何をやってるのか、何故やってるのか、少なくとも1%ずつぐらいは理解できた

でも名前だけしかからないそいつらは、ちょっと見ただけでは何をしているのか、殆どからなかった

何故か態度がデカくて、何故か煽り口調で、何故か炎上という言葉が好きそうだった

僕にとって炎上といえば、芸能人政治家バイトミスってサンドバッグになる現象のことであって

よく分からない人が自称するものではなかった。だからとても異質に映った

今でははてなはてなでも、ブックマークやらブログやら増田やらで微妙に別れてて、それぞれ色々あるらしいことが分かった

一応雑に整理すると、ブックマークのほっとエントリは大抵ニュース板にロンダされてる(そして伸びる)んで、それと一緒に内輪の話までくっついて来たみたい

正直まだ殆ど何も把握してないし、正直自分に合わない感じがビンビンするんで深入りする気もないけれど、

微妙モヤモヤしてたことがスッキリした事を伝えたかった



追記

というか書き方これでいいのか?

Markdownとも違うっぽいし面倒くさすぎるだろ何がラボだよ許されねえよ

2016-04-18

プログラマーちょっと来い、神アイディア思いついたから作ってくれ

完全に単一HTMLファイルで動作するMarkdownエディタ作った

http://qiita.com/tatesuke/items/225b51b270faf8b10923

Qiitaのこの記事見てて思ったんだけどさぁ、

これ絶対単一HTMLじゃなくてAtomプラグインで作るべきだって思ったんだよね

使ってみた感じやっぱ更新→保存周りが弱いんだよね、発想は良いんだけど

あとその他のMarkdownエディタに比べてデザインあんまかっこよくない

エディタ部分とかほぼ単純なtextareaだし

例えばhogehoge.md.htmlみたいな名前ファイルatomで読みこめば.mdファイルみたいな

感じ(実際はscriptとかCSSかいろいろ書かれてるわけだけどMarkdown部分のみ)で読み込まれて、

で、それを編集した奴をそのままブラウザで開いたらJS側でレンダリングされたドキュメントとして表示される感じ

簡単にSassスタイルを当てたりリアルタイムプレビューできればなお良い

実質完全に単一ファイルだしエディタ部分をAtomパワーに依存させることができるから

ええ感じのアイディアと思うんだけどどうやろか

2016-03-29

エンジニアならどこのブログサービスを使って記事を書くべきか

■blogspot

Google運営しているブログサービス。何か独特なサービスで使いにくかった覚えがある。

はてなブログ

アフィ厨の巣窟。同じ空気を吸うのも嫌なので却下!!却下却下絶対NG!!!!無料だとキーワードリンクが付くのが気持ち悪い露骨な集金アピールが気に入らないからお断り

livedoor blog

アクセス解析無料でついてる。それ以外は特に目立ったものがない。

github.io

ブログサービスでは無いんだけどgithubブログを構築する。

これがよさそうだけど、利用規約英語から広告はっていいのか分かんないし。利用規約が読めない以上は手を出しにくい。

スパムしてないのにスパム認定されて解除してくれなかった経験があるので怖いのでNG

アカ凍結された時の解除方法を伝授している記事はあてにならん!

wordpress.com

CMSのほうじゃなくてサービスの方のwordpress.com。機能が少なすぎて選ぶ価値なし。

アメブロ

ブログデザインがおしゃれすぎて合わない。どっちかっていうと自分存在商品価値があるような人向け。一生縁のないサービスなので却下

qiita

ブログサービスじゃないんだけどここで記事を書くってのも手かな。

でも個人的にはブログを作ってそこで記事を書くべきだという信念があるので却下

転載とか引用しただけの無駄記事を見るのが面倒でもう見てない。

たまにプログラミング関係ない職業の話とか哲学とかチラ裏にでもかいてろよみたいなのとかうざいだけ。

プログラミングってプログラミング仕事している人だけのものじゃないしねどうでもいいんですよ。

ユーザーブロックリストにいれて記事非表示にするフィルター機能実装してくれませんかねqiitaのシャッチョサン


記事なんて自分が愛用しているエディタで書いたほうが早いのでブラウザテキストエリアしこしこ書かない。

秀丸markdown形式記事書いてhtmlに変換すればいいだけ。

markdownで書いた文章ローカルに保存しとけばブログ移転も楽だよ。

からブログサービスmarkdown対応しているかどうかなんてどうでもいいんだよ。

やっぱり無難なのはlivedoor blogかな。

何かこれだ!っていうブログサービスがないんだよね。

いいブログサービスどこか作ってくれませんかね。

2015-12-11

Markdownがクソすぎる

記法が貧弱すぎだし拡張性皆無。

デファクトスタンダードでなかったら使ってないよこんなの。

かつてのJavascriptみたいな悲劇を繰り返す前にAsciidocあたりに転換しないとダメだよ。

reStあんましよくなかった。

2015-10-30

プログラマに嫌われる書類書くだけのかんたんなお仕事のひとたち

プログラム書くようになってあるプロジェクト実践でも投入されるようになってから数年。当時の上司プログラマって名乗っていいんじゃない?とか言われてプログラマという自認もできた。

もともとはSE的な立場として仕様書を書いたりしてた。ゲーム業界からSEはいわず企画とかプランナーとか呼ばれる職種書類仕事がメインで、自分ツール作るかスクリプター的な役目でないかぎりコードみたいなものを書いたりはしなかった。コード書くの楽しいVBなんかに戻れないし、もう書く事もできないだろうな。

からってわけでもないけれど、できる企画ダメ企画ってのがわかるのよね。プログラマからみての意見になるからディレクターからみて、とかデザイナーから見て、とかはまたちょっと違うのだと思うのだけど。

なのでプログラマからみてダメ企画をつらつら挙げていく。

わかったふりをしてる

自分ちょっとコードの読み書きできるのでわかってます、な体で仕様書書いてくるのだけど、全然穴だらけ。要件不明なままフローだけ書いてくる。実際にやりたいことは何なの?そこを説明して実装プログラマに任せようよ、と。

イベント駆動とかもわかってないから仕様書の書き方も不明

エクセル方眼だけど図は皆無

ゲーム作るのにはバージョン管理システムを導入するのが常。subversionとかgitとかあるでしょ。すごく便利なんだけど基本的にテキスト形式ファイル管理するためのものなので、エクセルみたいなバイナリ突っ込まれると差分じゃなくて全部のバージョンが入るから容量を圧迫するの。

画像データはまだいいよ。githubがpsdの差分さえ教えてくれるからね。

だがエクセル、てめーはダメだ。

文字情報メインなのに差分を見る事もできない。検索もできない。

ただ、データ管理としてのエクセルは優秀なのよ。ちょっとしたツールもつくれちゃうし。仕様書エクセル方眼で書いてくるやつはカスだ。

俺も若い頃はよく使ってたけどMarkdownを知ってからは断然こっちの方が書きやすい。そしてなにより読みやすい。検索もできるし成型もできる。強調表示や画像も貼れる。文法も簡単だし覚えやすい。

Markdown文字列情報だ。文章だ。文章一次元的に表現される。つまり書く側が完全に整理した思考でないと書ききれない。読む側に理解させるにはどういった順番で説明をすればいいか考えてからでないと表現できない。おのずと書類の内容、精度が上がる。ただの文章からこそだ。

エクセルはタブやらなんやらで並列なまま多次元情報としたまま表現できる。思考が整理されてなくても表現できてしまうし、表現した気になる。書いてる側の思考がまとまってないまま表現できてしまうあたりはエクセル自由度の高さでもあるのだけど、通して読む事ができない形式でもあるので、読む側のことを考えていないクソみたいな仕様書も提出されてきてしまうのが難点。

プログラマ「あの仕様どこにかいてあるの?」

企画「XXファイルのYYタブに書いてありますよ。ちゃんと読んでるんですか?」

殺意が沸くわ。

しまいにゃ図で示せばらくなものでも図にしてない。

Photoshopなり何なりで書いた絵図をGyazoにでもあげてリンクだけMDに貼れよ。エクセルでシェイプ駆使して作るより早いだろ。

パワポの方がマシですわ。あれはページにスペースの制限があるから1ページ内にまとめよう、伝えようっていう意思能力がないとまとめられないから

データ構造とか意識できない

要件を伝えるのもいいけどバランス調整するための調整項目だしなよ。調整できるようにするし、こっちも使う変数を見出すきっかけになるから助かるんだよね。

データ構造意識できてないとバランス取れないと思うよ?

3Dアーティストのあげてくるデータ仕様書書くでしょ?あれの要件とかもまとめられないでしょ。ノードとか意味わかる?揺れもの数とか制限あるのわかる?

新しい事覚えようとしない

なんでもいいからゲームエンジン触れよ。Unityとか簡単じゃん。プログラム書かなくてもいいじゃん。

俺があれだけMarkdown簡単だから覚えろって言ってもエクセルで上げてくるし、古い知識のままアップデートされない人って存在迷惑ですわ。

説明が下手

プランナー説明が下手って終わってるよね。俺も下手だわ。よく怒られてた。ごめんなさい。これは別にプランナーに限った話ではないけれど、プランナーて人に伝えてなんぼなので職能としてこれがないのは致命的だよなぁ。

書いてすっきりしたので寝る。星くれ星くれ

2015-08-08

はてな記法だけじゃなくて

markdownも使えるようにしてくれないかな

2015-06-01

HTMLプレビューが欲しかった

ファイルを保存したときブラウザリロードしてくれるHTMLプレビューが欲しかった。

確かAtomにあったと思うけど、あれはAtom専用で保存しなくてもリロードされてしまう…。

他に無いかなと探してみるもMarkdownプレビューしか見つからず、

いっそ作ろうかなーと思って調べてみるとmozreplとtelnetを使えば作れるようだった。

しかしうまく動かせず、空腹もあって疲れてしまった。

数分後、「firefox reload CLI」で検索してみると、

unix.stackexchange.comでAuto Reloadというアドオンが紹介されていた。

https://addons.mozilla.org/en-US/firefox/addon/auto-reload/

…導入したら目的が達成されていた。

2015-04-04

仕様書バージョン管理って何つかうもんなの?

SVNExcelで書かれた仕様書バージョン管理してるんだけど、変更差分が見にくくて仕方がない。

あるページのブコメSVNWord,Excelバージョン管理す方がおかしい的なコメントみたけど、そういうモンなの?

まぁ、SVNなら、変更履歴やすMarkdownとか使ったほうが差分が見やすいってのはわかるけど。

Markdownで複雑な表なんて、作成したりメンテナンスするの面倒くさいじゃん。

ファイルじゃなくてバージョン管理SVNでなく、別のシステム使えってこと?

2015-01-14

GitHubソフトウェアプロジェクト管理以外に使うことの是非について

GitHubはどう思ってるんだろうか?

その辺、ユーザー善意に任されてる気がする

からそろそろ誰かが言ってかないと「馬鹿でも簡単にブログできるよ!」とかいう流れが加速してきてGitHubがクソ化していく気がする

利用規約見るとGitHub自体法律著作権的に問題なければ特に禁止事項はない(著しく容量喰ってる奴は消すよってだけ)っぽいんだが

https://help.github.com/articles/github-terms-of-service/

自身はくだらない個人ブログはAmebaでも行ってろと思う

だってさ、それがgithubにあることでgithubにも他のユーザーにも不利益しかないじゃん

誰もそのソースを参考にしないし、フォークもしないし、バグ(誤植)を見つけたところでIssueもPull Requestも出さないだろ

ブログ誤植を見つけたからと言ってgit reset --hardしていちいち直すか?

直したところで誰も気づかない、それより新しい記事を書いて訂正したほうがいいしgitである必要ないよね

githubソースコード検索できるけど

くだらない個人ブログタケノコみたいに生えてきて、そいつらの記事内も検索しなきゃいけないからどんどんパフォーマンス下がって・・・

みたいなことは絶対に避けてほしいわけで

ここでいう「くだらないブログ」ってぜんぜんプログラミング関係ないやつね、家庭菜園とか

JekyllとgitMarkdownでやりたい?

レン鯖借りろって

2014-06-28

1. 株式会社ベクターについて

ベクター: http://www.vector.co.jp/

言わずと知れた老舗ソフトウェアダウンロードサイト。毎日更新されるコンテンツは「新着ソフトレビュー」くらいなのに毎月7800万PVの高○○を誇る。(巷で人気のはてなは全サービスで2億PV/月らしい!ワーオ!)ベクターの広告掲載料はPVあたり0.05円だとか。今は…、…といった企業の広告が掲載されている。

世間に高い印度象を与えた遠隔操作ウイルスバスター事件に対するHIT-BITの印象はどうだったろうか。スーパーハッカー自己満足のために起こした事件とか?

スーパーハカーといえばやはり遠隔操作遠隔操作でCDトレイがガコンガコンだろうか。そう考えるとEjectコマンドユーザー会なんか完全にブラックハット集団だろ……何人いるのか知らないけど

この騒動の中で耳慣れないソフトウェアが複数登場した。例えばこういうものだ。



我々が普段ホッテントリで目にするアプリとは何か違う。例えばサーバ→鯖→マカレルのような発想と同じ匂いを感じずにはいられない。それに「パケット警察」よりも"SoftEther社のパケット監視ツール"と言われたほうがピンと来る。

ベクターにはこういったゆるキャラ的名称を持つアプリケーションが数多く登録されているのである

私は空気読みができる人間だ。つまり何が言いたいかを改めて申し上げると、エバーノート活用法と聞けば、自分の時間を犠牲にしてでもライフハックMethod収集に勤しむ意識高い系ライフハッカーや、Markdown対応と言われればナンでもカンでも有り難がる技術系アーリーアダプターの方々や、はてブなどのソーシャルメディアに居を構える人たちと、ベクターユーザはどこか違うということを思わせる印象操作である

増田一族の皆さんは日本で一番使われているWebブラウザをご存知だろうか? ……その通り、IE9である。ところがだ・私は10年以上、隔週一度の頻度ではてなブックマークを利用してきたが、いまだにIE9のハック記事がホッテントリ入りしたのを知らない。ちなみにOperaもない。

やはりはてブなどのソー(略)たちとは何かが違うのである

さて、ベクタソフトウエアライブラリを持ち上げる話に戻ろう。

ベクターで人気のアプリケーションで「めもりーくりーなー」をご存知だろうか。不要になったメモリ領域を回収するシステムメンテナンスツールなのだが、実態は大量にメモリ確保をするものだ。Windowsメモリが不足すると使用頻度の低いメモリ領域をシステムディスク上のスワップ領域(仮想メモリ)に追いやり、物理メモリを確保する。それが空きメモリ復活のからくりである

遠い昔、メモリ最適化ツールとして「ただ数を足したり引いたりするだけのプログラム」が持て囃されたことがあったが、めもりーくりーなーのコア部分はメモリ確保のAPIコールをするだけで済んでしまうので、足したり引いたりほども難しくはないのである

そんなツールが人気のベクタソフトウェアライブラリというと誤謬(ごびゅう)があるかもだが、そんなベクターが月あたり7800万PVである。ワオ。「そんな」とか言えない。そんなベクターからは毎日収録ソフトアップデート通知が来るが、再インストールとほぼ同じ手間をそうそう小まめに行う人間がいかほどいるだろうか。注目ソフトウェアを取り上げる「ベクターソフトウェアニュース」ははてブと違って1日1回の更新だし、メールマガジンベックルだって手作業での編集だ。それでもはてな2億PVに対してベクター7800万PVなのである。それを620万のUUが支えているので、1人あたり12PV余り稼いでいる計算になる。今のはてなは2億PVに対し4000万UU(U'ェ'U)→1人あたり5PV。情報の更新量で言えば個人ブログスターダム層とあまり変わらないのではないだろうか。MLBに例えるならブログ界の野茂英雄とも言える旧イケハヤ書店さんが今年3月に100万PV/50万UU達成を記念して焚き付けを行なっていたが、同程度の情報更新量とするとイケハヤ100万パワーとベクター7800万パワーの差は一体何なのか。火事場のクソ力vs平時のキン肉マン並みの差である。(ちなみに超人界の神々が1億パワーであることもご考慮いただきたい)これは何か常連にしか見えない㊙コンテンツがあるとしか思えない数値である

(そういえばはてなダイアリーからニコニコのブロマガにもらわれて行ったベックルハリー先生は、映像でもお見かけする機会が増えて、以前より増してご活躍のようですね。ニコニコ静画のコンテスト新作の絵師さんを決めたそうで気になります)

注: 「めもりーくりーなー」はCodeZine「マンガで分かるプログラミング用語辞典」マンガでわかるJavaScript / Javaプログラミング、最近ではnoteでも連載中のクロノスクラウン 柳井 政和さんの著作です。実際にはメモリー最適化のためのニーズに合わせたUIを備えているため、前述した原理だけのアプリケーションではありません。



ベクターはおかげさまで25周年!今年が平成26年、つまり平成も25周年を過ぎたところ。ベクターは日本の年号が「平成」に変わったのと同時期に創業した会社なのであります。平成の始まりは1988年2月。その頃あなたは何をしていましたか? まだ生まれていませんか?それとも友達が続々とファミコンを手に入れていく中、1人だけMSXを買ってもらってデータレコーダーで5分かけてロードした後、ただひたすらゴジラと戦う3DダンジョンRPGや、アスキー徳間書店の雑誌に載っているプログラムリストを打ち込んで、F5を押しては"Syntax error"を出すという流れ作業の話をして「ふーん」と言われるだけの交友関係に何かコレジャナイ感を感じていた頃でしょうか?もしかしたらアイドルから一転してラ・ムーを結成した菊池桃子さんとHelloみかんに衝撃を受け、自称親衛隊を辞めようかどうしようか、辞めるとしたら世間的に許されるのかどうかと迷っていた頃……という方もいらっしゃるのではないでしょうか? そのころベクターはもう走り出していたんですね!!!!!!!!!!!!!<3

199x年から始まったソフトウェアライブラリサイトVector」の累計ダウンロード数は、1999年に1億DLを達成した後、毎年1億(ときたま2億)ずつ堅調に増加して今年19億DL達成

本業がオンラインゲーム事業になってしまったベクターだが(「創星紀アステルゲート」大好評サービス中)、ソフトウェアライブラリは依然として健在だ。7800万PVを支える620万UUに7800万のベクター体験を提供している。(わーお)

ベクター体験と言えば、最近では「XPフォーエバー」が人気だった。XPが意味するユーザー・エクスペリエンス(UX)が後発OS(というかiOS)に受け継がれた現在においても、WindowsXPは走り続けているらしい。そして走り続けなければならない。定年退職と同じだ。ゴールが年々遠のいていくんだ。プログラマー定年説だって昔は30歳だった。それがいつの間にか35歳定年説になっている。40歳になる日もそう遠くはないだろう。30歳が若くない?そんな言い分が通用するのはアイドルスポーツ選手プログラマーくらいのものではないのか。政治家なら40歳で若手。そもそも一日中イスに座りっぱなしで政治家ほども動かず、身のこなしと言えば手を動かすくらい、チェリーの黒軸キーより重いものは打つことがない仕事がなぜ「体力勝負」と言われるのか。「プログラマーやってたんで体力には自身があります!(*°∀°)=3」とか引越し業の面接で言えんの?1日じゅう立ち仕事で刃物を扱ってる床屋の主人を差し置いて体力自慢できんの?

私は空気読みができる人間だ。落ちのない小話がそう何度も通用するとは思わない。本題に戻ろう。

さて、増田一族の皆さんはベクターのご当地ゆるキャラをご存知だろうか。その名も「べく太」である。心優しき少年ではあるが学校での成績がずば抜けて悪く、テストでは全問不正解の上、自分の名前を「べく犬」と書いてマイナス点をもらう奇才ぶり。友達はそこそこいるが、成績の悪さや自身のずっこけエピソードにより、知らない人にも名前を知られている有名人気質。得意科目は射撃とあやとり。手に座布団を持ったスタンディングポジションから就寝までの速さを競う競技昼寝の速さにおいて世界クラスの実力を持つ。いつも((ミ゚o゚ミ))の影にいるため主人公とは思われない彼だが、劇場版長編のび太の結婚前夜」ではアレをナニされても決してああはしないという彼の秘められた人間性が描かれている。

そんなのび太が最も輝いていたのがシステムメンテナンスツールの紹介記事であった。

他とは比べ物にならないほど豊富にあるハードウェアの性能を引き出すため、Windowsの世界ではさまざまなチューンナップ技術が磨かれてきた。メモリ最適化レジストリクリーニングディスクキャッシュの最大化、RAMディスク利活用ビジュアルテーマ/アニメーション無効化、IEの常駐、スタートアッププログラムの削減、サービスプログラム無効化、EXEの圧縮、RARの活用、標準ツールよりも高度なサードパーティディスクデフラグメモリデフラグ……、やることはいっぱいだ!でもこんなに手間をかけられるWindowsかわいいなあ!そうやってPCチューンの腕を日々/.J で研鑚しあうマイルドハッカー達は磨き抜いたファイルコピースピード一喜一憂したものである

特にベクターには日本人により日本語で説明された扱いやすいメンテツールが数多く登録されていた。使い方を誤れば手塩にかけて育ててきたWindowsに打撃を与えかねない分野であるため、「日本人にとっての分かりやすさ」は重要視される要素だ。そんな分かりやすいツールをさらに親しみやすく紹介する子供だましが紹介記事におけるべく太の役目である

今ではべく太も良く読まれた記事のランキングしかお目にかかれなくなってしまった。今や世間は萌え擬人化を通り越してゆるキャラブームである。いやブームさえ通り越して文化である。べく太はゆるいというよりマイルドなためかこのブームに乗っかろうという動きはまだ見せていない。これは残念なことである。(はてなもゆるキャラ路線をやめてしまうのだろうか

ところどころかいつまんで述べたため、いくぶん主題がぶれた印象はあるが、

ベクターとはそういう社会的責任を持つサイトなのである




そんなベクターユーザリーチすることを考えないで、一足飛びに海外にロンする発想はちょっとチョンボしすぎなんじゃないの。その前にIEのセキュリティ問題で右往左往する人たちを相手にするのが先でしょ。そのあとは日本人口のメイン層である前期高齢者な。

情報社会を牽引する立場のソフトウェア開発者とは言っても、テストコード書いてこまめにリファクタリングしていくらでもデプロイしては動作確認できる人たちばかりじゃないの。一次請けから渡された画面設計書をメンバーに一人一枚ずつ手渡してアサイン完了、がんすけで開発スケジュールを引きつつ「これでどうだ?」とメンバー一人一人と納期交渉をするSEもいるの。ソースコードとほぼ同じ内容なので、スケジュールには含まれ得ない詳細設計書を「まぁ気持ちは分からんでもないが本来はそういうもの」という理由で実装前提出させたりするの。すべてが決まって検討課題がメンバーメンタル面だけになった時点でキックオフミーティングを始めるのが開発フローになっていたりするの。

これに対して事あるごとに穏やかな語り口で「私は雑用ですから」とつぶやくSEもいて、彼の場合は画面設計書をメンバーひとりひとりに渡して顔を伏せつつ実に申し訳なさそうな口調で「これぐらいでお願いできませんか」と納期交渉をしつつがんすけ2スケジュールを引く人でした。

そんながんすけダウンロードできるのもベクターソフトウェアライブラリなのであるがんすけ / がんすけ2 / (窓の杜にもあるよ) / (公式です)

話がそれたので本題に戻そう。

タイプは違うが、両者とも大差なくマッチョメンであった。SEなのに。ここから少し余談を挟むが、その後面接をしたとある派遣会社の派遣プロマネマッチョマンであったが、マッチョメンに出会ったのはそれくらいなので特に私の人生がマッチョメンで占められているという話でなはい。

私も筋トレすれば強くてたくましいSEになれるのかな、、、

いやスケジュールが押したからって突然開催されるようになった朝会に、シドニアの騎士のOPを歌いながら入ってくるようなSEは私の目指すところではないな。戦いの場への入場曲はもういいので設計をして下さい、設計を。適切な設計で工数を減らすのは、あなた方の役目でしょ。あなたの敵はここにはいません。何も打ち砕かなくていいのです。そんなことよりぴょんぴょんしましょう。ぴょんぴょんのほうがメンタル的に優しくていいです。ぴょんぴょんですよぴょんぴょん。

このままで、果たして定年までぴょんぴょん続けられるのかな……。定年……って何歳だっけ……。

元々は55歳か。それが20年で60歳になって……さらに20年経って65歳が当たり前になったのね。じゃあ、あと20年したら70歳が定年かぁ……今働き盛りの人たちは70歳から年金受給者だね☆ 平均寿命が延びたぶん定年がずれていくということは「人は働くために生まれる」というのがこの国の常識なんだろうね。(だって政治家は自分を選んでくれた選挙区の空気を読んで法律に反映させる役職でしょ?) そんでもって現在の定年が65歳、日本人平均寿命は80代前半。最高齢が110代なので医療福祉諸々の発展で平均寿命と定年があと30年延びる可能性も?95歳で定年!?いやいやいや……そのころには日本人人生観も変わってるだろうから……いやいやいや……変わってるかなあ。

だったらプログラマーは何歳定年説になっているんだろう。IE9をシェアNo.1に押し上げるような職場に勤めていれば何も心配ないのかな……また大きなパラダイムシフト──という言葉がもうずいぶん久しぶりだけど──が起きてプログラマー定年が上がるのかな……パラダイムシフトじゃ上がらないかな……ライブラリツールのほうが大事かな……(大体、オブジェクト指向だって末端のアプリケーションエンジニアにとっては「例にならえばいいだけのもの」だったし)……何かを速く便利に自動化するツールよりも、テストコードを書けばそれに合うライブラリを探してきてくれるエージェント指向システムが実現されないかな。今のところ再利用可能なコードを探す手段はドキュメントを検索するのと、ソーシャルふにゃふにゃで誰かに教わることくらいしか無いし。そんなパラダイムシフトが早いとこ起きないかなー起きればいいなー「お前が起こすんだよ」とか言う奴ぜったいいるだろうけどおれはおこせないしなー。

結局、定年って定まってないんだよね。不定年だよ。定年は不定年。同じ境遇の人間が多数いればその都度社会が対策とってくれるだろうし、先のことを気にしても仕方が無いよね。──ってことでハラオチ。




そんな私のベクター体験を元に、ベクターユーザからも訴求されそうなはてなブックマークUIを考案するのが本稿の主題である



(Dan the full stuck engineer.)

Shared by iNotes - Sync Note with iOS

2014-06-26

はてな匿名ダイアリーMarkdownで書こう!その名も"Marsdown"

っていうのないかな。

スマートフォン対応もお願いね

(´・ω・)っ http://www.sinatrarb.com

2014-04-24

http://anond.hatelabo.jp/20140424192346

レスが付けにくい

レスじゃないもん。トラバだもん。

返信があっても気づきにくい

からトラバが表示されるだろうが。

昨今の通知システムに慣れすぎなんだよ。

画像が貼れない

昔は貼れたんですよ。

グロ画像貼る奴がいたから禁止されただけで。

スターが付けられない (匿名スターにしてくれ)

匿名スターはともかく、固定リンクさえあればスターは付けられる。

どこでもスターを導入しろ

markdown で書けない (reSTでも良いよ)

はてな記法が一部使えます

増田はいい加減バージョンアップすべき

理由

そのままでも良いところ

判断保留

いや、不採算事業なのは分かってるよ?

ただ、どうせこのままならさー…。

だって、オレが似たようなの作っても醸成された文化ごとは持っていけないでしょ?

2014-04-09

オブジェクト指向 v.s. 関数型プログラミング

近年、関数型プログラミング重要はいろんなところで叫ばれています

Javaの最新バージョン関数型プログラミングに関する新機能が加わりました。

Rubyも昨今、関数型プログラミングへのサポートが手厚くなってきています

プログラミング教科書大手オライリーからJavascript関数型プログラミングを行うための解説書が発行されました。

関数型プログラミングへの注目度は高まってきています

おそらく、みなさんは既にオブジェクト指向が何か、を知っています

でも関数型プログラミングとは何か、胸を張って語れる人は、周りに見当たらないかと思います

実際、オブジェクト指向によってプログラミングする方法は、わかりやすい解説があちこちにある一方で、

関数型プログラミングとは何か、何が良いのか、ということについての、よいまとめは見つけることはできませんでした。

この記事を読む方の中で、「関数型プログラミングを取り入れるか・取り入れないか」で切実に悩んでいる人は、おそらくいないでしょう。

この記事はあまりかいところに立ち入りません。関数型プログラミングを使う側の立場に立って、利点や向き・不向き、それが導くスタイルを書きました。

みなさんは鳥のように飛んで、高い空から関数型プログラミングとは何か、何が良いのか、を見渡してください。

ふたつのアプローチ比較

オブジェクト指向アプローチは、名前をつけてプログラムを整理する

関数型プログラミングアプローチは、汎用部品でなんとかする

オブジェクト指向アプローチ

Googleが近年リリースした言語、Goには、”継承”を直接サポートする仕組みが無いことが話題になりました。

また、Mac OSXの基幹ライブラリCore Foundationは、ライブラリ自体C言語で書かれているにもかかわらず、その設計方針は明確にオブジェクト指向です。

継承クラスは、オブジェクト指向必須条件ではありません。

オブジェクト指向本質とは、何でしょうか。

その本質とは"名前をつけて対象を識別し、それを扱うこと"、にあります

最もプリミティブなオブジェクト指向対象は、ファイルハンドラです。あるファイルを開いて、読み込んで、あるいは書き込んで、ファイルを閉じる。

これらの処理をまとめたら、わかりやすいですよね?

対象に関する処理を、対象の周りにまとめる。これがオブジェクト指向の基礎的な理念です。

識別することとイコール比較できることは、とても良く似ています

イコールによる比較は、オブジェクト指向では鬼門であることが知られています

PointクラスインスタンスとColoredPointクラスイコール演算をどう決めればいいかに、正解はありません(詳しくは"effective java"をご参照ください)。

また名前をつけて識別する対象は、フワフワしていてはいけません。

たとえば、"軍人階級"をオブジェクトにしたとしましょう。"大佐"クラスのある兵士名前フィールドや、性別フィールドを持っているでしょう。

ところで彼が昇格したときに何が起こるでしょうか。

新たに"少将"クラスインスタンスが作られます。"大佐"クラスを破棄する前に、名前性別、その他沢山のデータを引き継がなくてはいけません。フィールドを増やしたい場合はその都度コード修正を加える必要があります(*)。

なるべくイコール比較を避けたい。対象不安定なものはいけない。では何に名前をつけて、識別するか。そこにオブジェクト指向技術者の熟練度が現れるのです。

関数型プログラミングアプローチ

一方、関数型プログラミングでは、特定の何かに名前をつけるより、極力、汎用部品でなんとかしようとしま

さな関数を、集めて撚り合わせて、新しい関数を作る。

関数自体リストなどのデータ構造に詰めることもよく行われます

実は、関数型プログラミングというのは本質を表していません。

その真の名は、"値指向プログラミング"です。

関数をはじめとして、リスト・ツリーのようなコンテナ手続きを抽象化したもの、回路を抽象化したもの

あらゆる対象を値として、合成し、ときに分解し、新しい値を作ります

変数という概念必要ありません。

変数適用する処理を作りあげることが、とても簡単だからです。

四則演算定義されたデータを詰めたデータ構造もまた、四則演算可能だったり。

値をイコール比較することも、なんのそのです。

誤解を恐れずに言うと、オブジェクト指向トップダウンなのに対し、関数型プログラミングボトムアップです。

関数型プログラミングの利点

読みやすい・理解やす

関数型プログラミングサポートする言語には、沢山の汎用部品定義されています

このような構造インターフェイスとして、様々なライブラリが組まれているので、

たとえばモナドを知っていれば、30分程度でパーサー(解析機)を理解することができて、

パーサーを理解できれば、JSONパーサー・ XMLパーサー・markdownパーサー・C++パーサー ... などを理解するのはとても容易です。

理解やすいこと。これが関数型プログラミングの大きな利点です。

追記:

また、汎用部品と型のお陰で、ライブラリドキュメントが圧倒的にひきやすい、というメリットも有ります

Haskellな人がPythonにトライした結果 - Togetterまとめ

書きやす

関数型プログラミングは「厳密な事前設計必要とするため、簡単なことをやるのにも時間が掛かる」。

よく誤解されていますが、これはウソです。

スクラッチプログラムするのは、非常に手軽です。

>> map (*2) [1,2,3]
[2,4,6]

邪魔な”儀式”や、"おまじない"のコードが徹底的に撤廃されているためです。

関数型プログラミングコードは、潔癖かつ濃密です。

たとえばC言語でint hoge(int x,int y)が定義されているときhoge(3)はなんの意味も持ちませんが(コンパイルコケますが)、関数型プログラミングでは意味があり、実際に有用です。

上の例では、「掛け算をする」(*)関数は、二引数関数ですが、それに引数を渡して作られた「2を掛ける」関数(*2)は、一引数関数になります

関数型プログラミングでは、「簡単なことは簡単にでき、複雑なことは複雑にできる。ただし、間違ったことは殆どできないか、全くできない」。

多くのバグは、コンパイルエラーとして検出されます

また、静的型付けの力によって、コード補完は非常に強力になっていますインテリセンスの比ではないです。

たとえば、関数中のある表記の型を任意に表示できます(GHC/TypedHoles - HaskellWiki)。

やがてやってくる未来には、プログラムテキストエディタで書くことは時代遅れになっているでしょう。

統合環境サポートで、バグミスの少ない、スムーズプログラミングができます

そしてその環境で動くプログラミング言語は、関数型プログラミングサポートした言語なのです。

いつ関数型プログラミング

以下の様な兆候を感じたら、あなたはそのプログラム関数型プログラミングで書くべきです。

一般に、オブジェクト同士の相互作用が複雑になるほど、オブジェクト指向では手に負えなくなっていきます

そういうときは、オブジェクトを直接扱わず、替わりにその"相互作用"を扱うことで、複雑さを軽減するアプローチ有効です。

それこそが関数型プログラミングアプローチです。

オブジェクト指向の利点

初心者にとっては読みやすい・理解やす

特にオブジェクト指向有効なのはプログラミング初心者がそのコードをいじるかもしれないときです。

関数型プログラミングは、強固さと柔軟さの代償として、高い学習コストを伴います

そのため、初学者にとってはハードルが高いのです。

扱う対象があまり複雑でない時は、書きやす

オブジェクト間の相互作用が複雑でなく、着目している(名前をつけている)概念が安定しているとき

そして、プログラムをいじる人たちの間で共通理解が図れているならば、オブジェクト指向が有利です。

関数型プログラミングの得意分野はなにか

数値計算

遅延評価という機能によって、レガシー言語で扱えなかった、巨大な数を扱うことができます

分数を扱うことができます虚数もです。

関数型プログラミングで書かれたプログラムは、正確さが要求される、金融関連の業界で使われています

テキスト処理

手続きとしてパーサーを記述できるので、テキスト処理プログラムはより理解やすく、メンテナンスやすものになります

関数型プログラミングを知らない人は、「正規表現おk」と言いますが、

彼の書いた複雑な正規表現は、半年後には(書いた本人でさえ)理解できなくなっていることでしょう。

並行処理

手続き一般を扱うことができるので、途中で割り込みのある手続きの表現も容易です。

関数型プログラミングサポートしていない言語ではコルーチン(ファイバー)などをつかってなんとかするしかありません。

さもなくば、非並行処理では普通に関数として記述できるところを、並行処理のために、Builder,Strategy,Command,Interpreterパターンを駆使して書き直すことになります

Javascript使いの方は、Deferredなどの構造を使うでしょう(http://qiita.com/KDKTN/items/4c6986049d204f0645d8)。

C++使いの方はBoostで頑張りましょう。破滅的に解りにくいコンパイルエラーメッセージと格闘してください。

レシピ

もう少し簡単な例をあげます

あなたは、あるレシピにしたがって、自動的料理を行うマシン制御プログラムを書いているとしましょう。

料理レシピは、"手続き"ですよね?たとえば、カレー

1. まず玉ねぎを炒める。

2. 飴色になったら、肉を加えて炒める。

3. 野菜を加える。

4. 水を加えて煮る。

5. スパイスを加える。

しかあなたはこの手続きを関数として表現できるでしょうか。

…できませんよね?何故ならば、各ステップの"間に"、マシンのロボアームの位置や動きを調整する処理が必要からです。

これをオブジェクト指向でやろうとすると、各ステップ副作用として、それらの処理を行うことになります

そうすると、マシンが二機に増えた時などの変更量は、絶望的なものになります

あるいは関数として表現するのを諦め、手順全体をDSL記述できるようにします。

このアプローチ関数型プログラミング的です。しか関数型プログラミングサポートした言語の助けなしでは、そのDSL記述するために沢山のユーティリティコードを書かなくてはならないでしょう。

オブジェクト指向アプローチでこの問題をエレガントに解こうとすると、クラス化の粒度を上げる事になります

野菜クラスフライパンクラス、ボイルクラスフライクラス、焼き加減クラス、アームクラス野菜の大きさクラス、切り方クラス、焼き方クラス、"焦げたよ"クラスetc...

こうすると早晩レシピプログラムコードから消え去ることになります。上記のたった5行は、依存性注入のオブジェクトグラフを構築するコードに取って代わることになります。そこには沢山の挙動制御オプションとして付記されているのです。

カレーなど、ある種のレシピ限定することで、見た目の理解やすさを得ることができますが、一方それは表現力を損なうことを意味します。

C言語などではマクロを使うこともできますが、それは結局、関数型プログラミングアプローチ意味するところと同じになります。すなわち、補助のために沢山のコードを書くことになるでしょう。

GUI

iOSのAppstoreアプリは、"無料"と書かれたボタンを押すと、それが"インストール"ボタンに変わり、それをもう一度押すと、ダウンロードの進捗を表すインジケータに変わり、それを押すとダウンロードキャンセルできます

このように、位置は同じなのに、ステートに依って見た目と機能が変わるボタンは複雑です。

これをオブジェクト指向で実現しようとすると、

1. 三つの異なるボタンを同じ位置に置くか

2. 同じボタンが三つの異なる機能を持つか

という下らない問題にぶつかります

一方関数型では、"機能"、"見た目"、"状態"、を独立に扱って、それらを合成してボタンを作るので、迷うことはありません。

「同じ位置にあるUIオブジェクトは、コード上で(インスタンスとして)独立して、他から干渉を受けない」

この条件が満たされているうちは、オブジェクト指向GUIを実現することに無理はありません。

しかし、携帯端末のような小さい画面で、多くの機能を達成するためには、UI要素はコンテキスト依存的に複雑になりがちです。

近年、PCのディスプレイの大きさは、頭打ちになってきました。

画素数は増えているのですが、MacにおけるRetinaのように、複数ピクセルひとつドットを表すようになってきています

これは、ひとつの画面に置かれるボタンなどのUI要素の数は、これから先の未来で増えることはない、ということを意味します。

したがって、未来GUIプログラミングは、注意深く機能ピックアップして制限するというデザイナー努力を脇におけば、

関数型プログラミングの力を頼るしか無いでしょう。

はじめよう、関数型プログラミング

まり

Haskell さいこうなのおおおおおおおおおおおおおおおおおお!! おしっこ漏れちゃうのおおおおおおおおおおおおおおおおおおおお(゜∀。)ワヒャヒャヒャヒャヒャヒャ

1. google:すごいHaskellたのしく学ぼう を注文する。

2. Download Haskell自分のPCに導入する。

3. コンソールghciと入力して、対話コンソールを立ち上げる。

4. 次の関数コンソールに打ち込んで、結果を見る。即値で書かれているところとかをいろいろ変更してみて、感動する。

take 4 $ map (*2) [1..]

5. ステップ1で買った教科書を読んで、学ぶ。


追記:

いかがでしたか

ちまたには、関数型プログラミングの利点は変数が無いことだ、とか、より安全から、とか、より速いから、などという妄言が満ち溢れています

オブジェクト指向関数型プログラミングは、水と油ではありません。プログラマ自分プログラムに最適なアプローチを選ぶことができます

一般にはあまり知られていないことですが、Haskellにもオブジェクト指向へのサポートがあるんです(Lensライブラリ、これを使用したサードパーティライブラリ最近増えてきています)。

この記事を読んだオブジェクト指向プログラマあなたが、少しでも関数型プログラミングに(そしてHaskell)興味を持ってくださって、ホームセンター大人用オシメのコーナーが大賑わいになれば幸いです。。

2014-02-26

ブックマークを小分けにしよう

http://anond.hatelabo.jp/20140226124217

短期記憶に自信がない (「このページの情報後で盛り込もう」とか) んだよね、たぶん。

開発プロジェクトで調べることが多いと自分もタブが多くなりがちだけど、

増えそうなところで「ここらでこいつら同カテゴリリンクはまとめておこう、一言添えて。」

という感じでカテゴリごとに、こまめに整理すると良い感じ。

あと、作業ブログを書きながらだと、長期記憶の手前ぐらいにセットされるので、後で見返す気になるし、

盛り込み忘れしにくい。

(タイトル, URL, 一言) のセットでまとめておくと良い。

Trello とか使ってカテゴリに分けて、markdownリンクtodoリストに放り込みながら、タブ閉じながらやると良いよ。

あとは、GTDするのも良い。「いつかやる」リストに入れておけば、いつかやらなくても見返すことは可能になる。

ログイン ユーザー登録
ようこそ ゲスト さん