ASUSのK53U

先日、父親のASUSのK53U ラップトップパソコンが少し調子が悪いと言うので、少しクリーンにしてやろうと自宅に持ち帰った。
良くある使っていると何となく起動に時間がかかったり、起動時に見知らぬメッセージウインドウが現れたりと言うアレだ。

『モジュール”C:\ProgramData\×××.dat”の読み込みに失敗しました。バイナリが指定されたパスに格納されていることを確認するか、バイナリまたは依存.DLLファイルに問題がないか調べてください。』

『パソコンが少し調子が悪い』最も面倒な症状は『モジュール”C:\ProgramData\×××.dat”の読み込みに失敗しました。バイナリが指定されたパスに格納されていることを確認するか、バイナリまたは依存.DLLファイルに問題がないか調べてください。』的な起動時のエラーメッセージだ。
何かが何かを呼ぼうとして失敗しているようだが、ネット上を探してもダイレクトな答えは得られなかった。

不要な起動項目を全て停止を試みるためにmicrosoftの『Autoruns』をダウンロードした。
このソフトは良く出来たソフトであったが、私の使い方に不注意があった。
一覧に並んだ起動項目の中からmicrosoftの名のついていない項目を適当に削除したのだ。
まあ、何か致命的な問題が起こればリカバリーすれば良いと考えていたので、バックアップも停止も試みず、即削除を行った。

『runtime error 216 』

結果は悲惨なものだった。
起動はするものの、このことによってすべてのネットワークが接続不可能となってしまったのだ。
この時目にしたエラーは『runtime error 216 』。
エラーメッセージを検索すると直ぐにヒットしたのが、『エラー メッセージ "Runtime Error 216" が表示される』 のmicrosoftのサポートページだ。

このページでは、ウイルスに感染している・・・云々の情報が書かれていたが、それは無いだろうと思い他を探す。
他にも幾つか情報は見つかったが、どれも解決に至るものは無かった。
仕方無くシステムをリカバリしようと考え、作成済みだったRecovery DVDで起動を試みる。
ASUS K53Uのリカバリー方法は以下のページでも記されているように単純なものだ。
http://detail.chiebukuro.yahoo.co.jp/qa/question_detail/q10111886785

最近のコンピュータはDVDなど外部メディアからのリカバリーと内蔵ハードディスクのリカバリー領域を使用する方法がある。
最初に試したのが外部メディアのリカバリーDVDだ。
しかし、このDVDの起動が上手くいかない!
DVDからの起動やBIOSの起動は簡単なはずじゃないか!
何故こんな簡単なことが上手くいかないんだ。
DVDは読みに行くが、有効なリカバリーデータが無いと言う。

次に内蔵ハードディスクのリカバリー領域を試すことにした。
しかし起動中に<F9> キーを押しても、リカバリープロセスに入れないのだ。
Recovery DVDも内部リカバリー領域も使えない。
途方に暮れてしまった。。

ネットを探しても有効な手立ては見つからなかった。
何度も何度も試み、諦めかけていた時、他の機種の情報ではあったが『連打をすれば・・』と都市伝説のような投稿を見つけた。
勿論期待などはしていなかった。

連打と 『Windows Setup [EMS Enabled]』

起動後ASUSロゴが表示されている時に、<F9> キーを連打!するのだ。
その時、待ち望んでいた『Windows Setup [EMS Enabled]』が表示された。
まさか、このような方法で、、、。
かくして無事セットアッププロセスが起動し、ASUS K53Uのリカバリーは成功した。

BIOS起動ももしかすれば連打すれば良いのだろうか?

Chatterの投稿を集めてgoogleのspreadsheetに集計する。

、といってもChatterは無料ユーザーなのでChatter APIの利用ができないため、Chatterが翌日にメール送信する前日の投稿まとめをgmailから抜き出してリスト化すると言った、ベタなやり方です。

function getMail(){

  var ss = SpreadsheetApp.openById(SpreadsheetApp.getActiveSpreadsheet().getId());
  var mySheet = ss.getSheetByName("Sheet1"); 
  var thds = GmailApp.getInboxThreads(1,30);
  var today = new Date();
  var row = 2;

  for(var n in thds){
    var thd = thds[n];
    var msgs = thd.getMessages();

        for(m in msgs){
          var msg = msgs[m];
          var from = msg.getFrom();
          var to = msg.getTo();
          var date = msg.getDate();
          var subject = msg.getSubject();
          var body = msg.getBody();               

          if(subject.indexOf("[更新情報]")!=-1 && date.getDay() == today.getDay()){ //今日だけ抽出
          //if(subject.indexOf("[更新情報]")!=-1){
            var sepBody = body.split("<tr>");
            var messageCount = sepBody.length; //分割配列数を取得
            mySheet.insertRowsBefore(2, messageCount);//メッセージ数分の行を先頭に挿入         
            mySheet.getRange(row,1).setValue(date);
             
              for(var i = 1 ;i < messageCount ; i++){
                var result = sepBody[i].replace(/<("[^"]*"|'[^']*'|[^'">])*>|[\n\r]/g,'');//タグ削除
                result = result.replace(/コメント/g,'');
                result = result.replace(/\D曜日,/g,' ');
                result = result.replace(/●/g," ●").replace(/■/g," ■").replace(/・/g," ・").replace(/\\\\/g," \\\\").replace(/※/g," ※");

                //人名処理
                //var name= "/|AAAA|BBBB|CCCC/g";
                var reName = result.match(|AAAA|BBBB|CCCC/g);
                mySheet.getRange(row,1).setValue(reName);
              //result = result.replace(name,'');
              result = result.replace(|AAAA|BBBB|CCCC/g,'');
              result = result.replace(/ さんがいいね! と言っています。/,'いいね! と言っています。');
                
                //時間処理
                var reDaate = result.match(/\d{4}\/\d{2}\/\d{2}\s\d{1,2}:\d{1,2}/g);
                result = result.replace(/\d{4}\/\d{2}\/\d{2}\s\d{1,2}:\d{1,2}/g,'');
                mySheet.getRange(row,2).setValue(reDaate);
              
                var cutPoint = result.indexOf('このメールは',0);
                if(cutPoint != -1){
                  result = result.substr(0,cutPoint);
               }              
                mySheet.getRange(row,3).setValue(result);
                row++;
              }              
              row++;
           }  
          Utilities.sleep(1000) ;
        }
    }
  }

 

 

最近タスク管理にgoogleDriveを利用している。
今まで、MicrosoftProjectなども試したがあまり実用的とも言えなかった。

昨今の脱ウォーターフロー開発モデルからアジャイル開発・・・などでは無いが、
所詮現場は何時でも混乱している。
必要な手法はプロジェクトの計画立案、実施、検証であるが、作業実施時に混乱したタスクとスケジュールの追跡は大変だ。
せめて、連絡だけはスムーズに行いたい。

実際googleDriveは共有環境構築も最も効率良く出来ている。
Google Apps Scriptを利用すれば、全てのgoogleサービスを自由に(効率良く)?操ることが可能だ。
プログラマでは無い私には無理だが、今回少しでもスタッフの手助けになればと、googleSpreadsheetに構築しているタスクシートから当日タスクを抜き出して、別シートにコピーし、メール送信するプログラムを組んでみた。

ループ内で直接getRangeなどしているために非常に処理は遅いが、夜中にトリガーを使って動かせばよいので、ここまで。

先ずは自身のために覚書です。

PS.しかし、googleはやってくれる。Javascriptをここまでフィーチャーしてくれるとは。
こんなに使えるサーバーサイドJavascript、勉強するなら今でしょ。

function copyTodaysTask(){ 

/*sheet1の期限に本日があればsheet2へコピーする。*/

  var sheetName ="シート名";
  var colrow = "A:H";
  var outputSheet1 = "today";
  var row=1;//行詰めでセットするためのカウンタ
  var limitDay;

  var deadlineCol = 7;  //終了日のある列
  var today =  Math.floor(new Date().getTime()/1000/24/60/60)-1;

  var resource =5;
  var exceptions =["除外1","除外2"];

  var ss = SpreadsheetApp.openById(SpreadsheetApp.getActiveSpreadsheet().getId());
  var sheet1 = ss.getSheetByName(sheetName); 
  var sheet2 = ss.getSheetByName(outputSheet1);

  var lastRow =sheet1.getLastRow();
  var resourceCheck ;

  //clear sheet
  sheet2.clear();

  //最終行までループ

  for (var i=1 ; i <= lastRow; i++){
    limitDay=Math.floor(sheet1.getRange(i,deadlineCol).getValue()/1000/24/60/60);
    esourceCheck=sheet1.getRange(i,resource).getValue();    

    if (limitDay == today){      

      if (exceptions.indexOf(resourceCheck)== -1 ){
        for (var ii = 1; ii <= 8; ii++){
          sheet2.getRange(row,ii).setValue(sheet1.getRange(i,ii).getValue());
        }
      }else{
        row--;
      }
      row++;   
    }

  }

}

 

 

function mail(){

  var outputSheet1 = "today";
  var ss = SpreadsheetApp.openById(SpreadsheetApp.getActiveSpreadsheet().getId());
  var sheet2 = ss.getSheetByName(outputSheet1);
  var cell = sheet2.getRange('A1');
  var today = Utilities.formatDate(new Date(), "Asia/Tokyo", "yyyy/MM/dd");

  // offset計算のため値を1減算
  var ticketName = 2;
  var period = 6;
  var worker = 4;

  //送信先
  var mailAdress = "This email address is being protected from spambots. You need JavaScript enabled to view it.";  // カンマ区切りで複数アドレス指定可

  var message="------------------------------------------------\n";

  if (lastRow==0){
    message+="本日の作業はありません。\n"
  }else{
    for (var i=1 ; i <= lastRow; i++){
      message+=cell.offset(i-1,0).getValue()+":"+
         "   作業者:"+cell.offset(i-1,worker).getValue()+  
        "   チケット名:"+cell.offset(i-1,ticketName).getValue()+"\n";
    }   
  }

  message+="------------------------------------------------\n";
  message+="Have a nice day!\n"; 

  MailApp.sendEmail(mailAdress, "件名", message); 

}

 

疑問点

  1. 以下シリアル値の末値が1日のうちで変わる(変わる)のは何故か?
    var today =  Math.floor(new Date().getTime()/1000/24/60/60); 
  2. googleSpreadsheet filterの操作
    SpreadsheetのフィルタをScriptでON/OFFするには?
  3. google apps scriptはタイムアウトがあるので要処理時間短縮

参考サイト


 

上記の方法ではループ内の処理が多く、終了までに時間がかかっていたため、シートデータをすべて配列に読み込む処理に変更。

多分1/100以下の処理時間になったはず・・・。

開始と終了を同時に別の1シートに書き出し、メールで送る処理に変更。

 
function getStartEnd() {

var masterSheet ="スケジュールマスタ";
var outputSheet2 = "本日開始&終了タスク";
var ss = SpreadsheetApp.getActiveSpreadsheet();
var sheet = ss.getSheetByName(masterSheet);
var sheet2 = ss.getSheetByName(outputSheet2);
var lastRow =sheet.getLastRow();
var today = Math.floor(new Date().getTime()/1000/24/60/60)-1;
var exceptions =["除外1","除外2"];
var limitDay;
var row=1;//行詰めでセットするためのカウンタ


// 配列に全データ
var Values= sheet.getDataRange().getValues();

//clear sheet
sheet2.clear();


sheet2.getRange(row++,3).setValue("本日開始タスク").setBackgroundColor("#CEF");

//本日開始タスク抽出
for (var i=1 ; i <= lastRow; i++){

limitDay=Math.floor(Values[i-1][6]/1000/24/60/60);

if ((limitDay == today) && (exceptions.indexOf(Values[i-1][4])== -1 )){
for (var ii = 1; ii <= 8; ii++){
sheet2.getRange(row,ii).setValue(Values[i-1][ii-1]);
}
}else{
row--;
}
row++; 

} 

//行開け
row++;


sheet2.getRange(row++,3).setValue("本日終了タスク").setBackgroundColor("#CEF");

//本日終了タスク抽出
for (var i=1 ; i <= lastRow; i++){

limitDay=Math.floor(Values[i-1][5]/1000/24/60/60);

if ((limitDay == today) && (exceptions.indexOf(Values[i-1][4])== -1 )){
for (var ii = 1; ii <= 8; ii++){
sheet2.getRange(row,ii).setValue(Values[i-1][ii-1]);
}
}else{
row--;
}
row++; 

}

}

 

 

それに伴ってメール送信も少し変更

 

function mail2(){


var outputSheet1 = "本日開始&終了タスク"; 

var ss = SpreadsheetApp.openById(SpreadsheetApp.getActiveSpreadsheet().getId());
var sheet1 = ss.getSheetByName(outputSheet1);
var today = Utilities.formatDate(new Date(), "Asia/Tokyo", "yyyy/MM/dd");

// offset計算のため値を1減算
var ticketName = 2;
var worker = 4;

var mailAdress = "This email address is being protected from spambots. You need JavaScript enabled to view it."; //送信先
var lastRow1 =sheet1.getLastRow();

var Values= sheet1.getDataRange().getValues();

var message="お疲れ様です。本日予定のタスクリストを配信します。\n\n";

if (lastRow1==0){
message+="本日の作業はありません。\n"
}else{
for (var i=1 ; i <= lastRow1; i++){
if(Values[i-1][0] != ""){
message+=Values[i-1][0]+":"+" 作業者:"+Values[i-1][worker]+" チケット名:"+Values[i-1][ticketName]+"\n";
}else if(Values[i-1][2] == "本日開始タスク"){
 message+="● 以下のリストは"+today+" 開始タスクです。\n";
message+="------------------------------------------------\n";
}else if(Values[i-1][2] == "本日終了タスク"){
 message+="● 以下のリストは"+today+" 終了タスクです。\n";
message+="------------------------------------------------\n";
}else{
 message+="\n";
}
}
i++;
}

message+="------------------------------------------------\n";
message+="\n";
message+="Have a nice day!\n";

MailApp.sendEmail(mailAdress, "【" +today+ "】予定(開始&終了)タスク", message);

}

 

私自身はgoogle崇拝者でもgoogleエバンジェリストでも無いが、多くのgoogleサービスを仕事に取り入れている。
参加しているプロジェクトへのgoogle導入にも力を入れていて、過去2年間にgmailやgoogleDoc(現googleDrive)の導入を強力に推し進めてきた。

googleを導入する大きな理由は以下である。 

単純だけと迷ったので覚書。

FLASHで多数のインスタンスをaddChild するときはループを良く使う。

2重ループを使って発生させることも良くあるが、addChild 後の個別の制御は、思ったほどシンプルには出来ない。。。

4つのインスタンスをライブラリィでリンケージ設定しているシンボルからaddChild し、その後、動かすサンプル。

 

//////////////////////基本描画
function drawObj(){

    for (var n=1; n <= 2; n++) {
       
        for (var i=0; i <= 1; i++) {

 
            ClassReference = getDefinitionByName("Obj" + i) as Class;
            var Obj:Object = new ClassReference();

            ObjScreen.addChild (Sprite(Obj));
           
            //適当に座標設定 
            Obj.x = i*100+(n*300) ;
            Obj.y = i*100;


        }
       

    }

}

//////////////////////アニメーション
function moveObj(){

    addEventListener(Event.ENTER_FRAME, myEnterFrame);
    var countUp:int = 1;
    var i;
    var Obj;

    function myEnterFrame(event:Event) {

           
            for (i=0; i <= 1; i++) {
               
                        Obj = ObjScreen.getChildAt(i);

                        Obj.y += countUp; //適当に動かす
    
    
            }
           
           
            for (i=2; i <= 3; i++) {
               
                        Obj = ObjScreen.getChildAt(i);

                        Obj.y += countUp*5; //適当に動かす
                        
            }

     }
}

PS.ちなみに確認は、

trace(ObjScreen.getChildIndex(Obj),Obj.x,Obj.y);

Subversionといえば開発現場で利用するバージョン管理システム。

一般の人にファイル名の命名規則の統一や一元管理、バージョン管理などの説明を熱くしても、煙たがれるのがおちだ。

実際、開発現場のプログラマーですら気に留めていないこともある。

しかしファイルのバージョン管理は大切だ。

私などは1人で制作作業をしているときですら、SVNのお世話になっている。

以前はSVN-Monitoなるものを利用していたが、どう言う訳か開発がストップしサイトが消えてしまった。

随分と使い勝手の良いソフトだったが、ソースコードに何かライセンス的な問題があったのか、、消えてしまったのだ。

そこで僕が今利用しているのはCommitMonitor

その前の通り、コミットをモニターして知らせてくれる常駐型のアプリケーションだ。

https://code.google.com/p/commitmonitor/

長い間「WEB上で共有編集できるプロジェクト管理ソフト」を探している、もちろんフリーだ。

簡単なようで中々見つからない。 『GanttProject』なども中々良いが、共有ができない。

『OpenProj』は良くできているらしいが重くてレスポンスに難があるらしい。凡そ日本語しているらしいが、色々な人が参加するプロジェクトでは完全日本語がありがたい。

システムが高機能なほど、日本語への対応は不可欠だ。

『Trac』は高機能らしいが、インストールが面倒そうだ。

『redmine』は評判も良いが、なぜRubyなんだ。。

『gantter』 は“Gantter is a FREE web-based project management tool.”と紹介されているように、ブラウザベースのプロジェクト管理ソフトだ。
特に“google docs integration”と謳われているように、google docsとの親和性が高い。おまけに“Available in 11 languages”の中には日本語も含まれているし、ChromeとFFではエクステンション化されているので便利さMAXだ。
しかし、ガントチャートの吐き出しファイルを直接編集できない。。

プロジェクト管理ソフト」を探しのたびは続く。

フローチャート(流れ図)を書くのはとても難しい。
職業柄、色々とフローチャートを描く。
WEBサイトのフローチャート、ゲームのフローチャート、ビジネスモデルのフローチャート、その他色々。

フローチャートはその企画者の頭の中の思考を描くようなもので、どれほど考え(アイデア)が構造化されているか、またその思考を紙の上に記述(表現)できるかという2つの重要な要素が関係している。
どちらにしてもフローチャートは『設計図』そのものなので、フローチャートのできが悪いと理解やそのシステムの構築に非常な努力を要することがある。

そう、フローチャートは極めて重要なのだ。
しかし、このフローチャート、JIS企画の記号を間違い無く使い分ければ良いという訳ではない。
私自信フローチャート記述に重要要素は以下の4つだと考えている。

  1. 線の方向

    • システム設計のフローチャートなどでは条件分岐で元の位置戻るような線も存在するが、これは極力避けた方が良い。可能な限り、表現とレイアウトを工夫して一方向にフロー(流れる)ように。
      (オブジェクト処理ではフローチャートの記述そのものが不可能と思えることも多い。)
  2. 用紙の方向と大きさ

    • フローチャートは基本的に1枚の紙に収めること。
      もちろん大型のシステムでは無理なこともあるが、その場合はフロー概要を1枚にまとめて、詳細は別紙にする。
      紙のサイズはA4からA3くらいが良いだろう。
      用紙の方向は基本的に横方向だが、次の『フローの方向』とも関係し、縦方向でも可。
  3. フローの方向

    • これは非常に重要。通常のフローチャートは上から下又は左から右のパターンが多いが、システムの基本概念と一致させることが大切。例えば、何かが解決するイメージなら、上から下。何か良くなって行くイメージなら下から上なんて言うのも良いかも知れない。
      気を付けなければならないのは左から右へのフローチャート。情報記述の優先順位しては、左と上と右と下では明確な順位が存在する。つまり横方向のレイアウトの場合はフローの記述と用紙の上下、左右が完全に一致していないと、読んでいて混乱が生じる。 重要でも無い要素が上に位置したりすると何が何だか解らなくなる。
      (記述の場所が無くなって、適当に配置したりすると、、もう大変。)
  4. シンボルの描き分け

    • シンボルは描き分け過ぎない方が良い。
      共通の処理や概念は共通のシンボルを利用するのが良いが、たとえ描き分けがなくても理解できるように『流れ』を作る必要がある。


しかし、何故フローチャートが必要か?
それは他の人に対してシステムや作業の流れを説明するためである。
しかし、、、しかし、オブジェクト的な処理やプログラミングなど、実際には既存のフローチャートで記述することは無理で、新たな方策が求められている。

ActionScript 3.0は以前のバージョンとは別の言語になったといっても良い。
どこにでも書けたスクリプトはフレームと外部ファイルに統一され、on()やonClicEvent()といったイベントハンドラは使用できなくなった。
もちろん互換もナシ。

このあたりの情報、Adobeのヘルプを見ても読む気にもならないし、、簡潔に公開されていないため、ちょっと覚書。
ActionScript 1.0、2.0しか知らない人のための最初の第一歩。ボタンの作り方です。

イベントリスナー

イベント処理のためにはイベントリスナーを利用しなければならない。
処理の手順は「イベントリスナーの登録」、「イベントリスナーの定義」の二つの記述を行う必要がある。

 

  • イベントリスナーの登録
    オブジェクト.addEventListener(イベントタイプ,リスナー関数,キャプチャでの動作,優先度,弱参照するか);
    ※弱参照とはガベージコレクタの対象にするかということ。
    実際の記述
    bt_stop.addEventListener(MouseEvent.CLICK,StopBtHandler);
  • イベントリスナーの定義(イベント発生時の処理)
    function リスナー関数(イベント) {
               //処理
    this.stop();
    }
    実際の記述
    function StopBtHandler(MouseEvent) {
    this.stop();
    }

実際どうするの

と、このように書くと、普通の解説で結局分かりにくいので、省略できるものは省略して、ボタンの作り方をpdfファイルにしました。詳しい解説は他の人に任せます。

SEOと言えばもちろん Search engine optimization のこと。
簡単には希望する検索キーワードでどれだけ高順位で表示させるかだ。
初耳の人はwikiでも調べてほしい。



現在ではSEO業者も多く様々なSEOテクニックがネット上に溢れている。
私が始めてSEOを意識したのは1997年頃。もちろんSEOという言葉も無くて、その頃のyahooは単純なインデックス型の検索エンジンだった。
登録されたサイトはサイト名が昇順で並ぶだけだった。
そこで考えたのが、サイトタイトルにキャッチフレーズを付けて一番上に持って行こう、と言うものだった。
考えたタイトルは「Acrivアクティブ××××」。

 

これならアルファベットの「A」が最初、アルファベットで引っかからなくても50音の最初の「ア」を使っている。。
そう、こんな単純な方法も今は昔の話。

現在最も有効なSEOは何か。
それは簡単で、「毎日、ブログやサイトページに手を入れ、良質な情報をネットに展開する」ことだ。
、と書いてしまえば、簡単すぎるので、もう少し詳しく解説する。

 

SEO業者のセールストーク


SEO業者の多くが順位アップを確約する。
しかし順位アップを確約するような業者は、先ず怪しい。
なぜなら、検索順位をアップできる=検索アルゴリズムを知っている となるが、検索エンジンにとって検索アルゴリズムは命であり、広告掲示によって収益を上げていることから考えても、アルゴリズムは知られてはならないものだ。
もちろん、そんな簡単に推測できるものでも無いはずである。
もし私なら、アルゴリズムを絶対に知られないようにスコアの近いサイトにはパラメーターに若干の乱数を加味するだろう。固定化しないように、複数のアルゴリズムを切り替えるのも良いかも知れない。
(実際にはパラメーターの優先を変えるだけで良いかも知れないが。)
つまり、個人的に検索順位は確約できないと思っている。

 

実際にSEO業者が順位を向上可能な手法

それではSEO業者が行える順位向上可能な方法は何が考えられるか。

 

  1. リンクによるページランクアップ
    数多くのサイトを展開している大手が、順位を上げるためにリンクを設定すること概ね順位は上がるだろう。
    もちろん契約期間中だけ。しかし、yahoo!やgoogleもバカでは無いと思うので、たとえ大手のSEOサービスと言っても、リンクファーム的ページは排除するだろう。
    (あらゆる関連サイトにリンク依頼するのは正当な方法なのでOK)
  2. 内部リンクの充実。(案外手間がかかる)
  3. 検索件数の少ないキーワードに対しての最適化
    意味の無い検索キーワードを押し付けて、順位が上がりましたよ、と報告するSEO業者はもちろんNGだ。
    ワン・ワード(ビッグワード)だけの検索順位の向上も、マーケティング的には意味が無い。
  4. ソースを綺麗に
    少しは効果があるかも知れないが、ソースの美しさと情報の有用性は一致しないので、yahoo!やgoogleもそんな項目に高ポイントを与えはしないだろう。
  5. yahooのビジネスエクスプレス申請(有料だけど)
    Yahooの登録掲載サイトで無いのであればビジネスエクスプレスで申請する。ロボット型のインデックスに多少の効果は与えるだろう。
  6. googleのアドワーズ(これも有料だけど)
  7. サイトサマリーの設置
    サイトマップやRSSの設置を行うと、これも多少の向上が期待できる。
  8. 契約期間中の頻繁な更新
    これはかなり効果が高いだろう。
  9. 他のサイトへのトラックバック、コメントの書き込みなど
  10. プレスリリースの発行
    大手のサイトにプレスリリースが掲載されたら、、中々向上が望めるんじゃないかな。
  11. ネットの世界で暗躍する。
    All About(オールアバウト)http://japan.cnet.com/でブロガーになる。(かなり知識と根性がいる)
    2chで書き込む。(これは危険。素人はご法度、もしやるなら、友人に口頭で依頼するのが良いだろう)
    wikipediaに書き込む。(これはもっと危険。素人はご法度、もしやるなら、友人に口頭で依頼するのが良いだろう)
  12. やはりコンテンツ(情報)ほど重要なものは無い。
    コンテンツを充実させるのが最も効果があり、安定性が高い。

 

私がSEOを依頼されたときの作業

最も大切なことは順位とアクセスをアップさせることではなく、
「ターゲットユーザーに対して露出し、かつ、必要としている行動をとらせる」ことだ。
この言葉には大きく二つのポイントが含まれている。それはサイト運営が誰に対して、何をさせたいのかと言ったことである。先ず、このことを明確にしない限りサイトの目的は達成できないだろう。

 

  1. ターゲットユーザーの明確化
  2. そのユーザーに期待する行動を明確にする
  3. そのユーザーの行動を推測する
  4. キーワードの再選定
  5. 柔軟なキーワード選定
  6. サーバーのチェック
  7. 頻繁にアップデート
  8. 裏口を整備する
  9. コンテンツの文言修正
  10. 内部リンクを充実させる
  11. できれば外部リンクを充実させる
  12. 各検索エンジンに同様の効果を期待しない
  13. クライアントの協力が必要不可欠であると伝える
  14. 努力して、一喜一憂しない

 

SEOサイト運営の参考になれば幸いです。

「ドメインの基礎と最新情報」ドメインという商品ネーミング

ユーザビリティ

「ページデザイン講座」

「ページデザイン講座2」HTMLとCSSによるデザイン

「動画コンテンツの配信方法の基本 」

Illustratorでアイメトリック図を描く基礎知識

テンプレート

レイアウト

公募展出品

Illustrator&Photoshopを利用した缶デザインCGの制作

Dreamweaverサイト定義MX

色カラーイメージの書込みシート

絵コンテ用紙

 

通常、FLASHのswfの前面にレイヤーを配置しても、実際にはFLASHの後に隠れてしまう現象が発生する。
例えばFLASHコンテンツの上部にHTMLでプルダウンメニューを作成した場合など、表示されたレイヤーがFLASHの後に隠れてしまうのだ。
これを回避する方法を覚書。 swfを配置している領域と前面配置の領域に適切な z-index を指定する。

例えばswfには、
#flash{
   z-index: -1;
}

前面のレイヤーには、
#myMenu{
    z-index: 9999;
}

など、

swf配置のパラメータには wmode=transparent を指定する。

実際の記述方法はAC_RunActiveContent.jsを使用した場合 、

-----
"quality","high", "src","general_head", "pluginspage","http://www.macromedia.com/go/getflashplayer", "type","application/x-shockwave-flash", "wmode","transparent")

embedタグの場合、

< embed pluginspage="http://www.macromedia.com/go/getflashplayer" src="/general_head.swf" width="654" height="383" type="application/x-shockwave-flash" wmode="transparent" quality="high" />