結論、そんなこたぁ知りません。
でもこれだけは分かります。
みんな死んだ魚のような目をしてデスマを乗り越……うわっやめろ何をする…!
最近寝るのが滅法遅くなってしまった僕です。
今の現場はフレックスなので、出勤時間には多少融通がきくのですよ。
しかし、終電近くがずーっと続くと、プライベートな時間を取り戻すために、
必死になって色々やっちゃうんですよねぇ…
IT系のニュースを一通り流し読みしたりだとか、
TwitterでIT関連記事をあさってみたりだとか、
アニメ見たりとかアニメ見たりとかアニメ見たりとか。
でもやっぱりオフの時間でもIT関連の話題に目がいってしまうのは、
好きなんだろうなぁ、そういう話。
なんかこう、ITって響きはわくわくするよね(病気)
そういえば、最近周囲に蜘蛛が現れまくるのですよ。
会社内で何故か二匹も出るし(それも私のデスク近く)
家でも出現するし、昨日は夢にも出てきたし(家の中に緑色の蜘蛛がいただけ)
更には家の玄関前に蜘蛛の巣張られてたし。
よく蜘蛛は縁起がいいとか何とかいうけれど、どうなんだろう。
噂じゃ、金運の上昇とか仕事や恋愛運も上昇とか、いい知らせがくるとかこないとか…
俺の嫁さんは一体どこにいるんだろうか、蜘蛛が連れてきてくれるんだろうか。(蜘蛛まかせ)
んー、でも確かにここ2ヶ月程の自分のモチベーションの高さはかなりのものかなぁとは思う。
全てがいい方向に向かっているような。
光が見えたような、身体が軽くなったような、そんな感じ。
そう考えると、あながち蜘蛛のおかげかもしれんね。
なんにせよ、命あるものは大事にってことです。(亡くなったばあちゃんの教え)
先日のこと。
僕、今やってるのJavaなんですけど、ちょっとあるタイミングで自分が作ったソースを他の人に見て頂いてた。
いつになっても自分のソース見られるのって緊張するなぁ…とか思っていたらハイ来ました「ちょっといいですか?」
ごめんなさいごめんなさいと何故か心の中で必死に謝りながら振り向く。
「特に問題はないんだけど、ひとつ気になったのはここです。
これ、StringBufferよりStringBuilderでもいいんじゃないですかね?」
ほう。
今まで
「Stringで文字列連結するよりStringBufferで連結してー」
「何でですか?」
「その方が高速だから」
なんて言葉はまるで常套句のように散々聞かされてきたものです。
そんな訳で、今までのプロジェクト(といっても二つだけ)は割とStringBufferクラス使うところ多かったの。
でも、ここに来てStringBuilder…なんぞ…
「????」
「ここって、特にスレッドセーフ意識しなくていいと思うので、だったらBuilder使った方が速いと思うんですよ」
「はぁ…(ごめんなさい、僕ほんとに無知なプログラマもどきみたいな奴で…)」
即座に自席に戻り、早々にPCのロック解除。
迷わず立ち上げるのはこれ。google先生教えて!!!
ふむふむ、なるほど。
つまり、BufferとBuilderの違いってスレッドセーフかそうじゃないかってことくらいなのね。
そんでもってBuilderの方が高速。
スレッドセーフとかは流石になんとなく知っているのだけど、おさらい。(誤認あるかもしんないし…)
僕のちっちゃな知識箱から必死に引っ張りだしてきた認知としては、スレッドセーフってのは「マルチスレッドで動くアプリケーション内で誤動作が起きないようにすること」みたい。
あぁ、辞書に載ってるような言葉そのまま知識箱に詰め込んじゃったわけね、昔の俺…
ちょっと自分の為におさらいしとこう。
マルチスレッドってのは、いくつかのスレッドを複数で処理していくこと。
んでもってスレッドってのは、イメージとしてはひとつの処理の単位みたいなものかなぁ?
たとえば、「テレビを見る」とか「パズドラをする」とか。
そのプロセスを複数で処理するってことは、つまり「テレビを見ながらパズドラをする」って感じ。
でももちろんテレビを凝視しながらパズルやってくなんて、そんな事できるほど僕は超人ではないのです。
だから、テレビにちょいちょい目配せしつつ、時々パズドラにも目配せし…
平行に処理していくってイメージの方が近いのかも。
で、話を戻すと、なんでそのマルチスレッドで誤動作が起きるの?って話。
ここから何となくのイメージでちゃんと理解しきれてない部分。
たとえばこんなイメージなのかな?
いくつかのスレッドを同時進行してて、そこから皆してあるメソッドにアクセスしたとする。
仮に
スレッドA:「abc」とう値をもってメソッドに突入
スレッドB:「def」という値をもってメソッドに突入
とする。
メソッドの処理は、もってこられた値に「zzz」という値をくっつけた文字を返すものだとする。
そうすると、ふたついっぺんに来られちゃったものだから、
「え!?え!?どっちなの!?どっち使ったらいいの!?どうすんの!?どうすんのよ俺ー!!!」
みたいに混乱して、全然予期せぬ値を返してしまうかもしれない…
的な?
うーん、あってるか不安…
話を戻そう。
で、そんなことがStringBuilderでは起こりえるらしいの。
だからマルチスレッドで動くアプリでは使わない方がいいみたい。
でもStringBufferではそんなことが起きないようにできている。
そこでBufferにある機能が、synchronized(シンクロナイズド)なのです。
Bufferクラスの中身を見てみたら、確かにどのメソッドにもsynchronizedが使われている。
つまり、排他的な制御をかけるから他のスレッドからが値が変更できないようになるのね。
うーん、synchronizedは未だに理解が半々な気がするんだよね…ちょっと勉強しよう。
で、結局
「マルチスレッドじゃないからBuilderでも問題ないってことですか?」
と問うてみたが、
「いや、マルチスレッドだとは思うんですけど、このメソッドってprivateだからこのクラスの中でしか呼ばれないですよね。だから、特にスレッドセーフを意識する必要はないと思うんです」
「????」
答えに結びついたと思ったのに、更に訳が分からなくなったでござる。
更に調査すると、ある「教えて!goo」にぶち当たる。
>>引用
排他の範囲はメソッドではなくインスタンスであることに
注意して下さい。すなわち、 synchronized は
「メソッドを排他的に実行するための宣言」ではありません。
インスタンスが異なれば待たされずに同時に実行されますし、
synchronized を付けた別のメソッドであっても
同じインスタンスに対するものならば同時に実行されません。
<<
これです。
なるほど、なんか分かった気がする!
つまり、
スレッドAは
インスタンスAのメソッドAを呼び出す。
スレッドBは
インスタンスBのメソッドBを呼び出す。
ここで実行されるメソッドAとメソッドBは全くの別人だから、それぞれが同時に呼び出しても、
互いに競合することはないってことか!?
だから、この場合だとスレッドセーフを意識してStringBufferを使う必要はなく、StringBuilderを使用して処理速度を上げた方が得策だと!
…本当にこれであってるだろうか。
うーん、まだまだ勉強不足。
そんな土曜日の自主勉強中な夜。
僕、今やってるのJavaなんですけど、ちょっとあるタイミングで自分が作ったソースを他の人に見て頂いてた。
いつになっても自分のソース見られるのって緊張するなぁ…とか思っていたらハイ来ました「ちょっといいですか?」
ごめんなさいごめんなさいと何故か心の中で必死に謝りながら振り向く。
「特に問題はないんだけど、ひとつ気になったのはここです。
これ、StringBufferよりStringBuilderでもいいんじゃないですかね?」
ほう。
今まで
「Stringで文字列連結するよりStringBufferで連結してー」
「何でですか?」
「その方が高速だから」
なんて言葉はまるで常套句のように散々聞かされてきたものです。
そんな訳で、今までのプロジェクト(といっても二つだけ)は割とStringBufferクラス使うところ多かったの。
でも、ここに来てStringBuilder…なんぞ…
「????」
「ここって、特にスレッドセーフ意識しなくていいと思うので、だったらBuilder使った方が速いと思うんですよ」
「はぁ…(ごめんなさい、僕ほんとに無知なプログラマもどきみたいな奴で…)」
即座に自席に戻り、早々にPCのロック解除。
迷わず立ち上げるのはこれ。google先生教えて!!!
ふむふむ、なるほど。
つまり、BufferとBuilderの違いってスレッドセーフかそうじゃないかってことくらいなのね。
そんでもってBuilderの方が高速。
スレッドセーフとかは流石になんとなく知っているのだけど、おさらい。(誤認あるかもしんないし…)
僕のちっちゃな知識箱から必死に引っ張りだしてきた認知としては、スレッドセーフってのは「マルチスレッドで動くアプリケーション内で誤動作が起きないようにすること」みたい。
あぁ、辞書に載ってるような言葉そのまま知識箱に詰め込んじゃったわけね、昔の俺…
ちょっと自分の為におさらいしとこう。
マルチスレッドってのは、いくつかのスレッドを複数で処理していくこと。
んでもってスレッドってのは、イメージとしてはひとつの処理の単位みたいなものかなぁ?
たとえば、「テレビを見る」とか「パズドラをする」とか。
そのプロセスを複数で処理するってことは、つまり「テレビを見ながらパズドラをする」って感じ。
でももちろんテレビを凝視しながらパズルやってくなんて、そんな事できるほど僕は超人ではないのです。
だから、テレビにちょいちょい目配せしつつ、時々パズドラにも目配せし…
平行に処理していくってイメージの方が近いのかも。
で、話を戻すと、なんでそのマルチスレッドで誤動作が起きるの?って話。
ここから何となくのイメージでちゃんと理解しきれてない部分。
たとえばこんなイメージなのかな?
いくつかのスレッドを同時進行してて、そこから皆してあるメソッドにアクセスしたとする。
仮に
スレッドA:「abc」とう値をもってメソッドに突入
スレッドB:「def」という値をもってメソッドに突入
とする。
メソッドの処理は、もってこられた値に「zzz」という値をくっつけた文字を返すものだとする。
そうすると、ふたついっぺんに来られちゃったものだから、
「え!?え!?どっちなの!?どっち使ったらいいの!?どうすんの!?どうすんのよ俺ー!!!」
みたいに混乱して、全然予期せぬ値を返してしまうかもしれない…
的な?
うーん、あってるか不安…
話を戻そう。
で、そんなことがStringBuilderでは起こりえるらしいの。
だからマルチスレッドで動くアプリでは使わない方がいいみたい。
でもStringBufferではそんなことが起きないようにできている。
そこでBufferにある機能が、synchronized(シンクロナイズド)なのです。
Bufferクラスの中身を見てみたら、確かにどのメソッドにもsynchronizedが使われている。
つまり、排他的な制御をかけるから他のスレッドからが値が変更できないようになるのね。
うーん、synchronizedは未だに理解が半々な気がするんだよね…ちょっと勉強しよう。
で、結局
「マルチスレッドじゃないからBuilderでも問題ないってことですか?」
と問うてみたが、
「いや、マルチスレッドだとは思うんですけど、このメソッドってprivateだからこのクラスの中でしか呼ばれないですよね。だから、特にスレッドセーフを意識する必要はないと思うんです」
「????」
答えに結びついたと思ったのに、更に訳が分からなくなったでござる。
更に調査すると、ある「教えて!goo」にぶち当たる。
>>引用
排他の範囲はメソッドではなくインスタンスであることに
注意して下さい。すなわち、 synchronized は
「メソッドを排他的に実行するための宣言」ではありません。
インスタンスが異なれば待たされずに同時に実行されますし、
synchronized を付けた別のメソッドであっても
同じインスタンスに対するものならば同時に実行されません。
<<
これです。
なるほど、なんか分かった気がする!
つまり、
スレッドAは
インスタンスAのメソッドAを呼び出す。
スレッドBは
インスタンスBのメソッドBを呼び出す。
ここで実行されるメソッドAとメソッドBは全くの別人だから、それぞれが同時に呼び出しても、
互いに競合することはないってことか!?
だから、この場合だとスレッドセーフを意識してStringBufferを使う必要はなく、StringBuilderを使用して処理速度を上げた方が得策だと!
…本当にこれであってるだろうか。
うーん、まだまだ勉強不足。
そんな土曜日の自主勉強中な夜。
今日は来月から参画予定プロジェクトの面談。
なんだかんだでちゃんとした面談って2回目だよ…
めちゃくちゃに緊張したけど、営業さんがうまいことリードを引っ張ってくれるので、
心強い。というか安心。
緊張してるの分かるからサポートとして間に入ってくれるんだろうなぁ。
そういう意味で、この会社は社員への気遣いがうまいなぁって思う。
ここのプロジェクト決まりますよーに!
昨日からいよいよ本格的にiPhoneアプリ開発を始めようと思い、
AppStoreからIDE(Xcode)をインストール!
そんでもって、ios Developer Programに登録しようと思ったんだが、
遷移先のサイトには、「何者かに不法侵入されましたの文字…
今日のITメールマガジンで、情報流出の可能性があるなんて書いてありましたね。
こういうセキュリティ関係の問題って、他人事じゃないからな。
同じIT技術者として、しっかり受け止めよう。ふんす。
なんだかんだでちゃんとした面談って2回目だよ…
めちゃくちゃに緊張したけど、営業さんがうまいことリードを引っ張ってくれるので、
心強い。というか安心。
緊張してるの分かるからサポートとして間に入ってくれるんだろうなぁ。
そういう意味で、この会社は社員への気遣いがうまいなぁって思う。
ここのプロジェクト決まりますよーに!
昨日からいよいよ本格的にiPhoneアプリ開発を始めようと思い、
AppStoreからIDE(Xcode)をインストール!
そんでもって、ios Developer Programに登録しようと思ったんだが、
遷移先のサイトには、「何者かに不法侵入されましたの文字…
今日のITメールマガジンで、情報流出の可能性があるなんて書いてありましたね。
こういうセキュリティ関係の問題って、他人事じゃないからな。
同じIT技術者として、しっかり受け止めよう。ふんす。
今日もみんなが帰った中、ひとり残業。
や、まあ僕がスケジュール遅れてるのがいけないんですが…
くたくたで帰宅してから、NHKで「プロフェッショナル~仕事の流儀」を見た!
今日は、沖縄の観光添乗員の人が出演。
どんな仕事でも、みんなプロとして誇りをもってるんだなあと思うのです。
その後、魂が熱くなってしまったので、前の放送だけど、IT技術者の及川卓哉さんの回を見た。
Googleのエンジニアなんだけど、何度見ても胸が熱くなるな…
「同じリスクなら、世界を変えるリスクを取れ」
かっこいいっすね。
もうほんと。
「プロフェッショナルとは、人を惹き付ける努力を続けていく人」
この仕事はチームだから、一人で世界を変えていくのは難しいと及川さんは言ってました。
この人から見たら、俺なんてまだまだちっぽけかもしれないけど、
自分が作り出したロジックやソフトで、誰かの何かを助けてる。
いつか胸を張って「プロですから」って言えるくらいの技術者 になりたい。
そんでもって「プロフェッショナル」に出るのが俺の夢です!笑
や、まあ僕がスケジュール遅れてるのがいけないんですが…
くたくたで帰宅してから、NHKで「プロフェッショナル~仕事の流儀」を見た!
今日は、沖縄の観光添乗員の人が出演。
どんな仕事でも、みんなプロとして誇りをもってるんだなあと思うのです。
その後、魂が熱くなってしまったので、前の放送だけど、IT技術者の及川卓哉さんの回を見た。
Googleのエンジニアなんだけど、何度見ても胸が熱くなるな…
「同じリスクなら、世界を変えるリスクを取れ」
かっこいいっすね。
もうほんと。
「プロフェッショナルとは、人を惹き付ける努力を続けていく人」
この仕事はチームだから、一人で世界を変えていくのは難しいと及川さんは言ってました。
この人から見たら、俺なんてまだまだちっぽけかもしれないけど、
自分が作り出したロジックやソフトで、誰かの何かを助けてる。
いつか胸を張って「プロですから」って言えるくらいの技術者 になりたい。
そんでもって「プロフェッショナル」に出るのが俺の夢です!笑
ついに。
ついに買ってしまった。
Mac book air!!!!
こないだ出たばかりのやつです。
元々ノートPCは欲しいなと思っていたんですが、タイミングがなく未だ購入していませんでした。
ですがですが、今日は新宿へ技術セミナーへの参加予定があったので、なんの気なしにビッグカメラへ入店。
このスタイリッシュなモデル。
高級感溢れる質感。
appleというブランド。
かこいい!!!!
もうこれ買うしかないよーと思い、即購入。
前々からiPhoneアプリ作成は挑戦してみたかったので、いい機会にネ。
※objective-cなんてやったことないけど
家に帰って早速セットアップ。
惚れてしまっただけはある。はまった。
これでiPhone1アプリ作成系のセミナー行っても、ノートPC持ち込みの条件はクリアできそう!
しばらくはairちゃんで遊べそうでそ うです。
ついに買ってしまった。
Mac book air!!!!
こないだ出たばかりのやつです。
元々ノートPCは欲しいなと思っていたんですが、タイミングがなく未だ購入していませんでした。
ですがですが、今日は新宿へ技術セミナーへの参加予定があったので、なんの気なしにビッグカメラへ入店。
このスタイリッシュなモデル。
高級感溢れる質感。
appleというブランド。
かこいい!!!!
もうこれ買うしかないよーと思い、即購入。
前々からiPhoneアプリ作成は挑戦してみたかったので、いい機会にネ。
※objective-cなんてやったことないけど
家に帰って早速セットアップ。
惚れてしまっただけはある。はまった。
これでiPhone1アプリ作成系のセミナー行っても、ノートPC持ち込みの条件はクリアできそう!
しばらくはairちゃんで遊べそうでそ うです。