ほねもにブログ

主にプログラミングをしていて疑問に思ったことや気付いたことを書いていきます。

独自データ属性を使用するメリットがわからない

var e = document.getElementById("foo");
e.bar = "baz";
e.bar; // => baz
e.qux = function(){};
e.qux; // => function(){}

要素はオブジェクトなので、このようにプロパティやメソッドを追加できる。それなのに、わざわざカスタムデータ属性を使うのはなぜ?JavaScript以外でも参照するためかな。とりあえず、今わからないこととして書き残しておきます。

未だに答えが出ない選択肢

jQueryを使ってひたすらプログラミング
jQueryの使用を禁止してJavaScriptだけでプログラミング

まつもとゆきひろさんが書いた『コードの未来』を読みました。今の学生たちは、もっと簡単にプログラミングできることを望んでいるようです。僕の周りの人たちも似ています。使っている言語なんてどうでもいい、重要なのは何を作れるかだ、という考えでした。僕はこの考えに反対でした。理由は、「使っている言語なんてどうでもいい」というような、言語を軽視した発言が許せなかったからです。つまり感情的なものです。上の選択肢が与えられたとき、以前の僕なら②を選んでいました。

②を選択し、関数型プログラミングのことを知りました。しかし、知ったからといって、すぐにそれを生かせるわけではありません。僕は、関数型プログラミングを知ることで、逆に足が止まりました。自分のコードが汚くて、機能を拡張したいという気が起きなくなったのです。その結果、中途半端なプログラムができあがりました。

今は①を選択したほうがいいのかもしれません。

体中が痛かったけど2日休んだらマシになった

前回書いた不安は、建築業界では当たり前のことみたいです。
母の友達の息子の職場も同じような体制だと聞きました。
自分で起こした事故は全て自己責任ということらしいです。
厳しい世界だと思います。
体力が必要な仕事でもあるので、あまり無理せずに頑張りたいと思います。


今はCSSの代わりにSassを使っています。
Sassは、CSSの入れ子構造が可能で、構造を把握することが容易になります。

/* CSS */
#test {
    background: white;
}
#test .title {
    background: gray;
}
/* Sass */
#test {
    background: white;
    .title {
        background: gray;
    }
}

SassファイルをCSSファイルに変換する手間が必要ですが、sassコマンドの--watchオプションを使用することにより、Sassファイル更新後に自動でCSSファイルに変換されます。

$ sass --watch html/sass:html/css

このスクリプトは、「html/sass/にあるSassファイルが更新されたとき、そのファイルをCSSファイルに変換してhtml/css/に置く」という意味です。
しかし、毎回このコードを書くのは面倒なので、シェルスクリプトに書きます。

#!/bin/bash
sass --watch /home/honemoni/html/sass:/home/honemoni/html/css

シェルスクリプトをsasscssという名前で保存して実行権限を与えます。

$ chmod +x sasscss

これでシェルスクリプトを実行することが可能になります。

$ ./sasscss
>>> Sass is watching for changes. Press Ctrl-C to stop.
[Listen warning]:
  Missing dependency 'rb-inotify' (version '~> 0.9')!
  Please run the following to satisfy the dependency:
    gem install --version '~> 0.9' rb-inotify
  
  For a better performance, it's recommended that you satisfy the missing dependency.
  Listen will be polling changes. Learn more at https://github.com/guard/listen#polling-fallback.
  1. ターミナルを立ち上げる
  2. 「./sa」と入力後、タブキーを押してコマンドを補完
  3. エンターキーを押す


たったこれだけの手順で、Sassファイルが自動的にCSSファイルに変換されます。
しかし、ログインするたびにこの手順を行なっていると、それすら煩わしく感じます。
それに、ファイルを監視し続けている間はずっとターミナルが立ち上がっています。
ブラウザとエディタ間のウィンドウの切り替えを頻繁に行うので、ターミナルが立ち上がっているのは邪魔です。
これらの不満を解消するためには、以下のことを実装する必要があります。

  1. ログイン時にsassコマンドが実行される
  2. 仮想コンソール上でsassコマンドが実行され、エラーはそこで見られる


僕の今の理想はこれです。
しかし、これをどうやって実装するかがまだわかりません。
今日からは、これの実装方法を考えてみたいと思います。
解決したら、また記事にしたいと思います。

バイトに受かった

嬉しかったんですが、ちょっと不安なことがあります。
それは、バイトとしてではなく、請負人として働くということです。
会社が僕に仕事を依頼して、受けた依頼をこなしていくって感じ。
なんでわざわざそんな形態にするんだろう?…と不安ですが、まあこれも社会の一部ということで、積極的に仕事に取り組んでいきたいと思います。


最近 Linux のことが徐々にわかってきました。
特に嬉しかった発見は、プログラムを動かすためにはアカウントが必要だということです。
ApacheMySQL のプログラムは勝手に動いているのではなく、アカウントが動かしているということらしいです。
…やっぱりまだちょっとよく理解していません(笑)
多分そういうことだと思うんですが…。

つまりプログラムも、ファイルのアクセス権というものに縛られていて、プログラムだからといって好き勝手色んなファイルを弄れるってわけでもないみたいです。


間違ってたらどうしよ…まあいっか。ではまた。

自分に合った目的

先ほど、僕が今している勉強に目的がないと書きましたが、ありました。
それは、「人に凄いと思われたい」という目的です。
関数型プログラミングを勉強してみたり、サーバーを立ち上げてみたりするのは、全てこの目的によって起こされた行動です。
しかし、この目的は弱いです。
例えば、関数型プログラミングを勉強しながら youtube で動画を見たり、サーバーを立ち上げながら音楽を聞いたりしています。
心の底から人に凄いと思われたいのなら、一日中プログラミングの勉強をしているはずです。
それができないのは、この目的が僕には合っていないということです。


自分に合ってる目的を考えたところ、たぶんこれだろうというのは見つかりました。

母はとある会社で働いています。
そして、たまに IT 関連の相談を受けます。
「月額1万円以上のルーターを勧められたんだけど、購入したほうがいいかな?」とか「ネットショップの売上をもうちょっと上げたいんだけどなー」とかです。
そのとき僕は、それまでしていた勉強も遊びも放り出して、対象の問題を徹底的に調べます。

これがおそらく僕に合った目的です。
助けたい人のために勉強できています。しかも遊びすら放り出して。
このような目的を得るためには、やはり人との関わりが大切だなーと思います。
引きこもっていては、いつまでたっても人のために勉強できませんから。


まあそんなわけで、自分のことがだんだんとわかってきました。
ブログを始めてよかったなーと思っています。

目的のない勉強

僕は今働いていません。
たまに親の会社のホームページを作ったりしていますが、それだけです。
他に社会とのつながりはありません。
そしておそらく、その現実から目を背けるために、パソコンの勉強をしています。
今は GLUT(OS の差異を気にせずに GUI プログラムを作れるプラットフォーム)の勉強をしていますが、特に目的があるわけでもありません。
目的がなく、ただ漠然と勉強しているだけなので、前に進んでいる感じがしません。
プログラマーとして社会復帰したいと思っているのですが、よく考えると、それも違う気がします。


今日は、自分を見つめなおすきっかけとなる出来事がありました。
だからこんな記事を書きました。
これからは、プログラミングの勉強だけでなく、社会復帰もがんばります。
人を受け入れる方向に行動してみようと思います。
スキルシートとか職務経歴書とかは書こうとするとしんどくなるので、履歴書だけで働けるような場所を探そうと思います。
職種はあまり限定しないようにします。

別ドメインへのリクエストが禁止されている理由(未解決)

XMLHttpRequest オブジェクトを使った方法では、別ドメインにリクエストできない。
②script 要素を使った方法だと、別ドメインでもリクエストできる。

var request = new XMLHttpRequest();
request.open("GET", "http://other.com/age?name=honemoni", true);
request.send(null); // リクエストできない

var script = document.createElement("script");
script.src = "http://other.com/age?name=honemoni";
document.body.appendChild(script); // リクエストできる

なぜ①は駄目で②は許されるのか。
この2つを比較してみて①の理由を知ろうというのが今回の目的です。

この2つの違いがわかったような気がするので、それを書いてみます。
2つの違いは、返ってきた文字列が解析されるかどうかだと思います。


①の方法は、返ってきた文字列はそのまま responseText プロパティに入れられます。文字列は解析されません。
しかし②の方法では、返ってきた文字列は JavaScriptソースコードとして解析されます。解析される前にソースコードを書き換えることは、おそらくできません。

でもこれは、別ドメインへのリクエストを禁止する理由にはなっていないような…。
…ちょっとわからないので、また暇なときに考えてみます。