ラベル JavaScript の投稿を表示しています。 すべての投稿を表示
ラベル JavaScript の投稿を表示しています。 すべての投稿を表示

2013年3月19日火曜日

次男の得意料理はシャキシャキもやし炒めなのだ モンクアルカ

昨日の朝は19℃もあって暖かいと書いたのだが、今朝はなんと21℃であります。
この温度は俄には信じられなかったのだが実際にその温度を体が感じるのだから確かなのでありましょう。
終日騒がしく上空をやたらめったら吠えまわっていた春の嵐とやらはようやく大人しくなったようであります。

昨日の晩飯は次男が得意のモヤシを中心にした野菜炒めを大量に作ったのでそれで終わりにした。
いつも次男はモヤシを炒めすぎる傾向にあるので、作るたびごとにもっとシャキシャキ感を残さなければだめだよと言いつけたのですが、ようやくシャキシャキの野菜炒めが作れるようになったようです。
それに油をあまり使わないようにしないといけないというのも守るようになってきました。何度もやっていればそれなりに食えるものを作れるようになるようであります。
最近ではご飯と味噌汁だけはいつも私が用意して置くというスタイルが定着してきたようであります。誰もおかずの作り手がいないときは仕方がないので私の出番となるわけであります。
これからはご飯と味噌汁だけでなく何か一品を必ずつけるというのを考えています。それは主力のおかずではなくて添え物という感じのものです。
たとえばオヒタシとか野菜サラダとかですね。それなら負担に感じないで作れそうな気がします。それにあってもなくても良いものですから仮に作りたくない時に手を抜いても一向に目立ちませんからね。ヨシ!我ながらジツにいい考えだ。今日からさっそく挑戦してみることにしよう。

録画してあった「ロボット革命人間を超えられるか」を見た。俺のような無能な奴はすでにロボットに超えられていることを実感して愕然となってしまった。
今は動作が人間を超える努力をしているが、かなり早い時期に思考も超えてくるのではないかと思った。ロボットの思考が人間の思考を超えるというのはどういうことなのかまだ良くは理解していないのだけれども。
ゲイジュツは人間にしかできないなどと思っているだろうけれども、本当にそうだろうかと。たとえばこのようなウスラバカ文章などはすでに人工知能を使えば、もっと論理的で世の中の役に立つものを、たちどころに何十万文字も書いてしまえるのだろうと思う。これ本心から思う。ますます凡庸な俺には生きにくい世の中になっていくのだと思いガックリと頭を垂れてしまった。

朝からガックリしてしまっているのだが、まずは気を取り直して人工知能の足元にも及ばないのだがJavaScriptの初歩の初歩のお勉強を続けようと思います。まだ全体像を捉え切れないでいるのだけれども今日あたりからコードを書いて動作を確認していこうと思っています。俗にいう「写経」ですね。プログラムは「写経」をしなければ絶対に上達しませんからね。
最初はたぶん使い物にならないのだろうけれどもね。今回はじっくりと取り込もうと考えています。


2013年3月14日木曜日

晩御飯のモンダイ

さっそく夕方になってしまった。朝の4時から考えていた晩飯を作る時間であります。次男が家にいたので買い物に行かせることにした。
「それで何を買ってくればいいの?」
「適当に」
「それじゃあ困っちゃうよ」
「俺だって、何を作っていいのかわらんのだから、困るのはお互い様だろう」
なんていうわけのわからない会話をしてから、ともかく買い物に行かせた。
今晩はあいつが買ってきたものをみての出たとこ勝負となるのであった。
ご飯と味噌汁を仕掛けておいた。とにかくこの2つさえあればなんとかなるものであります。

本日はお絵かきソフトに触ることは一度もなかった。こういう時もあるのです。そういう時は決して無理してはいけないのです。


お昼のラーメンを食べ終わって部屋にもどると、かなり前に購入してちょっとだけ斜め読みして放り出してあった、プロになるためのJavaScript入門 ~node.js、Backbone.js、HTML5、jQuery-Mobile (Software Design plus)が目についてので、ペラペラとめくってみたら結構オモシロイのでそのまま読みふけってしまった。自分で制作しているホームページにもかなりの部分JavaScriptを使うようになっているのだが、理屈を詳しく知っているわけではなく、「あ!これいいな」って目についたものをパクって貼り付けて使っているのに過ぎないのであります。いつまでもそのようなことではいけないだろうと思い購入したのでありますが、買ってしまうとそれだけで安心してしまう悪い癖がついついでてしまうのでありました。
最近はなんの脈絡もなく、あっちこっちの分野を食い散らしているような気がします。ま、はっきり言えば飽きぽいってのもありますし、集中力がないともいえますね。自覚はしているのでありますが、これが一番私には疲れない学習方法だと確信するに至ったのでありますからしょうがないことであります。

そろそろ買い物から戻ってくるだろうから、ご飯を炊き始めますか。

2011年5月11日水曜日

iPohne用のHTMLで最初につまづいたところは、なんとラジオボタンです

iPhone用にhtml5とCSS3・PHP・MySQL等々でゲームらしきものを作っていたのですが、思わぬところでつまづいてしまいました。
 といいますのは、ラジオボタンそのものを大きくできないというところです。と、文章で書いてもいまいちイメージが浮かばないでしょうから、以下にラジオボタンの使用例を上げておきます。パソコンでマウスを使用するなら何ら問題がないのですが。


ラジオボタン使用例:
  正
  誤


 iPhoneでの操作はタッチスクリーンを使用しますが、ラジオボタンで選択する部分が指で強く触っても中々認識しません。そこでラジオボタン部分のサイズを2本の指で大きくしてからですと認識します。これではせっかくの流れが止まってしまってまったくゲームらしくないのです。普通のsubmitボタン部分はすぐに反応するのですが。

 そこで、ラジオボタンを最初から大きくして置く方法を探しましたが、文字の部分は大きくすることができるのですが、肝心な○の部分をどうしても大きくできません。CSSだけではどうしても無理なようなのでJavaScriptやJQueryも調査して見ましたが、どこにも見あたりません。いやー困りましたな。どうしようかと真剣に悩んでいます。これでまた頭頂部が薄くなってしまった。

 ラジオボタンに替わる方法に変更するしかないのかな、では何を用いればいいのだろうか。私の乏しい知識で思い浮かぶのはsubmitボタンを2つ用意するということですが、ではどちらのボタンが押されたかをどうやって認識すればいいのかということであります。以前にどこかに隠し文字列を持たせてURL文字列につけて飛ばすなんてのを見たような気もするのですが。そうなるとプログラム自体を改造しなければならず、これはこれでやっかいであります。どうにかならないかなラジオボタン

まさかこんなところで躓くとは夢にも思っていませんでした。

ダレカ タジゲデー!!

2011年4月13日水曜日

PHP MySQL JavaScript Jq HTML5 CSS3 混沌としていて頭のなかで繋がってこない

 昨日これまで作成していたWebアプリが完成した。いや完成したことにした。HTML部分のJavaScriptとCSS3部分は以前に学習のために作成しておいた部分を流用した。PHPとMySQLの部分は付け焼き刃で関連するサイトを調べまくりほとんどパクって稼働まで漕ぎ着けた。
 ひとつのアプリを作るのにPHP MySQL JavaScript Jquery HTML5 CSS3これだけのものを使わなくてはいけない時代になったのかと思う。どれも私は中途半端にしか理解していないので、全体を俯瞰してみるとまったく繋がってこないのであります。全部をPHPでやらなくてもJavaScriptで十分な部分もあるだろうし、Jqueryを使えばもっと格好良くできるだろうと思える部分もかなりあるのだが、全部がバラバラの状態で全体が繋がってこないのです。ま、どっちにしても年寄りの冷や水的なプログラムだからしょうがないのだけども。
 ソースを公開するのは、自分のバカさ加減がバレるようで結構恥ずかしいのですが、管理部分を除いた表示部分を一応公開してみるか。これで動作することはしているのですが、どこかに欠陥があったら教えて欲しいです。

 ソースをアップしてから気づいたのですが、DBの接続部分が3回もあります。プログラム的にはかなり饒舌だと思います。これを1回にまとめて関数化して、引数を渡し条件分岐するのが正しいと思う。なにせこれまではエラーなく動作させることばかり考えてきたので、動くなら、何度でも書けばいいやって、まったく余裕のないことをやっていましたので。少し余裕がでてきました。

 因みにDB接続部分だけを関数化して必要な場合だけ呼び出すようにしてみたけど、何故か動作しなかったのであります。なんでかというのを追求しないまま、それぞれの関数の部分に接続文字列をコピペしてしまいました。

実物はこちらにあります。挑戦!一発免許学科試験問題
なぜか、IEで見ると右側に寄ってしまいます。たぶんCSS3を変更しないとダメだと思います。今のところIE以外のブラウザーで見てください(そんなWEBアプリありかよ^^;)HTML5とCSS3で作成していますので、お!っていう部分があると思います。IEはほとんど対応していません。これからIE対応をしなければいけないのですが、気が重いな。やりたくないな。IE捨てちゃおうかな。別にオレ困らないもんね。IEなんか使っているのが悪いのだから。

<?php
/*****************************************************/
/*       学科問題出題システム                        */
/*****************************************************/

 session_name('hogehoge');
 session_cache_expire(90);
 session_start();


//システム全体の制御
    if ($_SESSION[ "btn_caption" ] == "次の問題" or $_SESSION[ "btn_caption" ] == "") {
        making_question();     //新規問題作成へ
    } elseif($_SESSION[ "btn_caption" ] == "答え") {
        answer();     //答えあわせへ
    }

/*****************************************************/
/*       答えの正誤判断する                          */
/*****************************************************/
    function answer(){
    global $radio1,$radio2,$kaitou,$kaisetu,$ketuka;
    global $div_kaitou,$div_kaisetu,$div_ketuka,$end_div;

            $_SESSION[ "btn_caption" ] = "次の問題";
            $radio1 = "";      //ラジオボタンを表示しない
            $radio2 = "";      //ラジオボタンを表示しない

            //正誤判定及びメッセージ作成
            if($_REQUEST["seigo"] == 0){
                 $answer2 = "あなたは上記の問題を○と答えましたが、";
            }else{
                 $answer2 = "あなたは上記の問題を×と答えましたが、";
            }

            if ($_REQUEST["seigo"] == $_SESSION[ "seikai" ]){
                $answer = "おめでとうございます。それは<strong><span style='color: red; font-size: 20pt'>正解</span></strong>です。";
                $_SESSION[ "seikaisu" ]++;
            }else{
                $answer = "残念ですが、それは<strong><span style='color: red; font-size: 20pt'>間違い</span></strong>です。";
            }
            $kaitou = $answer2 . $answer;
            $kaisetu = $_SESSION[ "kaisetu" ];

           //---------------これまでの成績を計算する------------------------------
            $ritu = round($_SESSION[ "seikaisu" ] / $_SESSION[ "count"] * 100,1);
            if ($ritu >= 90) {
                $msg = "<strong><span style='color: yellow; font-size: 17pt'>合格圏内です。この実力をキープしてください。</span></strong>";
            } elseif ($ritu >= 80) {
                $msg = "<strong><span style='color: yellow; font-size: 17pt'>あと1歩です。90%を目指してより一層磨きを掛けてください。</span></strong>";
            } else {
                $msg = "<strong><span style='color: yellow; font-size: 17pt'>もう少しがんばりましょう!。</span></strong>";
            }

            $ketuka = "これまでの<strong><span style='color: red; font-size: 20pt'>正解数は" .$_SESSION[ "count"] ."問中". $_SESSION[ "seikaisu" ]. "問</span></strong>です。<strong><span style='color: red; font-size: 20pt'>正解率は" . $ritu . "%</span></strong>です。<br />" . $msg;

         $div_kaitou = '<div id="kaitou">';
         $div_kaisetu = '<div id="kaisetu">';
         $div_ketuka = '<div id="ketuka">';
         $end_div = "</div>";

            update_go();    //間違った答えをdbに記録する
    }

/*****************************************************/
/*       新しい問題を作る                            */
/*****************************************************/
    function making_question(){
    global $radio1,$radio2,$kaitou,$kaisetu,$ketuka;
    global $div_kaitou,$div_kaisetu,$div_ketuka,$end_div;

           $dbname = "hogehoe";
           $hostname = "mysq5879.db.sakura.ne.jp";
           $userid = "nantara";
           $passwd = "kantara";

          if(!$con=mysql_connect($hostname,$userid,$passwd)){
               print "データベースに接続できません". mysql_error() . "<br />\n";
               exit;
          } else {
               mysql_query("SET NAMES utf8");    //文字化け対策
          }

         mysql_select_db($dbname,$con);

        //問題の総件数を求めます。
        $sql="SELECT * FROM mondai";
        $rst = mysql_query($sql,$con);
        $maxdeta=mysql_num_rows($rst);
        //乱数を発生させます。
        $rand = mt_rand(1, $maxdeta);
        //乱数で得た問題をひとつだけ選択して表示します。
        $sql="SELECT * FROM mondai where id = ".$rand;
        $rst = mysql_query($sql,$con);
 
       if($rst==False){
         print "レコードセット収得に失敗しました。";
         exit;
        }

        $col = mysql_fetch_array($rst);

        $_SESSION[ "id" ] = $col{"id"};
        $_SESSION[ "mondai" ] = $col{"mondai"};
        $_SESSION[ "kaisetu" ] = $col{"kaisetu"};
        $_SESSION[ "seikai" ] = $col{"seikai"};
//        $_SESSION[ "imgurl" ] = $col{"imgurl"};
        $imgurl = $col{"imgurl"};

        if(!$col{"imgurl"} == ""){
           $_SESSION[ "imgurl" ] = '<img src="http://hogehoge.jp/images/' .$col{"imgurl"}. '" />';
        }

        $_SESSION[ "access" ] = $col{"access"}; //アクセス数を求める
        $_SESSION[ "go" ] = $col{"go"};         //間違いの数を求める
        $_SESSION[ "btn_caption" ] = "答え";

        $access = $_SESSION[ "access" ]+1;
        $id = $_SESSION[ "id" ];
        $sql = "UPDATE crowner.mondai SET access = '$access' WHERE id= '$id'";
        $rst = mysql_query($sql,$con);
        if($rst==False){
           print "レコードセット収得に失敗しました。". mysql_error();
           exit;
        }

       mysql_free_result($rst);   //レコードセットの解放
       $con = mysql_close($con);  //データベースの切断
       $_SESSION[ "count" ]++;
       $kaisetu = ""; $kaitou = ""; $ketuka = ""; //コメントを初期化(空に)する。

         $div_kaitou = "";
         $div_kaisetu = "";
         $div_ketuka = "";
         $end_div = "";
       $radio1 = '<input type="radio" name="seigo" value="0" checked />  <strong>正</strong> ';
       $radio2 = '<input type="radio" name="seigo" value="1" />  <strong>誤</strong> ';
    }

/*****************************************************/
/*       間違った問題に+1をつける                  */
/*****************************************************/
    function update_go(){
           $dbname = "hogehoe";
           $hostname = "mysq5879.db.sakura.ne.jp";
           $userid = "nantara";
           $passwd = "kantara";

            if(!$con=mysql_connect($hostname,$userid,$passwd)){
                 print "データベースに接続できません". mysql_error() . "<br />\n";
                 exit;
            } else {
                 mysql_query("SET NAMES utf8");
            }
          mysql_select_db($dbname,$con); //データベースの選択 ☆この一文は必要です。ここを試しに削除したらエラーになった。


        $go = $_SESSION[ "go" ]+1;
        $id = $_SESSION[ "id" ];
        $sql = "UPDATE crowner.mondai SET go = '$go' WHERE id= '$id'";
        $rst = mysql_query($sql,$con);
       if($rst==False){
         print "レコードセット収得に失敗しました。". mysql_error();
         exit;
        }

       mysql_free_result($rst);   //レコードセットの解放
       $con = mysql_close($con);  //データベースの切断
    }
?>

<!--*****************************************************/
/*          HTMLの表示                              */
/*****************************************************-->

<!DOCTYPE html>
<html lang="ja">
  <head>
    <meta charset="utf-8">
    <title>挑戦一発自動車免許!学科問題</title>
    <!-- The below script Makes IE understand the new html5 tags are there and applies our CSS to it -->
    <!--[if IE]>
    <script src="http://html5shiv.googlecode.com/svn/trunk/html5.js"></script>
    <![endif]-->
    <link rel="stylesheet" href="test.css" />
    <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">

    <!--jquery関連呼出-->
    <script type="text/javascript" src="http://www.google.com/jsapi"></script>
    <script type="text/javascript">google.load("jquery", "1.4");</script>

    <!--twitter呼出関連-->
    <script type="text/javascript" src="http://widgets.twimg.com/j/2/widget.js"></script> 

    <!--基本的なJsを呼び込む-->
        <script src="./kihon.js"></script>

  </head>

  <body>
    <header>
      <hgroup>
        <h1>挑戦一発自動車免許!学科問題</h1>
<!--        <h2>Media Literacy 2010, Crowner.Co.LTD</h2> -->
      </hgroup>
        <script src="./header.js"></script>
    </header>

    <section>
      <article>

    <h2>第<?= $_SESSION[ "count" ] ?>問目</h2>

         <div id="mondai">
            <h3 id="no"> NO.</h3>
            <?= $_SESSION[ "imgurl" ] ?>
            <div id="toi">
                <?= $_SESSION[ "mondai" ] ?>
            </div>
         </div>

         <?= $div_kaitou ?>
             <?= $kaitou ?>
         <?= $end_div ?>

         <?= $div_kaisetu ?>
             <?= $kaisetu ?>
         <?= $end_div ?>

         <?= $div_ketuka ?>
             <?= $ketuka ?>
         <?= $end_div ?>
<div id="frm">
    <form method="POST" action=<? $_SERVER[ "PHP_SELF" ] ?>>
          <?= $radio1 ?>
          <?= $radio2 ?>
        <br />
        <input type = "submit" name = "btn" value=<?= $_SESSION[ "btn_caption" ] ?>>
    </form>
</ div>
      </article>

      <article>
        <script src="./center.js"></script>
      </article>
    </section>
    <nav id="left_nav">

        <script src="./testnavi.js"></script>
    </nav>
    <footer>
        <script src="./footer.js"></script>
    </footer>
  </body>
</html>

2011年3月1日火曜日

node.jsでサーバーサイドJavaScript開発入門

 以前から気になっていたnode.jsでサーバーサイドJavaScript開発入門という連載が始まった。とりあえずメモ代わりにアップしておこうっと
サーバサイドJavaScriptの本命「node.js」の基礎知識
 いや、なにがなんでもサーバーサイトでJavaScriptを使おうって気はないのですが、フロントエンドでJavaScriptを使いサーバーサイドでもJavaScriptを使うとなるとどうなるんだろうと思っただけなんですけども。今のところはPHPが一番手っ取り早い選択なんですけどもね。Rubyが一番の候補になるんですが、RoRをレンタルサーバーに入れるのが面倒そうなのでやめています。e-Rubyって選択肢もありますけどね。一つの言語で全部を賄えるのであればそれに越したことがないような気がします。
 いずれにしてもこれからのシステム開発ではJavaScriptを避けては通れない気がします。流れはHTML5になっているのですから。

あれ、結局サーバーにnode.jsをインストールしなければいけないんじゃない。こりゃあ、レンタルサーバーではなくて、VPSに変更するべき時期がきてるってことかな。さくらのVPSなら月に980円だもんね。全部のサイトをいきなりVPSに移動させるなんてことは無謀なことだけれども、自分がやりたいなと思っていることはこれですべて解決できてしまうもんね。

ついでだからこれも貼り付けておこう
初心者のためのJavaScript入門

2011年1月28日金曜日

冬ごもり 心ゆくまでのプログラミング

 文字通りに冬ごもりをやっています。外は寒いですからね、自宅のパソコン部屋に朝から晩まで閉じこもってパソコン三昧の日々であります。ようやくJavaScriptがわかりかけてきました。やって見ますと自分が思っていた以上に使える言語みたいです。やりもしないで馬鹿にしていた自分を恥じてしまいます。朝から夜中までどっぷりと填(はま)ってしまっています。何年ぶりかでコードを書いていますが、これほど面白ものはないですね。今年あたりはサーバーサイド用のJavaScriptが登場するらしのですが、これはどう使うのか今の私には理解できません。ま、そんなことはほっといて、しばらくはJavaScriptをオモチャにして遊びまわるつもりでいます。
 参考書を購入するつもりはまったくないです。以前にも書きましたが、ちょっと検索すれば、優れた解説のページが山ほどでてきますね。しかも無料なんです。10年ほど前には考えられないことでしたが、今はあたりまえの世界になっているんですね。以前だったら、ひとつの言語を覚えるのに無数の参考賞を買ったり、決して安くないソフトウエアーを買ったりしなければならなかったのですが、今回はすべてタダです。ネットに繋がってさえいれば何にもいらないのですから。いや繋がっていなくも大丈夫ですね。必要なのはやる気だけの世界ですね。
 ネットがこんなにスゴイものになるとは、まったく思っていませんでした。やっぱり頭が固すぎるんですね。こればっかしはしょうがないや。

 そうそう明日は1年ぶりで都内で酒飲みます。ひょっとし、都内に足を踏み入れるのも1年ぶりかもしれない。なにせこの数年ド田舎ばっかし回っていましたから。電車に15分も乗れば秋葉原なんですけど、今の私には北海道よりも遠い場所ですね。そんな私があろうことは今回は幹事なのですから笑ってしまう。飲み屋はネットで検索して決めました。これもホント便利です。いやはや

2011年1月27日木曜日

リベンジだい

おはようございます。
 昨日までの2日間は、jQueryにほとんど跳ねとばされてしまって、ほとほと疲れてしまいました。jQueryごときに負け続けるのも癪にさわります。本日から気を取り直してjQueryに再チャレンジです。負けていられません。こうなれば基礎から徹底的にやってみます。
 ということで本日からに備えて昨夜も晩酌もほどほどにして、万全の体調で本日は2時に起きました。どうせ1週間や2週間ではこのショボイ頭では覚えきれないだろうから、長期戦を覚悟しています。たぶんこの2,3日は撥ね付けられてばかりだろうけども、決してメゲナイ諦めないの精神です。
 なあに簡単なことです。できるまでやればいいだけのことです。まったく歯が立たないというほどのことでもないのですから。
 これまでソースを読んでも理解できない部分が多かったのは、動的にHTMLをいじると同時にCSSも同時にいじることができるというのを理解してなかったから、わからなかったのだと思う。それにタグのid属性とかclass属性も重要な要素だということですね。id属性とかclass属性なんていうのはCSSだけで利用するもんだと頭から思いこんでいたものですから。これまでJavaScriptをかなり馬鹿にしていたような気がします。深く反省しました。ゴメンゴメン

 JavaScriptの良いところは、ブラウザーとテキストエディターがあれば、どこでも開発できるということですね。特別なものは何もいらない。その場でコードを書けば結果がすぐにわかる。手軽でいいんですけれども。せめてトレースができればいいんですけれども。もっともトレースするほど複雑なものはまだ書きようもないのですが。

 と、いろいろ書いていたのですが、このブログでjQueryを試せないかと思ったのです。以下のボタンがjQueryを動作させています。ただし、どのボタンも1回だけ動作します。再度試すにはブラウザーの再読込をしなければなりません。まだfalseかtrureなのかの判断の仕方を知らないからです。元のテキスト文に戻せないから1回しか動作しないのです。
 ここでたくさんの事を学びました。いや発見しました。このブログはgoogleが運営しているものです。だからgoogleが提供している"http://www.google.com/jsapi"をデフォルトで読み込んであるのかと思いましたが、どうも違うようで動作しませんでした。そこでこの文章の最後で以下の2行を書き込んでおきました。この2行は通常ヘッダ部分に書き込むようですけど、場所はどこでもいいんですね。

これらのコードはjQuery入門 (ver 1.3)様のサイトを参考にさせていただきました。このサイトの説明は初心者には実にわかりやすいです。ここ数日はこのサイトサンプルを全て自分で書いて検証していこうと思っています。他にも優れもののサイトがたくさんあります。Web制作の現場で使えるjQuery UIデザイン入門というサイトもわかりやすく説明されています。感謝です。

  <script type="text/javascript" src="http://www.google.com/jsapi"></script>
    <script type="text/javascript">google.load("jquery", "1.4");</script>

またJavaScriptの関数部分もこの本文中に埋め込みました。これもどの場所に書き込んでおいても動作するんですね。以下はその一部です。
<script type="text/javascript">
        function changeText(){
               $("#about").html("<b>軽量/高速</b>なライブラリです");
        }
    </script>




jQueryサンプル


jQueryとは?

jQueryとは?





まとめて書き換え

ここを書き換える

ここも書き換える

ここは書き換わらないよ。class属性が指定されてないから



2011年1月26日水曜日

二日間頑張ったけど、駄目だ使い物にならんかった

 JavaScriptに挑戦しているのですが、どっちかというと実質はJqueryなんですけど、といってもいろんなサイトのコードをパクッテ貼り付ける作業をやって試してみたのですが、5個ほど実験してみたけどどれも駄目ですね。自分の思い通りに動作しないというのもあるし、まったく動作しないなんてのもあって、どんどんと熱くなってしまって結局どれも使い物にならなかったです。いやーーマイリましたね。「戦い疲れて日が暮れて」なんて虚しくつぶやいています。
 このままじゃ駄目だ。表面だけ追ってみても結局本質を理解していないから、動作しないときにどうにも手の出しようがないんだね。こうなれば急がば回れで、基本からじっくりと学習することにした。しかし、久しぶりに悔しい気持ちを味わってしまいました。いやはや
 あ、それから思ったのですが、JavaScriptにはデバッガーがないんだよね。どこかにあるのかな。だから、どこでエラーになっているのかがなかなかわからない。Script自体をコメントアウトにしてみたり、アラートを出すという方法もあると思うけど、変数が良くわからないから出しようがないしね。ま、そのうちにわかるだろうけれども。

2011年1月17日月曜日

私にとって有用なJavaScriptの2個目発見

 遅ればせながら、JavaScriptのお勉強を始めました。チラホラと「なんだ今頃かい」という声も聞こえてきそうですが、なにせ気まぐれな性格なので、それは仕方ありません。それに怠惰という気質も組み込まれているので、よりやっかいでもあります。勉強といっても、しゃかりきになってやっているわけでもなく、これも思いついた時だけ思い出したようにやっているに過ぎません。当然難解なものは最初からパスです。そうでなくても私生活には幾多の難問を抱えているものですから、これ以上の問題を抱えたくないものですから。

超原始的な私のホームページの作成法
 私のホームページの作り方は実に原始的なものであります。1ページ毎をテキストエディターで一文字、一文字打ち込んでいくというシロモノであります。当然最初はそうじゃなかったんですよ。ホームページを簡単に作る道具も使っていました。最初はIBMの「ホームページビルダー」から始まって最終的にはマクロメディアのドリームウエバーなどというものに行き着きました。それでも時間を経って気がついてみると結局はテキストエディターに戻ってしまっていました。たとえ多少の手間ひまがかかっても結局私にはこの超原始的な方法が合っているみたいです。
メンテナンスが大変
 1ページや数ページのサイトでしたら、私のこの超原始的な方法でいいのですが、どうも根が駄文書き散らしの性格のようで、ひとつのサイトが数十ページにどうしてもなってしまいます。そうしますと各ページの共通部分に変更が生じた時が大変なのであります。一つひとつのページを開いて変更部分を書き換えていきます。共通部分で特に多く書き換えが生じるのはメニュー部分です。ページが増減した場合にリンクを増やしたり減らしたりという作業をやり続けるわけであります。もちろドリームウエバー等のツールを使用している場合は簡単なのでありますが。
 その点デザイン部分に変更が生じた場合は簡単です。デザイン部分はすでにデータのあるhtml部分とデザイン制御のあるcss部分を分離していますから、css部分を書き換えれば何十ページあろうが何百ページあろうが瞬時に変更可能であります。
 一箇所を変更すれば何百ページにも渡る共通部分を変更する方法を遅ればせながら発見したわけであります。次の項からが本日の主題であります。
各ページのメニュー(nav)部分をまとめて JSで読み込む
この部分はすでにこのサイトに適用されています。同じようにfooter部分も共通なので同様の処理をしました。これによって共通部分が何十ページになろうとも1箇所のjsファイルを変更することによってその変更箇所が瞬時に反映されることになります。このJavaScriptが私にとっては最初の実用的なものとなります。
読み込まれる側の.jsファイルを用意します。
navi.jsファイルの内容
document.write('<h3>Navigation</h3>');
        document.write('<ul>');
            document.write('<li><a href="./index.html">HOME</a></li>');
            document.write('<li><a href="./ht5-1.html">HTML5</a></li>');
            document.write('<li><a href="./css3-1.html">CSS3</a></li>');
            document.write('<li><a href="./js-1.html">JavaScript</a></li>');
        document.write('</ul>');
読み込む側の記述例
<nav>
        <script src="./navi.js"></script>
    </nav>
以下のようにどのページにも反映されるはずです。すでに10ページ分ほど試したので大丈夫です。

Navigation

ここまでは試してみたので、大丈夫なのですが、読み込む時の記述が問題なのです。この部分はまだ充分に理解していないのでどうしようかと迷っているのであります。通常は以下のように書くようです。
<script language="JavaScript">
<!--
ここにJavaScriptを書き込む
// -->
</script>
この書き方が正しいようなのですが、今のところ動作していますので、なにか不具合が起きた場合には置き換えすることにします。

余談 効率だけを追求してはいけません
 JavaScriptやCSSを使用して効率を追求する方法を紹介してきましたが、最初はあまり効率を追求してはいけません。愚直にいちいち手作業で何十回、何百箇所を訂正したり追加したり削除したりの作業を行うことを薦めます。一見すると非効率のようでありますが、最終的に自分の技倆を向上させることになります。
 人は頭だけでは技術を習得できません。特に私のような凡庸なものにとっては特にそう思います。だから数限りない反復訓練が必要なのです。よって、一見して不合理で非効率な作業を繰り返すことによって最終的には自分の身体の芯に刻み込むことができるのだと信じています。