fc2ブログ

奇特なブログ

「殊勝に値する行いや心掛け」を意味する、奇特な人になる為のブログです

第6回ソーシャルラーニング勉強会の開催案内

こんにちは、第6回ソーシャルラーニング勉強会の開催案内です。
内容は以下の通りです。
今回は、関連がない方は、おそらくいらっしゃらないと思います。


開催日時:2012年12月8日14時から

予定時間:推定3時間、最低2時間、最高不明(笑)というか正直検討つかないです

非技術系内容:どういう社会が好ましいのか?また、現実的対処は?

使用ツール:Twitter(少なくとも、しばらくは変わらないと思います)

参加費:無料

定員:無し

会場:Twitter上

ハッシュタグ:#studyonsm

参加条件:特に無いですが、Twitterを利用していなければ、閲覧のみで書き込みは出来ません

話す(つぶやく)人:この記事を書いている人(@kitoku_magic)

話した内容をTogetter等にまとめるか?:Togetterは使いませんが、まとめます。一例はコチラです。@kitoku_magic以外の参加者が話した内容も含みます。

その他注意点:
1.@kitoku_magicのつぶやくマシンやTwitterのサイトの調子が悪くなったら突然終了するかもしれません。
予め、ご承知おき下さい。

2.話すテンポを大事にしたいので、少々の誤字・脱字とかが発生するかもしれません。
予め、ご承知おき下さい。

3.上記ハッシュタグ付きで、ご意見・ご質問・ご感想・ご反論などを、
@kitoku_magic「以外」の人がつぶやかれた場合、
その方のツイッターID付きで、@kitoku_magicが取り上げる可能性があります。予め、ご承知おき下さい。
基本的には、あまりにも意味や関係の無い内容でなければ、積極的に取り上げていく予定です。

4.色々な話をしますが、当然ながらその話が正答だとは限りません。
あくまでも、@kitoku_magic個人の意見です。
@kitoku_magicの言う通りにしたけど、上手くいかなかったので責任取って下さい」と言われても、
責任は取れませんので、予めご承知おき下さい。


例によって、仕事の都合とかで、万が一開催日時が変わったとか変更がありましたら、
このブログや@kitoku_magicのTwitterで連絡します。
それでは皆様、どうぞよろしくお願い致します。

テーマ:日記 - ジャンル:日記

  1. 2012/12/02(日) 20:25:12|
  2. 勉強会
  3. | トラックバック:0
  4. | コメント:0

第5回ソーシャルラーニング勉強会で話した内容の記録

なんか最近は、この勉強会に関連する記事しか書いていないですね(苦笑)
他にも、書きたい内容は沢山有るんですけど、中々時間が(苦笑)
まぁ、んな事はどうでも良いとして本題。

以下の内容は、11/3に行った第5回ソーシャルラーニング勉強会での会話記録です。
それでは、以下からスタート!



11月3日 kitoku ‏@kitoku_magic
ピッピッピッピーン! #studyonsm

11月3日 kitoku ‏@kitoku_magic
さて、第五回を迎えました、ソーシャルラーニング勉強会です。皆様、いかがお過ごしでしょうか。 #studyonsm

11月3日 kitoku ‏@kitoku_magic
自分は、最近は忙しくてですねぇ。書きたい事は沢山あるんですけど、中々時間が取れないといった所です。 #studyonsm

11月3日 kitoku ‏@kitoku_magic
で、今回もサササっと文章化してきました。内容は「ユングのシャドウ」についてですね。といっても、ユング以外の人もシャドウって言葉は使ってるんですけど。 #studyonsm

11月3日 kitoku ‏@kitoku_magic
で、シャドウについてなんですが、正直概念が大変に難しいです。自分も、まだまだ全容は掴めていないといった状況です。ですので今回は、比較的簡単で分かりやすそうな所について、自分の考えを話してみたいと思います。 #studyonsm

11月3日 kitoku ‏@kitoku_magic
んじゃあまず、シャドウって何よ?って辺りから。 シャドウとは「自分の中で抑えていたり否定している事」。 #studyonsm

11月3日 kitoku ‏@kitoku_magic
例を三つほど。「我慢して周囲と協調することが正だと植え付けられた人にとって、我慢せずに自らの思うがままに生きている人」はシャドウ。 #studyonsm

11月3日 kitoku ‏@kitoku_magic
例2。「ゲームなんて子供がやるものと植え付けられた人にとって、大人なのにゲームが大好きな人」はシャドウ。 #studyonsm

11月3日 kitoku ‏@kitoku_magic
例3。「エッチな事を考えたり話したりしてはいけないと植え付けられた人にとって、エッチ事を考えていたり話したりしている人」はシャドウw そういえば、何処かにこういう話が大好きな人がいますねぇ(他人風w) #studyonsm

11月3日 kitoku ‏@kitoku_magic
ですので、自分と他人が違う以上、相手に対してシャドウになる「要素」がゼロってケースって、無いと思うんですよ。だから、シャドウ「率」の方が良いのではないかなと。ただ、0%はまず有り得ないと思いますけど。1~100%だと思います。 #studyonsm

11月3日 kitoku ‏@kitoku_magic
で、その「率」が低い人なら、それほど気にならないと思うんですよね。自分が好む点が共通している箇所が多いわけですから。でも、率が高いとそりゃあもう大変で、問題になるのは高いケースの時が多いと思います。 #studyonsm

11月3日 kitoku ‏@kitoku_magic
で、今回は、結構ありがち~な一例を書いてみたいと思います。 #studyonsm

11月3日 kitoku ‏@kitoku_magic
あ、いつも何回も言ってますけども、随時ツッコミやら質問やら感想やらはOKですので、どんどんお願いします。 #studyonsm

11月3日 kitoku ‏@kitoku_magic
では一例。Aという人とBという人がいました。 #studyonsm

11月3日 kitoku ‏@kitoku_magic
Aは、控えめで大人しく言葉遣いもちゃんとしていて、文句はあまり言わなくて、場の空気を乱さなくて細かい事もあまり気にしなくて性格的にサバサバしてる人です。 #studyonsm

11月3日 kitoku ‏@kitoku_magic
一方でBは、うるさくて言葉遣いも乱暴で、文句ばっかりで、場の空気を乱し細かい事も気にして性格的にしつこい人です。シャドウ率高そうな組み合わせですね。 #studyonsm

11月3日 kitoku ‏@kitoku_magic
もう言うまでもありませんが、当然AとBは対立します。で、多分Aの方が良い人だと感じる人が多いんじゃないかと思うんです。どうでしょうかね。 #studyonsm

11月3日 kitoku ‏@kitoku_magic
でも、必ずしもBが悪いとは、ウチは思わないです。勿論、悪いケースもあると思いますが、これは後程。 #studyonsm

11月3日 kitoku ‏@kitoku_magic
まず、うるさくて言葉遣いも乱暴で文句ばっかりって点について具体的に話してみます。 #studyonsm

11月3日 kitoku ‏@kitoku_magic
おそらく、昨今多くの業界の職場で、経営・管理層を中心としたメチャクチャマネジメントが存在していると思います。 #studyonsm

11月3日 kitoku ‏@kitoku_magic
で、それに対して現場の下の人間が、「そんなんではダメだ」とうるさく文句(批判の方が良いかな)を言うのは、別に変な話ではないと思うんですね。問題があると思うから批判しているだけですので。 #studyonsm

11月3日 kitoku ‏@kitoku_magic
あと、言葉遣いが乱暴っていうのは、丁寧な言葉遣いでは「分かった検討しておく」と言っておきながら、実際には何も検討も改善もしないからっていうのもあると思います。 #studyonsm

11月3日 kitoku ‏@kitoku_magic
そりゃあ、言葉遣いが丁寧の方が良いに決まっているんですよ。戦争を起こさないで、円満解決の方が良いのは明らかだと思います。 #studyonsm

11月3日 kitoku ‏@kitoku_magic
ですので、「うるさくて言葉遣いも乱暴で批判ばかり」だからといって、悪いとは限らないと思います。 #studyonsm

11月3日 kitoku ‏@kitoku_magic
もう一例いってみましょう。 #studyonsm

11月3日 kitoku ‏@kitoku_magic
「学校や家族の教育で自立や自律する事を教えないから、大人になったのに自分の事を自分でやらずに他人に依存したり寄っかかったりする人が増えてしまうんだ」と、うるさく批判するのは、果たして悪い事なのかと。 #studyonsm

11月3日 kitoku ‏@kitoku_magic
寄っかかる方は良いのかもしれませんけど、寄っかかられた方はたまったもんじゃありませんし。と、例を挙げるとおそらくキリがないのですが、こういうわけなので「うるさく言葉遣いも乱暴で文句ばかり言う」からといって、悪いとはいえないと思うんです。 #studyonsm

11月3日 kitoku ‏@kitoku_magic
多分、「うるさく言葉遣いも乱暴で文句ばかり言う」のが悪いってケースになるのは、自分の利益「だけ」しか考えていない場合じゃないですかね。 #studyonsm

11月3日 kitoku ‏@kitoku_magic
でもそれは、「控えめに丁寧な言葉遣い」だったとしても、自分の利益だけ考えているのならダメなわけで。この二つの要素の間に、関連性は本来無いのではと。問題なのは、自分の利益「だけ」しか考えない事だと思いますので。だから、先の発言は誤りですね。すいません。 #studyonsm

11月3日 kitoku ‏@kitoku_magic
じゃあ次に、場の空気を乱すという点について。 #studyonsm

11月3日 kitoku ‏@kitoku_magic
いわゆる場って、全部かどうかは分からないのですが、大抵の場合は「立場が上の人間が、下の異論を封じ込める為に作る」んじゃないかと思うんですよ。 #studyonsm

11月3日 kitoku ‏@kitoku_magic
「常識ある社会人として、適切な言動を取ること」というルールを作ったりとか。でも、こんな曖昧なルールでは、場の空気を乱す事も「ダメ」だとされてしまうんですね。まぁ、これはルールに問題があるんだろうなぁとは思うんですけど。 #studyonsm

11月3日 kitoku ‏@kitoku_magic
でも、さっきも話した通り、マネジメントや教育(に限りませんけど)がダメダメなのに、異論を封じ込めてしまっては、改善されることもないわけです。 #studyonsm

11月3日 kitoku ‏@kitoku_magic
だから、場の空気を乱すって行為が、必ずしも悪いわけではないですよと。異論を受け入れるかどうかまでは別にしても、まず話ぐらい聞けという意図かもしれませんので。 #studyonsm

11月3日 kitoku ‏@kitoku_magic
最後に、細かい事も気にして性格的にしつこいという点について。 #studyonsm

11月3日 kitoku ‏@kitoku_magic
で、それを話す前に、5分程休憩タイムにします。 #studyonsm

11月3日 kitoku ‏@kitoku_magic
例えば、「作業フローが非効率的で無駄が多い」というのがあったとします。まぁ、あったとしますというか、実はこれまでの話もこれからの話も、全て実在の話をもとにしているんですけどね(苦笑) #studyonsm

11月3日 kitoku ‏@kitoku_magic
それは、実際に作業をしている現場サイドの人間じゃなければ気付かない様な、「細かい」話でした。 #studyonsm

11月3日 kitoku ‏@kitoku_magic
でも、実際に作業をしていない非現場サイドの人間には、「なんか細かい話でよく分かんないし、何回も言ってくるしで、しつこいヤツだな」と感じられるかもしれません。 #studyonsm

11月3日 kitoku ‏@kitoku_magic
もうここまで書けば、十分ではないかと思います。 つまり、細かくてしつこいからといって、必ずしも悪いわけではないですよと。 #studyonsm

11月3日 kitoku ‏@kitoku_magic
さて、では改めてBの特徴を書いてみます。 #studyonsm

11月3日 kitoku ‏@kitoku_magic
「Bは、うるさくて言葉遣いも乱暴で、文句ばっかりで、場の空気を乱し細かい事も気にして性格的にしつこい人です」。 #studyonsm

11月3日 kitoku ‏@kitoku_magic
さて、果たしてBは、問題のあって悪い人物なのでしょうかと。 #studyonsm

11月3日 kitoku ‏@kitoku_magic
Bを擁護するような事を書きましたが、勿論悪い場合だってあると思います。例えば、自分の「職分(役割)」に関係する作業もロクにやらずに他人に寄っかかって、ただ「自分さえ良ければよい」という、「今すぐ、この場からご退場いただきたい」ケースとか。 #studyonsm

11月3日 kitoku ‏@kitoku_magic
ただまぁ、こういう場合に出る批判や改善案は、ウチが見ている限りでは、的を外していたり、あまりにも非現実的な話が目立つので、そこで「おかしい」と分かるんですけどw #studyonsm

11月3日 kitoku ‏@kitoku_magic
じゃあ、そろそろまとめに。まず、「うるさくて言葉遣いも乱暴で、文句ばっかりで、場の空気を乱し細かい事も気にして性格的にしつこい人」だからといって、必ずしも悪いわけではないと。 #studyonsm

11月3日 kitoku ‏@kitoku_magic
じゃあ、どうすれば良いのかと。まず、相手の話を聞いてみましょう・「深く」見てみましょうというのを自分としては提案してみたいです。正直、先の特徴だけでは、抽象的過ぎて何ともいえないと思うんですよね。だから。 #studyonsm

11月3日 kitoku ‏@kitoku_magic
例えば、なんでそういう事を言うのかとか、そういう事をするのかとか。相手に聞いてみるなり、観察して深く考えてみるなり、学んでみるなり。別に、どれでも良いんじゃないかなぁと思いますね。 #studyonsm

11月3日 kitoku ‏@kitoku_magic
で、それをしなければ、「何だよアイツは。ムカつく野郎だな」という愚痴で終わってしまうと思うんです。相手(シャドウ)だって、何がしかの考えがあって、それをやっていたり言っていたりするはずです。 #studyonsm

11月3日 kitoku ‏@kitoku_magic
あと、「人の振り見て我が振り直せ」って視点から、自分はシャドウがやっている事を、本当にやっていないのかという視点。 #studyonsm

11月3日 kitoku ‏@kitoku_magic
例えば、「コイツはホントに、自分の"見たいものしか見ない"人なんだな」と思ったとします。 では、自分は「自分の"見たくないものも見ている"」のかとか。ホントに出来ているのかとか。 #studyonsm

11月3日 kitoku ‏@kitoku_magic
ちなみにウチは、「そんなものは完全には出来ない」と思っています。シャドウって、自分が否定しているものの代表格だと思うんですけど、周囲がシャドウしかいない場に、身を置けるのかなと。まぁでも、もし出来ていたら、ホントに凄いと思いますけど。 #studyonsm

11月3日 kitoku ‏@kitoku_magic
まぁでも確かに、「見たくないものを見る」というのは大事だとは思うので、「自分は見たいものしか見ていないんだ」と「認めた」上で、出来る限り見る努力をするっていう方が良いと思いますけどね。 #studyonsm

11月3日 kitoku ‏@kitoku_magic
更に、別の視点から。シャドウと対峙しているというその状況を利用して、自分の状況を良く出来ないかって考えてみるとか。 #studyonsm

11月3日 kitoku ‏@kitoku_magic
例えば、自分と「共有している場(職場や家庭や同じ町や地域とか)」にシャドウがいました。シャドウは批判しまくっていて、でもその内容はそれなりに妥当だと感じたとします。 #studyonsm

11月3日 kitoku ‏@kitoku_magic
それなら、シャドウと向き合って話し合って、「貴方はそう思うんですよね、私もそう思うんですよ。で、どうすれば改善出来ますかね」と協力し合うとか。 #studyonsm

11月3日 kitoku ‏@kitoku_magic
もしくは、「こんなシャドウもいるし、元々自分の考えとして、この場に長くいるつもりないし、この場を去るか」というふうに、シャドウがいる状況を利用するっていうのもアリかと。つまり、転職や独立や引越しのきっかけにしてしまうと。 #studyonsm

11月3日 kitoku ‏@kitoku_magic
ただ、ここまで書いておいてそれはないだろというツッコミが飛んできそうなんですが。 #studyonsm

11月3日 kitoku ‏@kitoku_magic
まず、そもそもとして、シャドウは自分と正反対である要素が多いわけです。だから、シャドウと向き合うって人にとっては、シャドウと向き合わない人っていうのが、シャドウになってしまうと思うんです。 #studyonsm

11月3日 kitoku ‏@kitoku_magic
で、対峙する両者のうち、片方が先の内容を意識しても、もう片方がその辺を意識しなければ、バトルは終わらないと思うんですね。なので結果として、その場から離れたり、踏み倒したりといった結論にならざるを得ないという(苦笑) #studyonsm

11月3日 kitoku ‏@kitoku_magic
だから、シャドウといっても「シャドウと向き合う」っていう要素において、考えが共通していれば、多分その人とは「和解」出来ると思います。そうじゃない人は、どうすりゃ良いんでしょうねぇ(苦笑) #studyonsm

11月3日 kitoku ‏@kitoku_magic
本題は以上です。一応、「シャドウが見せているのは、ペルソナ(仮面)を被っていない自分の一面かそのもの」とか「実際に目の前にそういう人がいるのだから、自分がそうなっていた可能性だって勿論ある」とかのメモ書きはあるのですが、それだけなので今回はナシで(苦笑) #studyonsm

11月3日 kitoku ‏@kitoku_magic
というわけなので、他人にシャドウな要素を見つけたからといって、安易に否定したりするのはどうだろうかと思います。よく見て、よく聞いて、よく考えて辺りが、最低でも必須かなと。 #studyonsm

11月3日 kitoku ‏@kitoku_magic
では次回の予告って、まだ1時間半も経ってないですけど、まぁいいやw 最低でも三つ候補がありまして、「銀の弾丸」についての話・「道徳」や「倫理」についての話・「学問のすすめ」についての話とありまして。 #studyonsm

11月3日 kitoku ‏@kitoku_magic
どれにしようか~といった所です。話していてウチ自身が一番痛いのは、「銀の弾丸」についてかなと思いますけど(苦笑)また、告知します。 #studyonsm

11月3日 kitoku ‏@kitoku_magic
さて、こんな所ですね。それでは皆様、ありがとうございました。kitoku_magicがお届けしました。 #studyonsm



テーマ:日記 - ジャンル:日記

  1. 2012/11/04(日) 22:28:34|
  2. 勉強会
  3. | トラックバック:0
  4. | コメント:0

第5回ソーシャルラーニング勉強会の開催案内

第5回ソーシャルラーニング勉強会の開催案内です。
内容は以下の通りです。
今回は・・・イヤ~な話だと思いますけどね(苦笑)


開催日時:2012年11月3日14時から

予定時間:推定3時間、最低2時間、最高不明(笑)というか正直検討つかないです

非技術系内容その1:ユングの「シャドウ」について

使用ツール:Twitter(少なくとも、しばらくは変わらないと思います)

参加費:無料

定員:無し

会場:Twitter上

ハッシュタグ:#studyonsm

参加条件:特に無いですが、Twitterを利用していなければ、閲覧のみで書き込みは出来ません

話す(つぶやく)人:この記事を書いている人(@kitoku_magic)

話した内容をTogetter等にまとめるか?:Togetterは使いませんが、まとめます。一例はコチラです。@kitoku_magic以外の参加者が話した内容も含みます。

その他注意点:
1.@kitoku_magicのつぶやくマシンやTwitterのサイトの調子が悪くなったら突然終了するかもしれません。
予め、ご承知おき下さい。

2.話すテンポを大事にしたいので、少々の誤字・脱字とかが発生するかもしれません。
予め、ご承知おき下さい。

3.上記ハッシュタグ付きで、ご意見・ご質問・ご感想・ご反論などを、
@kitoku_magic「以外」の人がつぶやかれた場合、
その方のツイッターID付きで、@kitoku_magicが取り上げる可能性があります。予め、ご承知おき下さい。
基本的には、あまりにも意味や関係の無い内容でなければ、積極的に取り上げていく予定です。

4.色々な話をしますが、当然ながらその話が正答だとは限りません。
あくまでも、@kitoku_magic個人の意見です。
@kitoku_magicの言う通りにしたけど、上手くいかなかったので責任取って下さい」と言われても、
責任は取れませんので、予めご承知おき下さい。


あと、今は「テキスト(文字)」だけの内容になってますけど、
いずれは「音声」も取り入れていきたいと考えています。
盲人の方が読めないので。
聞く所によると、今後(既に?)プログラムの実装で出来るかもしれない様ですので。
まぁ、しばらく先になるとは思いますけども。

例によって、仕事の都合とかで、万が一開催日時が変わったとか変更がありましたら、
このブログや@kitoku_magicのTwitterで連絡します。
それでは皆様、内容の拡散のほど、どうぞよろしくお願い致します。

テーマ:日記 - ジャンル:日記

  1. 2012/10/27(土) 23:45:12|
  2. 勉強会
  3. | トラックバック:0
  4. | コメント:0

第4回ソーシャルラーニング勉強会で話した内容の記録

以下の内容は、10/6に行った第4回ソーシャルラーニング勉強会での会話記録です。
ちなみに、いつかやるだろうと思ってましたけど、
ハッシュタグの付け忘れ(2番目の発言、他にもあるかも)をしてしまいましたw
それでは、以下からスタート!



10月6日 kitoku  @kitoku_magic
ピッピッピッピーン! #studyonsm

10月6日 kitoku  @kitoku_magic
第四回のソーシャルラーニング勉強会のスタートです。女性の下半身がとにかく好きな、kitoku_magicです(苦笑)

10月6日 kitoku  @kitoku_magic
ここ2か月、技術以外のテーマを取り上げてきましたが、今回は技術のお話にしました。やっぱりバランスが大切だと思いますので。 #studyonsm

10月6日 kitoku  @kitoku_magic
で、今回のキーワードは「DRY」。Don't Repeat yourself。「同じ事を2回以上書かない」です。 #studyonsm

10月6日 kitoku  @kitoku_magic
あ、あと、このページ http://kitoku1.blog129.fc2.com/blog-entry-175.html を随時開いておいていただきたいと思います。というか、コレを見ないと何がなんだか分からないと思いますので。 #studyonsm

10月6日 kitoku  @kitoku_magic
ですので多分、今回はモバイルだと特に見づらい(か見えない)かなとは思うのですが、すいませんご了承下さいませ。 #studyonsm

10月6日 kitoku  @kitoku_magic
では、本題に入ります。まずは、Part1から5のPart1から。先程のページの該当箇所をご覧頂ければと思います。 #studyonsm

10月6日 kitoku  @kitoku_magic
クラス化もされていないし関数化もされていないソースですね。これを何というのかが分からないのですが、自分は勝手に「ベタ書き」と呼んでます。 #studyonsm

10月6日 kitoku  @kitoku_magic
まず、パッとみて思うのが、「手数料を計算して加算する」とか「消費税を計算して加算する」って処理が、「2ヶ所」ありますね。さっきのDRYの話から、まずこれを「1ヶ所」にしましょうと。 #studyonsm

10月6日 kitoku  @kitoku_magic
「別にたかだか2ヶ所を1ヶ所にしたぐらい、大した改善じゃないじゃないか」というのが、多分罠なんじゃないかなぁと思います。2ヶ所を1ヶ所にすら出来なければ、もっと数が増えたり、パターンが若干変わったりしている時に、対処出来ないのではないかと。 #studyonsm

10月6日 kitoku  @kitoku_magic
なので、さっきの様な発言は、良いリトマス試験紙になるんじゃないかなぁと思います。技術的負債が増えるかもしれないと警戒した方が良いでしょうね(苦笑) #studyonsm

10月6日 kitoku  @kitoku_magic
話を戻します。で、それを改善したのが、Part2のa.phpです。関数化してみました。 #studyonsm

10月6日 kitoku  @kitoku_magic
で、コメントにも書いてますけど、ここが注意です。DRYは「同じ事を2回以上書かない」ですが、「同じ"意味"のコードを2回以上書くな」であって、「同じ内容のコードを2回以上書くな」ではないので、この場合関数も2つに分かれます。 #studyonsm

10月6日 kitoku  @kitoku_magic
消費税は、なんか今度上がるとか何とか言ってましたけど、でも消費税と手数料は連動しませんよねと。というか、連動しちゃあ困りますわな(苦笑) #studyonsm

10月6日 kitoku  @kitoku_magic
さて、これで処理が共通化出来ました。このソースの場合はですけど、1つのファイルだと正直これぐらいしかやる事は無いですね。でも、ファイル1つのシステムというのも、そうはないと思いますので。これからが重要だと思います。 #studyonsm

10月6日 kitoku  @kitoku_magic
さて、ここまでで、何かご意見・ご質問等はありますでしょうか。お気軽にどんどんお寄せ頂ければと思います。 #studyonsm

10月6日 kitoku  @kitoku_magic
では次です。今度はファイル(画面)がもう一つ増えました。Part3のb.phpです。こっちは、a.phpとは違う処理を行なっています。 #studyonsm

10月6日 kitoku  @kitoku_magic
で、確かに違う処理を行なっているのですが、でも初期処理と終了処理の箇所は、全く同じ事をしていたりするんですよね。 #studyonsm

10月6日 kitoku  @kitoku_magic
このソースは、Webアプリというのを想定(Smartyを使っているのもそれを暗示)していますけど、自分が見聞きした限りですと、Webアプリって殆ど(必ず?)このような作りになっているんですよね。 #studyonsm

10月6日 kitoku  @kitoku_magic
で、どの画面でも、初期処理と終了処理は共通化出来るのが殆どでございまして、なのでココを共通化(DRYに)しちゃいましょうと。 #studyonsm

10月6日 kitoku  @kitoku_magic
そして、新たに出来たのが、「initialize.php」と「finalize.php」です。あと、a.phpの方の初期処理と終了処理の部分も変更が入りました。 #studyonsm

10月6日 kitoku  @kitoku_magic
さて、大分スッキリ。これでもし、「DB接続の処理を追加してくれない?」とかいうお話がきても、initialize.php「だけ」を修正すればよいということで、100ヶ所直したりする悲劇から免れることが出来るわけですね。 #studyonsm

10月6日 kitoku  @kitoku_magic
さて、ここでは何かツッコミ等はありませんでしょうか? #studyonsm

10月6日 kitoku  @kitoku_magic
Part4に進む前に、5分程休憩しましょうか。14時50分頃から再開します。 #studyonsm

10月6日 kitoku  @kitoku_magic
さて、再開します。今度は、更にもうひとつファイルが増えました。Part4のc.phpで、メイン処理の一部がa.phpと同じになっています。初期処理と終了処理は全く同じです。 #studyonsm

10月6日 kitoku  @kitoku_magic
じゃあ、またa.phpとc.phpで共通で使っている関数を、別ファイルに出せば良いのではということで、別ファイルには出しています。ただ、今度は「クラス」が付いています。 #studyonsm

10月6日 kitoku  @kitoku_magic
で、別にコレ、クラスにしなくても、別ファイルに外出しするだけで、目的が達成出来ないわけではないんですよね。なのに、なんでクラスにしたのかと。 #studyonsm

10月6日 kitoku  @kitoku_magic
これも、この時点では二つしか関数が無いので、クラス化する必要はないとなるのですが、色々な関数がこのファイル内に詰め込まれますと、分類がグチャグチャになって、読むのも整理も大変になってしまうと。関数100個とかになったら、大変じゃないですか。 #studyonsm

10月6日 kitoku  @kitoku_magic
なので、まぁ今回のソースですとutilityとなっているので矛盾している様にも見えるかと思いますが、こういう場合、例えばその関数がSQL絡みだったらsql_utilとか、画面表示絡みだったらhtml_utilとか、http通信絡みだったら、続きます #studyonsm

10月6日 kitoku  @kitoku_magic
続き、http_utilとか「パッケージング」すると、ソースも短くなりますし、良い感じになるかと思います。タンスの整理みたいなもんで、ジーンズとパンツとセーターを同じ所に入れないでしょうと。 #studyonsm

10月6日 kitoku  @kitoku_magic
そういえば、タンスといえば・・・止めときます(苦笑) #studyonsm

10月6日 kitoku  @kitoku_magic
で、あとココでは、関数をstaticにしています。で、今回の話と若干それますけども、手続き(関数やメソッドやファンクション)を共通化するだけなら、staticもアリかと思うんです。というより、継承とかしなければ、インスタンスをわざわざ生成する必要などないかと #studyonsm

10月6日 kitoku  @kitoku_magic
でも、例えばコレが、変数を共通化(共"有"化かな)だと、変数の値まで更新されてしまう恐れが出てくると。さっきの例ですと、「とある金額を渡したら、その金額の5%分の金額をよこせ」という手続きなら共通化しても害にはならないのですが、続きます #studyonsm

10月6日 kitoku  @kitoku_magic
続き、「とある金額」は、その手続きを呼び出した側によって違うので、そこを共有化しちゃうとマズいとなるかなと。 #studyonsm

10月6日 kitoku  @kitoku_magic
ソースもなく、つたない文章でアレなんですけど、スーパーのレジに行ったら、買う物をレジに通すという手続きは良いけど、買う物を他の人と混ぜて多額の請求を食らうとかって感じでしょうかねw #studyonsm

10月6日 kitoku  @kitoku_magic
で、ここで変数を共通化しちゃうのが、グローバル変数。永久不変に小さいプログラムなら、そう害は無いのですが、永久不変になるかどうかって、分からないですからねぇ。便利なのは否定しないんですが、自分の実体験もあるんでしょうけど、とても推奨は出来ないなぁと(苦笑) #studyonsm

10月6日 kitoku  @kitoku_magic
さて、Part4はこの辺までで、15時30分頃から、最後のPart5に移りたいと思います。 #studyonsm

10月6日 kitoku  @kitoku_magic
さて、再開です。最後のPart5。ところで、ツッコミなどはないでしょうか、いかがでしょうか~ #studyonsm

10月6日 kitoku  @kitoku_magic
さて、Part4のソースを見てみると、「require_once('initialize.php');」とか「require_once('finalize.php');」とかが、また2ヶ所以上ありますよと。なので、この辺をどうするか。 #studyonsm

10月6日 kitoku  @kitoku_magic
あと、初期処理と終了処理だけ共通化出来たとしても、メイン処理は全ファイルで全部違うし、その辺を含めてどうしましょうかと。 #studyonsm

10月6日 kitoku  @kitoku_magic
ということで、それを解決しているのが、Part5のcontroller.phpです。 #studyonsm

10月6日 kitoku  @kitoku_magic
まず、初期処理と終了処理は、executeメソッド内に一つずつ書いてます。ここは、そう難解でもないと思います。 #studyonsm

10月6日 kitoku  @kitoku_magic
で、各画面毎のメイン処理をどうするかって所ですけど、クラス名(=ファイル名)をリクエストパラメータに設定して受け取ります。 #studyonsm

10月6日 kitoku  @kitoku_magic
で、少しコメントにも書いてありますけど、パラメータの値によっては結構ヤバい事になるかもしれないので、チェックしましょうと。 #studyonsm

10月6日 kitoku  @kitoku_magic
で、どうやってチェックするかですが、例えば、クラス名が「login」だったら、クラス名を管理する設定ファイルにloginと追加して、requireする前に設定ファイルにある名前かどうかチェックしますと。勿論、設定ファイルはドキュメントルート外に置きます。 #studyonsm

10月6日 kitoku  @kitoku_magic
これで、パラメータによって処理実行するクラスを変えて、万々歳ですよと。 #studyonsm

10月6日 kitoku  @kitoku_magic
また、ファイル名が変わるというケースも少ないかと思いますけど、初期処理と終了処理のrequireも一つになりましたね。 #studyonsm

10月6日 kitoku  @kitoku_magic
さて、でもまだ共通化が出来たりします。「メイン処理実行」の直前の「$obj->set_smarty($smarty);」なんですけど、この$objって画面によって違うので、クラスも別になるんですよね。 #studyonsm

10月6日 kitoku  @kitoku_magic
でも、それだとクラスを追加する度に、set_smartyメソッドを追加しなきゃいけないではないかと。処理の意味が同じなのに、何とかならんのかと。 #studyonsm

10月6日 kitoku  @kitoku_magic
そこで、今度見て頂きたいのは、model.phpと、a.phpです。a.phpには「extends model」とあるので、modelクラスが親クラスです。 #studyonsm

10月6日 kitoku  @kitoku_magic
で、「$obj->set_smarty($smarty);」の$objが、「modelをextendsしたクラス」なら、modelにあるset_smartyを呼ぶことが出来ますよと。 #studyonsm

10月6日 kitoku  @kitoku_magic
ということで、これでまた複数の箇所に書かずに済みました。 #studyonsm

10月6日 kitoku  @kitoku_magic
「でも、executeメソッドは、どのクラスにも書いてるよねぇ」については、処理している内容が違うので、これはこうするしかないと思います。 #studyonsm

10月6日 kitoku  @kitoku_magic
という感じで、これでMVCフレームワークですね。といっても、まだまだ機能は足りないですけど。 #studyonsm

10月6日 kitoku  @kitoku_magic
では、そろそろ今回のまとめです。 #studyonsm

10月6日 kitoku  @kitoku_magic
1.「たった2ヶ所ぐらいなら、大して変わらないでしょ」は危険信号。 #studyonsm

10月6日 kitoku  @kitoku_magic
2.「なんか複雑だし、便利で楽なグローバル変数で良いでしょ」も危険信号。というかコレに限らず、「便利」とか「楽」とか言われると、自分は大抵疑います(苦笑) #studyonsm

10月6日 kitoku  @kitoku_magic
3.同じ箇所が増えてからでは、「直そう直そう」と口には出たとしても、直す「気力」や「胆力」的に、負ける可能性大だと思います。なので、面倒だと思っても、一つも作り込まない気持ちを持って、ソースを書いていくのが大切と思います。痛い目にあえば分かると思いますw #studyonsm

10月6日 kitoku  @kitoku_magic
さて、今回はこの辺で終了です。今日は、誰も来ませんでしたねぇ。何となく想像はついてはいますけども。 #studyonsm

10月6日 kitoku  @kitoku_magic
で、次回なんですけど、いつも月初にやってますが、11月は微妙です。まだ分かりませんけど。だから、10月の最終週とかになるかもしれません。内容は・・・「銀の弾丸」か「負けられる強さ」辺りでしょうかねぇ。まぁ、例によって分かりません。 #studyonsm

10月6日 kitoku  @kitoku_magic
それでは、今回はこれで終了です。kitoku_magicでした~ #studyonsm



テーマ:日記 - ジャンル:日記

  1. 2012/10/08(月) 21:34:58|
  2. 勉強会
  3. | トラックバック:0
  4. | コメント:0

第4回ソーシャルラーニング勉強会の説明用ソースコード

Part1:




a.php


<?php

//---------
// 初期処理
//---------
// Smartyインスタンス生成とか、date_default_timezone_setとか、DB接続とか
require_once('Smarty.class.php');
$smarty = new Smarty();

//-----------
// メイン処理
//-----------
// SQL投げてデータ取ってきて設定するとか、メール送信するとか
$price1 = 100;
$price2 = 200;

// 何か色々やる

// 何か色々やる

// 手数料を計算して加算する
$price1 += $price1 * 0.05;

// 何か色々やる

// 消費税を計算して加算する
$price1 += $price1 * 0.05;

// 何か色々やる

// 何か色々やる

// 何か色々やる

// 手数料を計算して加算する
$price2 += $price2 * 0.05;

// 何か色々やる

// 消費税を計算して加算する
$price2 += $price2 * 0.05;

$smarty->assign('price1', $price1);
$smarty->assign('price2', $price2);

//---------
// 終了処理
//---------
// 画面の表示とか
$output_html = $smarty->fetch('テンプレートファイル名');
echo $output_html;



Part2:




a.php


<?php

// 手数料を計算する
function calc_commission($price)
{
// 振込手数料の様に減算する可能性もあるので、ここでは加算はしない
// 原則として、一つの関数内では、沢山処理をしない方が良い
// でも、振込手数料なら率が別になる可能性もあるので、書いちゃっても良いか?
return $price * 0.05;
}

// 消費税を計算する
function calc_payment_tax($price)
{
// こっちは同時に加算しちゃっても良いかも
return $price * 0.05;
}

//---------
// 初期処理
//---------
// Smartyインスタンス生成とか、date_default_timezone_setとか、DB接続とか
require_once('Smarty.class.php');
$smarty = new Smarty();

//-----------
// メイン処理
//-----------
// SQL投げてデータ取ってきて設定するとか、メール送信するとか
$price1 = 100;
$price2 = 200;

// 何か色々やる

// 何か色々やる

// 手数料を計算して加算する
$price1 += calc_commission($price1);

// 何か色々やる

// 消費税を計算して加算する
// こっちは同じ関数に入れちゃダメ!
// 5%になっているのはたまたまなっているだけで、手数料率が変わったら消費税率も変わる保証はないので
// コメント書いているから気付きやすいけど、書いてなかったらやりそう
$price1 += calc_payment_tax($price1);

// 何か色々やる

// 何か色々やる

// 何か色々やる

// 手数料を計算して加算する
$price2 += calc_commission($price2);

// 何か色々やる

// 消費税を計算して加算する
$price2 += calc_payment_tax($price2);

$smarty->assign('price1', $price1);
$smarty->assign('price2', $price2);

//---------
// 終了処理
//---------
// 画面の表示とか
$output_html = $smarty->fetch('テンプレートファイル名');
echo $output_html;



Part3:




a.php


<?php

// 手数料を計算する
function calc_commission($price)
{
// 振込手数料の様に減算する可能性もあるので、ここでは加算はしない
// 原則として、一つの関数内では、沢山処理をしない方が良い
// でも、振込手数料なら率が別になる可能性もあるので、書いちゃっても良いか?
return $price * 0.05;
}

// 消費税を計算する
function calc_payment_tax($price)
{
// こっちは同時に加算しちゃっても良いかも
return $price * 0.05;
}

//---------
// 初期処理
//---------
// Smartyインスタンス生成とか、date_default_timezone_setとか、DB接続とか
require_once('initialize.php');

//-----------
// メイン処理
//-----------
// SQL投げてデータ取ってきて設定するとか、メール送信するとか
$price1 = 100;
$price2 = 200;

// 何か色々やる

// 何か色々やる

// 手数料を計算して加算する
$price1 += calc_commission($price1);

// 何か色々やる

// 消費税を計算して加算する
// こっちは同じ関数に入れちゃダメ!
// 5%になっているのはたまたまなっているだけで、手数料率が変わったら消費税率も変わる保証はない
// コメント書いているから気付きやすいけど、書いてなかったらやりそう
$price1 += calc_payment_tax($price1);

// 何か色々やる

// 何か色々やる

// 何か色々やる

// 手数料を計算して加算する
$price2 += calc_commission($price2);

// 何か色々やる

// 消費税を計算して加算する
$price2 += calc_payment_tax($price2);

$smarty->assign('price1', $price1);
$smarty->assign('price2', $price2);

//---------
// 終了処理
//---------
// 画面の表示とか
require_once('finalize.php');
show_html($smarty, 'テンプレートファイル名');



b.php


<?php

//---------
// 初期処理
//---------
// Smartyインスタンス生成とか、date_default_timezone_setとか、DB接続とか
require_once('initialize.php');

//-----------
// メイン処理
//-----------
// SQL投げてデータ取ってきて設定するとか、メール送信するとか

// 画面が違うので、さっきとは違う事をやっている

//---------
// 終了処理
//---------
// 画面の表示とか
require_once('finalize.php');
show_html($smarty, 'テンプレートファイル名');



initialize.php


<?php

//---------
// 初期処理
//---------
// Smartyインスタンス生成とか、date_default_timezone_setとか、DB接続とか
require_once('Smarty.class.php');
$smarty = new Smarty();



finalize.php


<?php

// 画面を表示する
function show_html($smarty, $template_file_name)
{
$output_html = $smarty->fetch($template_file_name);
echo $output_html;
}



Part4:




a.php


<?php

// 手数料を計算する
/*function calc_commission($price)
{
// 振込手数料の様に減算する可能性もあるので、ここでは加算はしない
// 原則として、一つの関数内では、沢山処理をしない方が良い
// でも、振込手数料なら率が別になる可能性もあるので、書いちゃっても良いか?
return $price * 0.05;
}*/

// 消費税を計算する
/*function calc_payment_tax($price)
{
// こっちは同時に加算しちゃっても良いかも
return $price * 0.05;
}*/

//---------
// 初期処理
//---------
// Smartyインスタンス生成とか、date_default_timezone_setとか、DB接続とか
require_once('initialize.php');

//-----------
// メイン処理
//-----------
// SQL投げてデータ取ってきて設定するとか、メール送信するとか
$price1 = 100;
$price2 = 200;

// 何か色々やる

// 何か色々やる

// 手数料を計算して加算する
require_once('utility.php');
$price1 += utility::calc_commission($price1);

// 何か色々やる

// 消費税を計算して加算する
// こっちは同じ関数に入れちゃダメ!
// 5%になっているのはたまたまなっているだけで、手数料率が変わったら消費税率も変わる保証はない
// コメント書いているから気付きやすいけど、書いてなかったらやりそう
$price1 += utility::calc_payment_tax($price1);

// 何か色々やる

// 何か色々やる

// 何か色々やる

// 手数料を計算して加算する
$price2 += utility::calc_commission($price2);

// 何か色々やる

// 消費税を計算して加算する
$price2 += utility::calc_payment_tax($price2);

$smarty->assign('price1', $price1);
$smarty->assign('price2', $price2);

//---------
// 終了処理
//---------
// 画面の表示とか
require_once('finalize.php');
show_html($smarty, 'テンプレートファイル名');



b.php


<?php

//---------
// 初期処理
//---------
// Smartyインスタンス生成とか、date_default_timezone_setとか、DB接続とか
require_once('initialize.php');

//-----------
// メイン処理
//-----------
// SQL投げてデータ取ってきて設定するとか、メール送信するとか

// 画面が違うので、さっきとは違う事をやっている

//---------
// 終了処理
//---------
// 画面の表示とか
require_once('finalize.php');
show_html($smarty, 'テンプレートファイル名');



c.php


<?php

//---------
// 初期処理
//---------
// Smartyインスタンス生成とか、date_default_timezone_setとか、DB接続とか
require_once('initialize.php');

//-----------
// メイン処理
//-----------
// SQL投げてデータ取ってきて設定するとか、メール送信するとか
$price1 = 100;
$price2 = 200;

// 何か色々やる

// 何か色々やる

// 手数料を計算して加算する
require_once('utility.php');
$price1 += utility::calc_commission($price1);

// 何か色々やる

// 何か色々やる

// 何か色々やる

// 何か色々やる

// 手数料を計算して加算する
$price2 += utility::calc_commission($price2);

// 何か色々やる

$smarty->assign('price1', $price1);
$smarty->assign('price2', $price2);

//---------
// 終了処理
//---------
// 画面の表示とか
require_once('finalize.php');
show_html($smarty, 'テンプレートファイル名');



utility.php


<?php

class utility
{
private function __construct()
{
}

// 手数料を計算する
static public function calc_commission($price)
{
// 振込手数料の様に減算する可能性もあるので、ここでは加算はしない
// 原則として、一つの関数内では、沢山処理をしない方が良い
// でも、振込手数料なら率が別になる可能性もあるので、書いちゃっても良いか?
return $price * 0.05;
}

// 消費税を計算する
static public function calc_payment_tax($price)
{
// こっちは同時に加算しちゃっても良いかも
return $price * 0.05;
}
}



Part5:




controller.php


<?php

class controller
{
public function execute()
{
//---------
// 初期処理
//---------
// Smartyインスタンス生成とか、date_default_timezone_setとか、DB接続とか
require_once('initialize.php');
require_once('utility.php');

// リクエストパラメータからクラスインスタンスを生成する
// 例:<form action="controller.php?p=a" method="post">

// 実際には、リクエストパラメータ値をチェックしてから、requireすべし
// require_once('/etc/passwd')とか(ディレクトリ・トラバーサル)にならない様に
// 設定ファイルにクラス名の一覧を書いておいて、その中にリクエストパラメータ値が存在するかどうかをチェックするのが良いと思う
$p = $_GET['p'];
require_once($p);
$obj = new $p;
// 引数の$smartyは、上記のinitialize.php内にある変数
$obj->set_smarty($smarty);
//---------------
// メイン処理実行
//---------------
$obj->execute();

//---------
// 終了処理
//---------
// 画面の表示とか
require_once('view.php');
$view = new view();
// 引数の$smartyは、上記のinitialize.php内にある変数
$view->set_smarty($smarty);
$view->show_html('テンプレートファイル名');
}
}

$controller = new controller();
$controller->execute();



model.php


<?php

class model
{
public function __construct()
{
$this->init();
}

public function init()
{
$this->set_smarty(null);
}

public function set_smarty($smarty)
{
$this->smarty = $smarty;
}

public function get_smarty()
{
return $this->smarty;
}

// メイン処理実行
public function execute()
{
}

// Smartyインスタンス
private $smarty;
}



a.php


<?php

class a extends model
{
// 処理実行
public function execute()
{
//-----------
// メイン処理
//-----------
// SQL投げてデータ取ってきて設定するとか、メール送信するとか
$price1 = 100;
$price2 = 200;

// 何か色々やる

// 何か色々やる

// 手数料を計算して加算する
//require_once('utility.php');
$price1 += utility::calc_commission($price1);

// 何か色々やる

// 消費税を計算して加算する
// こっちは同じ関数に入れちゃダメ!
// 5%になっているのはたまたまなっているだけで、手数料率が変わったら消費税率も変わる保証はない
// コメント書いているから気付きやすいけど、書いてなかったらやりそう
$price1 += utility::calc_payment_tax($price1);

// 何か色々やる

// 何か色々やる

// 何か色々やる

// 手数料を計算して加算する
$price2 += utility::calc_commission($price2);

// 何か色々やる

// 消費税を計算して加算する
$price2 += utility::calc_payment_tax($price2);

$this->get_smarty()->assign('price1', $price1);
$this->get_smarty()->assign('price2', $price2);
}
}



b.php


<?php

class b extends model
{
public function execute()
{
//-----------
// メイン処理
//-----------
// SQL投げてデータ取ってきて設定するとか、メール送信するとか

// 画面が違うので、さっきとは違う事をやっている
}
}



c.php


<?php

class c extends model
{
public function execute()
{
//-----------
// メイン処理
//-----------
// SQL投げてデータ取ってきて設定するとか、メール送信するとか
$price1 = 100;
$price2 = 200;

// 何か色々やる

// 何か色々やる

// 手数料を計算して加算する
//require_once('utility.php');
$price1 += utility::calc_commission($price1);

// 何か色々やる

// 何か色々やる

// 何か色々やる

// 何か色々やる

// 手数料を計算して加算する
$price2 += utility::calc_commission($price2);

// 何か色々やる

$this->get_smarty()->assign('price1', $price1);
$this->get_smarty()->assign('price2', $price2);
}
}



view.php


<?php

class view
{
public function __construct()
{
$this->init();
}

public function init()
{
$this->set_smarty(null);
}

public function set_smarty($smarty)
{
$this->smarty = $smarty;
}

public function get_smarty()
{
return $this->smarty;
}

// 画面を表示する
public function show_html($template_file_name)
{
// HTMLの文字列を取得する
$output_html = $this->get_smarty()->fetch($template_file_name);

// 画面を表示する
echo $output_html;
}

private $smarty;
}



参考資料:
http://www.m-fr.net/PESEF/on_the_way/

テーマ:日記 - ジャンル:日記

  1. 2012/10/06(土) 07:02:19|
  2. 勉強会
  3. | トラックバック:0
  4. | コメント:0
前のページ 次のページ