よくいる文系プログラマの戯言

プライベートでの開発を適当に書き留めます

W3Cで標準化されているもの

W3Cが標準化してるものは、大きく分けて以下の7つあるようです。

  • Web Design and Applications
  • Web Architecture
  • Semantic Web
  • XML Technology
  • Web of Services
  • Web of Devices
  • Browsers and Authoring Tools

一つ一つ見てみましょう。

Web Design and Applications

ウェブページのレンダリングに関わる部分を扱っています。HTML, CSS, SVG, JavaScriptのDOM APIとかですね。 それ以外にも、数学的な表記の仕方やWCAG、コンテンツの多言語化、モバイルデバイスでの動きに関する情報などが載っています。

WCAGとは、Web Content Accessibility Guidelinesの略で、子どもや高齢者、目が見えなかったりといった障碍者の方にもよりWebページ・Webアプリが使用しやすいようにつくるためのガイドラインをまとめたものです。

Web Architecture

URIやHTTPの仕組み等、Webを支える上でベースとなるテクノロジーや原則についてまとめています。

Semantic Web

セマンティックウェブというと、HTML5の規格に従ったマークアップによってよりHTMLファイルが分かりやすく意味を持って構造化するためのツール、という文脈で語られることが多い気がしますが、W3Cの表現の仕方はすこしこじゃれていますね。 Webの究極的な目標は、コンピューターがより良く動作し、ネットワークを超えたインタラクションを保障するシステムが開発できるようになること。セマンティックウェブという言葉は、そのW3Cのビジョンを示すものであると……。 セマンティックウェブによって、Web上にデータをつくり、それらを扱うための仕組みを作ることができる。少し抽象的ですが、面白い考え方ですね。

例としてRDF, SPARWL, OWL, SKOSなどが挙っていますが、このあたりは追々説明していきましょう。

XML Technology

表題通り、XMLに関わる技術の標準化について書かれています。

Web of Services

Web APIを提供する上で必要なHTTPやSOAPの規格づくりについてです。 SOAP v.s. RESTのくだりなんかは「Webを支える技術」っていう本にも出ていたりして結構面白いです。 最近注目されているらしいクエリ言語SPARQLなんかの標準かもやっているようですね。 →オープンデータ活用のためのクエリ言語SPARQLが、いま注目される理由

Webを支える技術 -HTTP、URI、HTML、そしてREST (WEB+DB PRESS plus)

Webを支える技術 -HTTP、URI、HTML、そしてREST (WEB+DB PRESS plus)

Web of Devices

どこでもWebにアクセス出来るようにするために、プリンターやインタラクティブなテレビ、自動車周りの技術の標準化を進めています。

Browsers and Authoring Tools

こちらではハードだけでなく、ブラウザーやメディアプレイヤーといったものに関する標準化を行っています。


今後はこの中から、ドラフトが頻繁に出ているっぽいところを中心に取り上げていこうと思います。

本日の参考URL : Standards - W3C

Gitを学ぶ

先日研修で初めて共同開発したとき、自分のGitおよびGithubについての知識のなさに危機感を覚えたのでメモ。

オススメのサイト

スッと探してみたところ、すぐに良さげなサイトが見つかった
Gitを使いこなすための20のコマンド | SourceForge.JP Magazine

でもこれ、普段使ってるgit fetchすら載っていない超基礎なサイト。 流れが分かりやすいから素晴らしいんだけども。

その代わりに良さそうなのがこれ。
一通り読めば大体何が出来るか分かるし、何かしたいことがあれば、ここを見て応用していくと良さそう。 →transitive.info - Git 使い方 見出し一覧

Railsでシンプルにデバッグする方法

Rails初心者なんですが、Modelでちょっと込み入ったロジック書きたかったんで、デバッグ方法をちょっと調べてみました。 ModelでもControllerでも

logger.debug 'hogehoge'

で、ページをロードしたときにターミナルの方にhogehogeと表示できるようにします。

と言ってもやり方はシンプルで、

—Controller デフォルトで使えます。

—Model

# config/environments/development.rb
config.active_record.logger = Logger.new(STDOUT)

とやってしまえばすぐに使えます。

ついでにlogger.info(Assetsのロードとか)も邪魔なので、

# config/environments/development.rb
config.log_level = :warn

ってな風に変えてしまいました。

こうすると、ControllerやModelのlogger.debugの中身を変えない限り、SQLの情報しかでなくなります。 logger.debugの中身を変えるとちゃんと変更点が出るようになっているんですが、これはどっかにキャッシュされてるのが原因なんですかね。勉強不足でよくわからんですが、とりあえずこれで開発を進めていきます。

【定番】本格的な初心者によるmod_rewriteのハマり方

普通に数日間ハマっていたところの簡単なメモ。

mod_rewriteを有効にするためには、CakePHPのCookbookを参考にすればいいと思います。(丸投げ)

僕がハマったところは、3のところです。 内の記述を、最初httpd.confに書いていました(どーん)

どちらかというと、このドキュメントの内容を読み取れなかった国語力のほうに問題がある気がしますが、これを書くのは..htaccessのほうです!

.htaccess

../cake ../cake/app ../cake/app/webroot

の三カ所に配置しておかなければなりません。

以上に注意すれば、難なくmod_rewriteを有効化することが出来ると思います。

カスタム投稿にWP_PageNaviをあててハマったところ

2ページ目以降で、have_pots()がfalseを返す問題

こちらの記事を参考にしました↓↓ 固定ページにカスタム投稿タイプのアーカイブを表示する

Post Typeを指定するところの、

<?php
    $wp_query = new WP_Query( 
        array( 
            'post_type' => 'music', 
            'posts_per_page' => 1 ) 
        );

と書くところで、$wp_queryを$loopとかにしちゃうとエラーが出ちゃうよって話みたいです。

なぜかカスタム投稿タイプがpostだと固定ページで表示されない

固定ページで表示しようとしても、固定ページで書いた通りになってしまい、テンプレートを読み込んでくれない、みたいなことが起こりました。

解決手段としては、テンプレートのファイル名をカスタム投稿タイプのスラッグと同じにするといけるみたいです。

初めてWordPressでオリジナルテーマを作りながらハマったところ::その1

ここ数日、初めてWordPressでオリジナルテーマを制作しています。 比較的スムーズにいっているですが、ハマったところもいくつかあったので、メモしておきます。

①カスタム投稿のリンク無しタクソノミー出力

<?php
while ( $music->have_posts() ) : $music->the_post(); 
    $terms = get_the_terms($post->ID, 'classify2');
    foreach ($terms as $term) {
        $taxonomy = $term->name;
    }

色々調べたんですが、うまくいかなかったので、Codex見ながら我流で書きました。(とても簡単に書けました。)

最初は、the_taxonomies(); で出力したんですが、「○○の分類:」とかが頭についてしまい、しかもそれをうまく消せなかったので(ただ技術がないだけかもしれない)、断念。 次に、get_the_term_list(); を使おうとするも、ごにょごにょやってもうまくいかない。

で、最終的にこうなりました。

ここに至るまでも、「タクソノミー名」がいまいち何たるかわからなかったんですが、 「Custom Post Types」というプラグインでいうところの、「分類名」であることを把握して何とか事なきを得ました。

②カスタム投稿タイプのラベル名の変更

カスタム投稿の話なので、ついでに記録。 バラバラの投稿タイプで投稿されたものを一カ所に更新情報として表示させようとしたときの問題。

<article class="notice02">
    <h2>What's New</h2>

    <?php
    $args = array(
        'numberposts' => 5,
        'orderby' => 'post_date',
        'order' => 'DESC',
        'post_type' => 'any'
    );
    $postslist = get_posts( $args );
    foreach ($postslist as $post) :  setup_postdata($post); ?>
        <?php $category = esc_html(get_post_type_object(get_post_type())->label ); ?>
        <ul>
            <li><time><?php the_time('Y/m/d'); ?></time></li>
            <li class="label02"><a href="<?php echo $category; ?>/"><?php echo $category; ?></a></li>
            <li class="updates01"><a href="<?php echo $category; ?>/"><?php trim_str_by_chars( get_the_title(), 12 ); ?></a>を更新しました。</li>
        </ul>
    <?php endforeach; ?>    

</article>

普通に出力すると、通常のブログとして表示させようとしたところのラベル名が「投稿」になってしまい、よくない。 ので、functions.phpにこう書きました。

<?php
//デフォルトの「投稿」と「固定ページ」の変更
add_action( 'init', 'rev_post_type' );
function rev_post_type() {
    register_post_type( 'post', /* post-type */
        array(
            'labels' => array(
            'name' => __('BLOG'),
            'singular_name' => __('BLOG')
        ),
        'public' => true,
        'menu_position' =>5,
        'rewrite' => array('slug' => 'blog')
        )
    );
}

スラッグも一緒に変えないと、あとで大変な事になります。

③the_excerpt(); とかタイトルの長さを変えたりする

the_excerpt(); のカスタマイズには「Advanced Excerpt」というのを使いました。非常に便利です。 タイトルの長さを変えるのは、以下のように書きました。

<?php
function trim_str_by_chars( $str, $len, $echo = true, $suffix = '...', $encoding = 'UTF-8' ) {
    if ( ! function_exists( 'mb_substr' ) || ! function_exists( 'mb_strlen' ) ) {
        return $str;
    }
    $len = (int)$len;
    if ( mb_strlen( $str = wp_specialchars_decode( strip_tags( $str ), ENT_QUOTES, $encoding ), $encoding ) > $len ) {
        $str = wp_specialchars( mb_substr( $str, 0, $len, $encoding ) . $suffix );
    }
    if ( $echo ) {
        echo $str;
    } else {
        return $str;
    }
}

で、出力はこう↓↓

<?php
trim_str_by_chars( get_the_title(), 12 );

④新しい投稿に「NEW!」をつける機能

<?php
function newPost() {
    $days = 7; //Newを表示させたい期間の日数
    $today = date_i18n('U');
    $entry = get_the_time('U');
    $kiji = date('U',($today - $entry)) / 86400 ;
    if( $days > $kiji ){ echo 'New!'; };
}

こちらは、functions.phpに書きました。 そのまんまですね。

⑤ページングを実装するときに書いたところ

<?php
$paged = (get_query_var('paged')) ? get_query_var('paged') : 1; 
query_posts('post_type=post&paged='.$paged);

if(have_posts()):
$loop = new WP_Query( 
    array( 
        'post_type' => 'post', 
        'paged' => $paged,
        ) 
    );  

以上、今晩ももうちょい進めます。

レコメンドエンジンはどうやるのがシンプルなんだろう

昨日から考え始めたWebアプリ。

せっかくネットワーク分析を勉強をしている訳だし、何を使えばいいのか情報収集開始。

 

CGIで処理する方法としては、

①  PerlでRをバッチモードで使う

②  Perlのライブラリーを使う。

 

①については、Rのigraphかsnaというパッケージを使えば良いみたい。

ただ、Perlからバッチモードで使うのには制限もあるらしく、もしかしたらパッケージは使えないのかな?

それに、データベースもRMySQLというやつを使う必要があるらしく、少しやることが増えるのは面倒。

 

【参考資料】

Rでソーシャルネットワーク分析

→  http://www.slideshare.net/hirokoonari/r-15447585

The igraph library

→  http://igraph.sourceforge.net/index.html

RMySQL

→  http://www.okada.jp.org/RWiki/?RMySQL

 

 

ということで、②の方法を模索することに。

調べてみると、結構洗練されたやり方があるみたいです。

 

PHPで使えるレコメンドエンジン - Asial BLOG

Statistics::Suggestを使って簡単にレコメンドエンジンを作る - プログラマになりたい

Cicindela - ライブドアのレコメンデーションエンジン

 

これの一番下のCicindelaというやつをまず試してみようと思います。

 

では、またのちほど。