2012年 1月 の投稿一覧

CSSで最後の要素以外に適用させる書き方

擬似要素の:not:last-childを組み合わせて指定します。

html

<ul>
    <li>One</li>
    <li>Two</li>
    <li>Three</li>
</ul>

css

ul
{
    list-style-type:   none;
    text-align:        center;
}
li
{
    display:           inline;
}
li:not(:last-child):after
{
    content:           ' |';
}

:last-childで最後の要素を指定し:notで指定された要素以外を指定します。
つまり、最後の要素以外というセレクターができます。

2012-02-04 1st – jsdo.it – share JavaScript, HTML5 and CSS

.htaccessで拡張子が.htmlのファイルでphpとssiを使えるようにする設定

これでできる。

Options +Includes
AddType application/x-httpd-php html
AddOutputFilter INCLUDES .html

AddHandlerで.htmlのファイルをssi有効にしてしまうと、.htmlのファイルのphpが有効にならない。

AddType text/html html
AddHandler server-parsed html

モックでサイト作る時くらいしか、.htmlの拡張子でphpとssiを同時に使用することはめったに無いと思いますが、今後のためにメモしとく。

参考サイト

Apache チュートリアル: Server Side Includes 入門 – Apache HTTP サーバ.

CSVファイルを開くと「Excel は ‘xxxx.csv’が SYLK ファイルであることを確認しましたが、読み込むことができません」というエラーメッセージが表示される

PHPからCSVファイルを出力仕様とした際に、以下のようなエラーメッセージがExcelで表示されました。

開こうとしているファイル ‘***.***’ の形式は ファイル拡張子が示す形式と異なります。

Excel は ‘xxxx.csv’が SYLK ファイルであることを確認しましたが、読み込むことができません。ファイルにエラーが含まれるか、SYLKファイル形式でない可能性があります。異なるファイル形式でそのファイルを開くには、[OK]をクリックしてください。

エラーメッセージを無視して開くと通常通り開けるのですが、気持ち悪いので調べてみると、CSVの先頭が「ID」のCSVファイルを開くとこのようなエラーメッセージが表示されるようです。

NGパターン

ID,NAME,PRICE

ID123,456,789
はエラーメッセージが表示されます。
Excel はテキスト ファイルの先頭の文字列が ID の場合、ファイルを SYLK 形式として認識するため、このような現象が起こるようです。

参考

【Excel】SYLK ファイルであることを確認しましたが、読み込むことができません at softelメモ.

MySQLの自動起動設定

MySQLの自動起動設定がされてなかったのでしたというメモ。

[root@suusuke ~]# /etc/rc.d/init.d/mysqld start
mysqld を起動中:                                           [  OK  ]

[root@suusuke ~]# chkconfig mysqld on ← 自動起動設定
[root@suusuke ~]# chkconfig --list mysqld
mysqld         	0:off	1:off	2:on	3:on	4:on	5:on	6:off

ハートやクローバーの実体参照

HTMLでハートやクローバーと言った記号を使いたい場合、通常であれば、記号をそのまま使えると思いますが、文字コードによっては使えない記号もあります。
今回はeuc-jpハートクローバーを使いたかったのですが、euc-jpではサポートされてません。
そういった場合HTMLでは、実体参照で表現することができます。

ハート
&hearts;
クローバー
&spades;

HTML4 で使える文字実体参照.

擬似要素 before after についての解釈

擬似要素:before:afterはその名前から、要素外側の前と後と解釈してしまいがちですが、実際は要素内側の前と後になります。

図で表すとこんな感じです。

一番使用するケースとしては、floatした要素の高さを出すために擬似要素にclearfixするという事が多いと思います。

例えば、ul、liタグでパンくずリストを作る場合、

<nav class="nav-topicpath">
    <ul>
      <li><a title="Home" href="/">Home</a></li>
      <li>Page1</li>
    </ul>
</nav>
ul, ol {
    list-style: none outside none;
}
a {
    color: #333333;
}
.nav-topicpath {
    background-color: #ffffff;
    font-size: 12px;
    padding: 3px 10px;
}
.nav-topicpath ul:after {
    content: ".";
    display: block;
    height: 0;
    clear: both;
    visibility: hidden;
}
.nav-topicpath li {
    float: left;
}
.nav-topicpath li + li:before {
    content: ">";
    margin: 0 3px;
}
.nav-topicpath li a {
    padding: 3px 0;
}

※clearfixはスマートフォン用のものです。

topicpath – jsdo.it – share JavaScript, HTML5 and CSS

この場合、

<nav class="nav-topicpath">
    <ul>
      <li><a title="Home" href="/">Home</a></li>
      [[[ここに擬似要素afterが入る]]]
      <li>Page1</li>
    </ul>
</nav>

となります。
擬似要素は、要素のCSSも継承します。

clearfixのために空の要素を作ったり剃る必要が無いので、イイですね!

Cocoa Touch(Objective-C) でシングルトンを実装する

まずはオブジェクトの関連図。

PossessionStoreというオブジェクトをシングルトンで実装したい場合を想定します。
PossessionStoreNSMutableArrayのプロパティを持ちます。

ヘッダー

#import <Foundation/Foundation.h>

@class Possession;

@interface PossessionStore : NSObject
{
    NSMutableArray *allPossessions;
}

// ファクトリーメソッド
+ (PossessionStore *)defaultStore;

@end

ファクトリーメソッド(クラスメソッド)defaultStoreを宣言します。
このメソッドの実装では、PossessionStoreインスタンスが既に生成済みかどうか確認します。
PossessionStoreインスタンスがある場合には、クラスはそれを返し、ない場合は、インスタンスを生成してからそれを返します。

実装

#import "PossessionStore.h"
#import "Possession.h"

static PossessionStore *defaultStore = nil;

@implementation PossessionStore

+ (PossessionStore *)defaultStore
{
    if (!defaultStore) {
        // シングルトンを生成する
        defaultStore = [[super allocWithZone:NULL] init];
    }
    
    return defaultStore;
}

// 別のインスタンス生成を防ぐ
+ (id)allocWithZone:(NSZone *)zone
{
    return [self defaultStore];
}

- (id)init
{
    // 既にPossessionStore インスタンスが生成済みの場合
    if (defaultStore) {
        // 既存のものを返す
        return defaultStore;
    }
    
    self = [super init];
    if (self) {
        allPossessions = [[NSMutableArray alloc] init];
    }
    return self;
}

- (id)retain
{
    // 何もしない
    return self;
}

- (oneway void)release
{
    // 何もしない
}

- (NSUInteger)retainCount
{
    return NSUIntegerMax;
}

@end

PossessionStoreインスタンスを保持するグローバルな静的変数を作成します。

クラスのインスタンスが1つだけ生成されるように、+defaultStore+allocWithZone:-initを実装し、保持カウントメソッドをオーバーライドして、defaultStoreを他から解放できないようにします。

これで、シングルトンの実装が完了です。

ドキュメント

Cocoa Fundamentals Guide: シングルトンインスタンスの作成.

Organizer で API Reference を参照した際に crash してしまう現象を解消する方法

自宅ではXcode 4.2.1 on Lion、会社ではXcode 4.2 on Snow Leopardというなんとも言えない環境で開発しています。

Organizer で API Reference を参照した場合、会社の環境だと

“index.html” is locked for editing and you may not be able to save your changes. Do you want to unlock it?
The file “index.html” could not be unlocked. The file is a remote resource. Try making a local copy.

というようなメッセージが表示され、その後Xcodeが落ちてしまいます。

オンラインヘルプを見ればいいやとそのままにしてたのですが、解決方法がわかりました。

手順は

  1. Xcode の環境設定を開く
  2. Download カテゴリーをクリック
  3. Documentation タブをクリック
  4. “iOS 5.0 Library”を選択し、”Check and Install Now”をクリック

です。

つまりは、iOS 5.0 Library のドキュメントがインストールされたなかったってことなのかな!?