月: 2014年10月

セシール『10色からカラーが選べるオープンラック』 ※強度不足要注意

先月あたりから急な仕事が続いて毎日バタバタしていているのですが、理想の書棚が見つからず引越し時の荷物が山積みになったままのクローゼットを早く片付けろという嫁からの圧力に屈して月初にバタバタとオーダーしておいたラックが到着しました。

今回購入したのはカタログ通販セシールの『10色からカラーが選べるオープンラック』。6月末の引っ越し直後から新居のクローゼットの奥にぴったり収まる75cm幅で中央に仕切のない書棚…という条件で家具屋を探してまわったもののめぼしい商品に巡りあえず越年も覚悟していたのですが、たまたま嫁が見ていた同社のカタログ中に前述の条件に合致した商品を発見。現物を見ずに家具を買うのはかなりの冒険ですし組立家具の割に価格もそれなりなので悩みましたが、他の選択肢はなかなか見つかりそうにないので思い切って注文しておいた次第です。

このアイテムはサイズ・色ともに選択肢が豊富で設置場所の都合上制限のある横幅以外はどれにすべきかで少々悩みましたが、最終的にオーダーしたのは幅75cmで高さ180cmの商品。色はミドルウォールナットを選択しておいたのですが、納品までに3週間もの時間を要しました。そういえば7月にニッセンでキャビネットを購入した時も到着までに2週間…。時間的・精神的な余裕がないとカタログ通販会社で家具を注文するのは難しいんだなとあらためて実感しました。

C言語でCSVの項目分割

CSVファイルを読み込んで云々というのはありがちな処理ですが、C言語の開発に不慣れな技術者にダブルクォートの有無やエスケープまで考慮した項目分割処理を組ませると項目分割した結果を構造体にセットして一度に返そうとするケースが多々。他の言語の影響なのでしょうが、そんな汎用性のないオーバーフローが目に見えた作りにするのだけは止めておくれ…。

個々人のスキルが如実に滲み出るC言語だけに技術者が10人居れば10通りの実装があって当然ではありますが、こんなやり方もあるよということでサンプルをば。


/*
Copyright (c) 2014 buzzyvox.com
Licensed under the MIT License.
http://opensource.org/licenses/mit-license.php
*/

#include <string.h>

static char *olds;

char *__datatok (char *s, const char *delim)
{
    char *p, *token;
    int dq = 0;

    if (s == NULL)
        s = olds;

    if (*s == '\0')
        return NULL;

    token = s;

    while (*s) {
        if ((p = strstr (s, delim)) == NULL) {
            olds = strchr (s, '\0');
            break;
        }
        while (s < p) {
            if (*s == '"') { dq++; }
            s++;
        }
        if (!dq || (dq && !(dq % 2))) {
            *p = '\0';
            olds = p + strlen (delim);
            break;
        }
        s++;
    }

    s = token;
    while (s = strchr (s, '"')) {
        size_t len = strlen (s) -1;
        memmove (s, s + 1, len);
        s[len] = '\0';
        s++;
    }

    return token;
}
/* CSV項目分割 */
char *csvtok (char *s)
{
    return __datatok (s, ",");
}
/* TSV項目分割 */
char *tsvtok (char *s)
{
    return __datatok (s, "\t");
}

標準関数strtokのcsv対応版といった感じ。注意点(破壊型特殊な・ネスト不可)やI/Oの基本は継承しているので使い方はstrtok関数と同様。

position: absolute な要素を縦横中央揃えにする

CSSで「position: absolute;」指定された要素を縦横中央揃えするのに、こんなやり方があると知ってちょっと感動。


<html>
<head>
  <meta http-equiv="Content-Language" content="ja" />
  <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />

  <title>[SAMPLE] absolute の要素を縦横中央揃え</title>

  <style>
  .outer {
    width: 100%;
    height: 100%;
    background: #ccc;
    position: relative;
  }
  .inner {
    width: 30px;
    height: 30px;
    background: #000;
    margin: auto;
    position: absolute;
    top: 0;
    left: 0;
    right: 0;
    bottom: 0;
  }
  </style>
</head>
<body>
  <div class="outer">
    <div class="inner"></div>
  </div>
</body>
</html>

[JavaScript] jQuery UI 1.11以降でのdatepickerの日本語表示

しばらく目を離した隙にjQuery UIのバージョン1.11系がリリースされていたので1.10系からバージョンアップを図ろうとしたのですが、datepickerで日本語表示するために読み込んでいた言語別ファイル「jquery.ui.datepicker-ja.js」(あるいは jquery.ui.datepicker-ja.min.js)が1.11系には見当たりません。

Changelogを眺めてみると1.11よりファイル名が変わったりしているようなので、以下のいずれかの対応が必要になります。

ファイル名を変更する

1.11より「jquery.ui.datepicker-ja.js」は「datepicker-ja.js」へとファイル名が変更されているので、それにあわせて呼び出し元を変更すればOK。

<!--
<script type="text/javascript" src="//ajax.googleapis.com/ajax/libs/jqueryui/1.10.3/jquery-ui.min.js"></script>
<script type="text/javascript" src="//ajax.googleapis.com/ajax/libs/jqueryui/1.10.3/i18n/jquery.ui.datepicker-ja.min.js"></script>
<link type="text/css" href="//ajax.googleapis.com/ajax/libs/jqueryui/1.10.3/themes/south-street/jquery-ui.css" rel="stylesheet" />
-->
<script type="text/javascript" src="//ajax.googleapis.com/ajax/libs/jqueryui/1.11.1/jquery-ui.min.js"></script>
<script type="text/javascript" src="//ajax.googleapis.com/ajax/libs/jqueryui/1.11.1/i18n/datepicker-ja.min.js"></script>
<link type="text/css" href="//ajax.googleapis.com/ajax/libs/jqueryui/1.11.1/themes/south-street/jquery-ui.css" rel="stylesheet" />