サーバマシンのCPU交換

タグ: , | 投稿日: 投稿者:

毎日暑い日が続きますね。
夏バテぎみのshiraneです。

Dell PowerEdge 2950と言うサーバマシンのCPU交換作業をしたら
ハマってしまいました。

検証で使用する2台のPowerEdge 2950に元々入っているCPUが
2コア2枚と能力不足だったので4コア2枚へ入れ替える作業だったのですが・・・・

【交換前】
Intel® Xeon® Processor 5160(2コア)2枚
                          
【交換後】
Intel® Xeon® Processor X5355(4コア)2枚

作業前に、CPUソケットの規格やPowerEdge 2950のサポートしているCPUを確認。
今回入れる、4コアCPUはBIOSのアップデートが必要ですが、PowerEdge 2950で
サポートされているとの事です。
DellのPowerEdge2950ドライバ詳細ページ

早速、2台のBIOSアップデートを済ませて、CPUの交換を行います。
Aサーバ:何事も無く交換完了して、起動確認も問題なし。
Bサーバ:交換作業は無事完了して起動確認をしてみると・・・・
「CPUはサポートされていません」と言う旨のメッセージが表示され
BIOSは起動するがOSの起動が出来ない???????
BIOS設定画面を開いてCPUを見てみると、「Xeon® Processor X5355」2枚で
認識はされている様子・・・・

試しに何の問題も無かったAサーバとBサーバのCPUを入れ替えてみます。
Aサーバ:何の問題もなし。
Bサーバ:相変わらず、「CPUはサポートされていない」とメッセージが表示される。
結果としてCPU側の問題である可能性は低い事がわかりました。

調べているとこんな記事が・・・
001
参照元:http://ascii.jp/elem/000/000/356/356369/

2006年11月20日 以前、出荷分のPowerEdge 2950は
BIOSをアップデートしてもXeon® Processor 5300番台
をサポートしないと言う事だろうか・・・?

念の為、DELLのHPでサーバ2台をサービスタグで検索し出荷時期を確認してみました。
Aサーバ:2007年8月 出荷
Bサーバ:2006年9月 出荷

・・・・たまたま、使える在庫に2007年出荷のPowerEdge2950(Cサーバ)が有ったので
Bサーバと交換した所、CPU交換し起動確認も問題無く完了!?

原因が分からず、4時間ほど頭抱えましたが今回は良い勉強になりました・・・本当に。

サーバマシンのCPU交換をする機会なんて、そうそう無いとは思いますが、
やる時は事前に使用するハードウェアの情報収集を十分にやってから行いましょう。

Share on Google+Tweet about this on TwitterShare on StumbleUponShare on Facebook

コマンドの出力をファイルに保存する

タグ: | 投稿日: 投稿者:

どうも。kikuです。

あるコマンドの実行結果をファイルに保存したいと思うことありますよね。
でもたまにやる程度だとなかなか覚えられないので、今回は忘備録としてまとめようと思います。

# コマンド > ファイル名

※「コマンド」は 例えば ls とか スクリプトだったりいろいろ
※「ファイル名」は出力ファイルの名前

とりあえず上ので「コマンド」の標準出力は「ファイル名」に書かれます。
 
これだけじゃなんなので、今回はもうちょっと掘り下げていきます。
 

# コマンド 2> ファイル名

こうすると「コマンド」の標準エラー出力が「ファイル名」に書かれます。
 

# コマンド 2>> ファイル名

さらにこうすると、「コマンド」の標準エラー出力が「ファイル名」に追記されます。
ちなみに今までのは上書きでした。
 

# コマンド 1> ファイル名 2> エラーファイル名

標準出力と標準エラー出力の両方が欲しい時はこんな感じ。
 

# コマンド > ファイル名 2>&1

標準出力と標準エラー出力の両方を一つにしたい時はこう書きます。
これを解説すると、2>&1 は標準エラー出力(2)を標準出力(1)へリダイレクトすることを表しています。結果として標準エラー出力を標準出力へ出力し、さらに標準出力を「ファイル名」へ出力するので、両方が「ファイル名」へ出力されます。
 

# コマンド > /dev/null 2>&1

あとこれ。こんな感じのはよく見かけるかもしれませんが、これは標準出力と標準エラー出力を捨てていることを意味しています。
/dev/null は「ごみ箱」みたいなものなのでいらないものはここに吐き出しておきましょう。
 
 
cronやshellなどでも使うことがあると思うのでこれらは覚えておいてもいいかと思います。

Share on Google+Tweet about this on TwitterShare on StumbleUponShare on Facebook

使い道が狭いけど便利なLive DVDの使い方

タグ: , , | 投稿日: 投稿者:

Live DVDといっても、ライブのDVDじゃありません。OSが内包されたDVDでDVDから起動することでOSが入っていないマシンでも操作できるというDVDのことです。
DVD以外にもCDやUSBから起動するものもあります。
※以下、wikipediaの記事

https://ja.wikipedia.org/wiki/Live_CD

Live DVDが何かというのが目的ではなく、あるLive DVDを使ってみましょうよという記事なんです。

 

さて、ファームウェアのアップデートというのは、色々と頭が痛いものです。ファームウェアのバージョンを確認し、適応するファームウェアを探し出し、ファームウェアをインストールする。そして、時には再起動を行わなければならない。慣れない人間には大変な作業です。

om-firmware-liveは、Dell製品のみですが、ファームウェアのアップデートをまとめてGUIで行えるという便利なツールです。

Dellが公式でサポートしてはいませんが、英語のdellのコミュニティーで公開されています。

http://linux.dell.com/files/openmanage-contributions/om-firmware-live/

Live DVDの作り方も簡単で、上記URLからisoファイルをダウンロードしDVDを作成するだけでLive DVDができます。

あとは、そのDVDを入れDVDから起動するだけです。日本語ではなく、英語のUIですが、難しくなく、OpenManageを使用するためのブラウザとファームウェアをアップデートするためのプログラムしか開きません。
ファームウェアをアップデートするプログラムでは、アップデートが必要なファームウェアには、チェックが付きますので確認したら「Update Firmware」をクリックします。

その次の画面でアップデートするファームウェアがリスト表示されますので、そしたら「Update Now」をクリックすればアップデートが始まります。あとは終わるのを待つだけです。

なお、OpenManageを使用するためのIDとパスワードは、下記になります。

ID: root

パスワード: linux

 

参考URL:

http://en.community.dell.com/techcenter/b/techcenter/archive/2011/08/17/centos-based-livedvd-to-update-firmware-on-dell-servers

Share on Google+Tweet about this on TwitterShare on StumbleUponShare on Facebook

[WordPress]A/Bテスト用プラグイン「MaxA/B」

タグ: | 投稿日: 投稿者:

最近「痩せた?」と聞かれるようになりました。
糖質制限ダイエットはすごいですね。決して仕事が原因じゃないです。こんにちは、ニタです。

Webサイトのデザイン、レイアウト、文言、機能などを最適化するために、A/Bテストで効果を測る場合があります。
A/Bテストとはざっくり言いますと、用意された複数のバージョンのページ(バージョンA、B)にアクセスしたユーザをランダムに振り分けて、ユーザの反応(目標となる成果が得られるか)を計測するテストのことです。

今回は、WordPressで構築したWebサイトでのA/Bテストの設定、実施方法を解説します。
※ここでは、テスト対象ページ「バージョンA」と、別バージョン「バージョンB」を比較調査するテストの設定を説明します。

「MaxA/B」を使ったテスト設定

WordPressでのA/Bテストは「MaxA/B」というプラグインを使用します。
MaxA/B
「MaxA/B」を使うと、指定された固定ページでのA/Bテストが可能になります。

また、既存の投稿・固定ページを複製するプラグイン「Duplicate Post」を使用することで、効率よくテストページ作成ができるので、こちらもインストールします。
Duplicate Post

各プラグインインストール方法

各プラグインは以下の手順でインストールします。

  • WordPress管理画面「プラグイン」 > 「新規追加」に移動
  • 「Duplicate Post」の場合、検索のテキストフォームで「duplicate post」を検索
  • 「MaxA/B」の場合、検索のテキストフォームで「maxab」を検索
  • 各プラグインが表示されるので、「今すぐインストール」ボタンからインストール開始
  • インストールが成功したら、プラグインを有効化する

テスト対象の固定ページを複製、編集

テスト対象ページ「バージョンA」を複製し、別バージョン「バージョンB」のページを作成します。
「Duplicate Post」をインストール、有効化すると、固定ページ一覧のテスト対象ページに「複製」というメニューが増えるので、そちらからページを複製します。

img_maxab_004

複製が完了すると、「下書き」状態で複製されます。
複製先を「バージョンB」としてタイトル、スラッグ、記事内容を適宜編集し、ページを公開します。

A/Bテストのテスト設定

つづいて、MaxA/Bでテスト設定を登録します。MaxA/Bの設定画面に移動し「Add New」ボタンから、テストを追加します。
img_maxab_005

img_maxab_001

新規テスト設定画面が表示されるので、各項目を選択、設定し「Create」ボタンでテストを作成します。
各項目の内容は以下のとおりです。

項目名 設定内容
Name テスト名称
Original page テスト対象のオリジナルページ。公開中の固定ページから選択する。
ページ選択すると、ページURLが表示される。
Variation page 1 テスト対象ページの別バージョンのページ。固定ページから選択。
Variation page 2 別バージョンページ2番目。バージョンが複数ある場合、選択する。
Variation page 3 別バージョンページの3番目。
The conversion page 目標ページ。テスト対象ページから遷移し最終的に成果が得られるページ。
問い合わせページの問い合わせ完了ページなど。
"Is on another site somewhere else (enter URL)"を選択すると外部URLを入力指定できる。外部URLを選択すると、登録後外部URLのページに追記するスクリプトが表示される。
Experiment ends when テスト終了のタイミング。
・It is manually stopped:手動停止
・Total traffic reaches:合計アクセス数(指定)
・Each page reaches at least:ページ毎のアクセス数(指定)

今回はテスト対象ページと別バージョン1ページ、目標ページを設定し、手動停止でテスト登録します。
登録後、テストが開始されます。

スクリプトの設置

目標ページを外部URLに設定した場合、テスト登録後、目標ページに追記するJavaScriptが表示されます。

img_maxab_002

目標ページ(外部URL)のheadの閉じタグの直前に追記するコードが表示されます。

テストの状況確認

テスト登録後、テストは即時開始されるので、実際にテスト対象ページにアクセスしてみます。
テスト対象ページと別バージョンページへの振り分けはセッションに登録されるので、セッション登録されないChromeのシークレットウィンドウやFirefoxのプライベートウィンドウでアクセスすると分かりやすいです。

ページの振り分けの確認をし、目標ページまで遷移したら、MaxA/Bの設定画面を確認します。

img_maxab_003

各バージョンへのアクセス率、目標ページへの到達率が表示され、どのバージョンのページが効果的かが分かるようになっています。
また、実施中のテストを中止したり終了のタイミングを変更するには、詳細画面から編集ができます。

img_maxab_006

今回紹介したプラグインでのA/Bテストの他に、GoogleAnalyticsにある「ウェブテスト」というA/Bテスト計測も同時に行うことで、より詳細なテスト結果が得られます。
GoogleAnalyticsの設定方法などは、後日改めて説明したいと思います。
それでは、良いテストライフを。

Share on Google+Tweet about this on TwitterShare on StumbleUponShare on Facebook

FortiWifi ソフトウェアスイッチについて

タグ: , | 投稿日: 投稿者:

FortiWifiでWifiとLANを同じセグメントに設定するためにはソフトウェアスイッチで統合する必要があります。

というわけで統合しましたがしばらくしたある日、LAN間の通信がやけに重かったため、FortiWifiのCPU負荷を見てみたら50%、60%という状況でした。

色々試行錯誤した結果、LAN間の通信もソフトウェアスイッチを使用しており、ハードウェアで処理せず、ソフトウェアで処理しているため

CPUを使用し、高負荷になっているのかと疑問に思い、調査しました。

ソフトウェアスイッチの設定を行ったFortiWifi(A)と同じローカルセグメントのIPを持つNAS、パソコンをFortiWifi(A)に接続し、

パソコンからNASに対し、アップロード、ダウンロードを繰り返し行い負荷が上がるか確認したところFortiWifi(A)は高負荷になりました。

以下は図になります。

 

続けて、同様の設定を行ったFortiWifi(B)を新たに用意し、FortiWifi(A)FortiWifi(B)はお互いのWANインタフェースを利用し、ネットワーク接続します。

NASはFortiWifi(A)からFortiWifi(B)へ接続し、同様にパソコンからNASに対し、アップロード、ダウンロードを繰り返し行い負荷が上がるか確認したところ

FortiWifi(A)(B)は特に高負荷になることなくテストが終わりました。

以下は図になります。

LANからWANへ抜けハードウェアの処理になるため負荷が上がらず通信できたのかと思います。

もうあまり使いたくないので今後WifiとLANは別セグメントにして設定していこうと思います。

 

 

 

 

Share on Google+Tweet about this on TwitterShare on StumbleUponShare on Facebook

[jQuery]CSVファイルを配列にする

カテゴリー: jQuery | タグ: , , , , | 投稿日: | 投稿者:

最近、怖い話を聞きながら寝るのにハマってるモリです。

今回、紹介するのはAjaxで読み込んだCSVのデータを配列に変換する方法です。

用意したデータは以下。

No 品種 原産国 補足

1

ブルーマウンテン ジャマイカ バランス型
2 キリマンジャロ タンザニア 酸味とコク
3 マンデリン インドネシア コクと苦み
4 コロンビア コロンビア 香りと角のないコク

 

用意するライブラリは本家jqueryと今回は「simple_csv」を使用します。

使い方はAjaxで読み込んだデータをsimple_csvに渡すだけ!

配列で返してくれます。

サンプルソース:

&amp;amp;lt;br /&amp;amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;<br />
	$.ajax({&amp;amp;lt;br /&amp;amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;<br />
	  url:&#39;sample.csv&#39;,&amp;amp;lt;br /&amp;amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;<br />
	  beforeSend:function(xhr){&amp;amp;lt;br /&amp;amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;<br />
	  xhr.overrideMimeType(&amp;amp;amp;amp;quot;text/html;charset=UTF-8&amp;amp;amp;amp;quot;);&amp;amp;lt;br /&amp;amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;<br />
	  }&amp;amp;lt;br /&amp;amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;<br />
	}).done(function (csv_data, status, error) {&amp;amp;lt;br /&amp;amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;<br />
	  var data = $.simple_csv(csv_data);&amp;amp;lt;br /&amp;amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;<br />
	  console.dir(data);&amp;amp;lt;br /&amp;amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;<br />
	});&amp;amp;lt;br /&amp;amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;<br />
	

beforeSendでCSVの文字コードをUTF-8にしてます。

simple_csv

でわ。。。

Share on Google+Tweet about this on TwitterShare on StumbleUponShare on Facebook

C言語でCGIしてみましょう!!

タグ: | 投稿日: 投稿者:

まいど。いかおです

今やraspberry piなんかでperlが使えるご時世にあえてC言語でCGIの例を・・・

・ヘッダーの情報はgetenv()で取得できる

・FORMの情報はPOSTならstdinからCONTENT_LENGTH分読み込んだもの、GETならヘッダ情報のQUERY_STRINGの内容である

・responceは基本的にstdoutへ書き出す

ヘッダ情報の取り出し例

/* Enviroment element */
const char      *c_list[] = {"SERVER_SOFTWARE", "SERVER_NAME", "GATEWAY_INTERFACE", "SERVER_PROTOCOL",
                        "SERVER_PORT", "REQUEST_METHOD", "PATH_INFO", "PATH_TARNSRATED", "SCRIPT_NAME",
                        "QUERY_STRING", "REMOTE_HOST", "REMOTE_ADDR", "AUTH_TYPE", "REMOTE_USER",
                        "REMOTE_IDENT", "CONTENT_TYPE", "CONTENT_LENGTH", "HTTP_ACCEPT", "HTTP_USER_AGENT", ""};

 for (i=0;c_list[i][0] != 0x00;i++) {
    if ((p=getenv (c_list[i])) != NULL) {
         p; // これをなんとかする
    }
}

FORM情報の取得(POST)

#define MAX_PARALEN 4096
char    buff[MAX_PARALEN]

memset (buff, 0x00, MAX_PARALEN);
int pos=0;
int remain=length;
while (remain > 0) {
    if ((len=fread (&(buff[pos]), 1, remain, stdin)) > 0) {
        remain = remain - len;
        pos = pos + len;
    }
}

ここで取得したbuffを'&'でセパレートしてやれば

name=valueが取り出せます

pos=0; pcnt=0;
for (i=0;i < length ;i++) {
    if (buff[i]=='&') {
       // ここがname=valueの先頭アドレス
        &(buff[pos]);
        // ここがname=valueの長さ
        (i - pos));
    }
}

responceの例

printf()とかでstdoutに吐き出していきます

static  const   char    *index_html[] = {"&lt;!DOCTYPE html&gt;\n",
                                                           "&lt;html&gt;\n",
                                                           "&lt;body&gt;\n",
                                                           "&lt;h1&gt;Hello world&lt;/h1&gt;\n",
                                                           "&lt;/body&gt;\n",
                                                           "&lt;/html&gt;\n",
                                                           ""
};
.
.
for(int i=0;index_html[i] != "";i++){
    printf(index_html[i]);
}
.
.

※本気でやりたい人がいますかね。。。。

Share on Google+Tweet about this on TwitterShare on StumbleUponShare on Facebook

10分でELKスタックを構築してみる

タグ: , , | 投稿日: 投稿者:

満員電車の時はとなりにハイヒール女子がいない事を確認しておきましょう。電車が揺れた時に痛い目をみます。

ベッチです。

今回はログ収集・解析・可視化についてです。

もはやデファクトとなったELKスタックをローカルマシン(ただしこの記事での説明はMacに限ります)に10分で構築します(コマンドは数回実行するだけです)。

ELKスタックとはElasticsearch社のElasticsearch(解析) + Logstash(収集) + Kibana(可視化)の3つの製品の総称です。 

順番的にはLEKの方がしっくりくると思うのは自分だけでしょうか。

ちなみにLogstashのかわりにfluentdを使うパターンがEFKスタックと呼ばれるものです。

それでは早速構築していきます。

もちろん10分で構築するのですからアレを使う前提です。 そうですコレです。

  • Boot2Docker
  • docker-compose

コレの環境は今の時代当然インストール済みであると思っているので特に説明しません。

ソースはGithubにあがっている以下を利用します。

https://github.com/deviantony/fig-elk

上記ソースを利用して構築されるELKのバージョンは現時点でそれぞれ以下の通りです。

  • elasticsearch 1.5.0
  • logstash 1.4.0
  • kibana 4

1.fig-elkをクローンする

git clone git@github.com:deviantony/fig-elk.git
cd fig-elk

2.logstash.confにfilterを追加

これ追加しとくとApacheのログ収集する時にいろいろと分析しやすくなります。

# 修正対象ファイル logstash-conf/logstash.conf

input {
    tcp {
        port => 5000
    }   
}

# Add your filters here
filter {
    grok {
        match => { "message" => "%{COMBINEDAPACHELOG}" }
        break_on_match => false
        tag_on_failure => ["_message_parse_failure"]
    }   
    date {
        match => ["timestamp", "dd/MMM/YYYY:HH:mm:ss Z"] 
        locale => en
    }   
    geoip {
        source => ["clientip"]
    }   
    grok {
        match => { "request" => "^/%{WORD:first_path}/%{GREEDYDATA}$" }
        tag_on_failure => ["_request_parse_failure"]
    }   
    useragent {
        source => "agent"
        target => "useragent"
    }   
}

# Must use http protocol and specify the host to use Kibana4
output {
    elasticsearch { 
        protocol => "http"
        host => "elasticsearch"
    }   
}

3.docker-compose upする

最後に以下を実行すればELKのそれぞれのコンテナが起動し始めます。(※初回のみコンテナイメージのダウンロードで時間かかります。10分で構築するという部分の9割がここに時間使います)

docker-compose up

kibanaが起動してきたら完了です。念のためコンテナのプロセスを確認しておきます。(折り返しちゃってみずらいですが)

$ docker ps
CONTAINER ID        IMAGE                                 COMMAND                CREATED             STATUS              PORTS                           NAMES
f42553439266        deviantony/elk-logstash:latest        "/opt/logstash/bin/l   About an hour ago   Up About an hour    0.0.0.0:5000->5000/tcp          figelk_logstash_1        
d5697254c482        deviantony/elk-kibana:kibana3         "nginx -g 'daemon of   About an hour ago   Up About an hour    443/tcp, 0.0.0.0:8080->80/tcp   figelk_kibana3_1         
0f9a20c87f6e        deviantony/elk-kibana:latest          "/entrypoint.sh"       About an hour ago   Up About an hour    0.0.0.0:5601->5601/tcp          figelk_kibana4_1         
810736bac50d        deviantony/elk-elasticsearch:latest   "/usr/share/elastics   About an hour ago   Up About an hour    0.0.0.0:9200->9200/tcp          figelk_elasticsearch_1   

これで環境構築は完了です。

それでは実際に動きを確認してみます。

以降にでてくるboot2docker-ip-addressという部分はboot2dockerのIPに便宜変更して下さい。

以下で確認できます。

boot2docker ip

4.ローカルマシン上でApacheのログファイルをLogstashへ送る

サンプルとしてなんでも良いので適当にApacheのログファイルをLogstashへ読み込ませてみます。

以下を実行するだけです。(※access.logのファイルパスは便宜変更して下さい)

nc boot2docker-ip-address 5000 < access.log

5.Elasticsearchにインデックス化されているかを確認する

確認する前にelasticsearchに「elasticsearch-head」というプラグインをインストールしておきます。

インストールしておくと実際にデータがelasticsearchにインデックスされているかどうかの確認ができるWebインタフェースが利用できます。

docker exec -it b483227414d0 bash
cd /usr/share/elasticsearch
./bin/plugin install mobz/elasticsearch-head

ブラウザで以下へアクセスする。

http://boot2docker-ip-address:9200/_plugin/head/

以下のような画面が表示されてインデックス状態がわかります。 

elasticsearch-head

ちなみに「Bison」って書かれているのがnode名です。 指定しないと自動的にMARVELヒーローの誰かの名前になります。

今回はBisonってなってます。知りません。

6.お待たせしました、最後にKibanaで確認します

ブラウザで以下にアクセスします。

http://boot2docker-ip-address:5601

すると最初は以下の画面が表示されます。

Settings_-_Kibana_4

「Time-field name」を@timestampにして「Create」ボタンをクリックして下さい。

すぐさまSettings画面に遷移しますが、Discover画面に遷移して下さい。

すると単純な棒グラフが表示されると思います。

Discover_-_Kibana_4_と_iOS_Certificates_-_Apple_Developer

表示されない場合は画面右上のTimeFilterを今回インデックスしたログファイルのタイムスタンプの範囲にすると表示されるはずです。

これでいろいろ触りながら確かめる環境ができました。

実際にはこのVisualizeの画面で可視化したいデータを選んでグラフつくって保存してっていうのを繰り返してDashboardでみるという流れになるので好き勝手にいろいろいじり倒してみて下さい。

それでは。

 

Share on Google+Tweet about this on TwitterShare on StumbleUponShare on Facebook

LANケーブルの作成について

タグ: | 投稿日: 投稿者:

どうも、shiraneです。
久しぶりに、LANケーブルを作成したら見事に内線の順番を忘れてました。
なので今回は、基本に立ち返りLANケーブル作成について書いてみます。

【作成に必要な物】
1.UTPケーブル
性能によりカテゴリ分けされてますので、必要な性能を満たしている物を選びましょう。

カテゴリ
画像引用元 http://www2.elecom.co.jp/cable/lan/index.html#1

各カテゴリは下位互換性があるので、例えばカテゴリ6のケーブルを
カテゴリ5として使用する事も可能です。

2.RJ-45コネクタ
色々な種類が有るのでお好みのコネクタを探して見て下さい。IMG_2311

 

 

3.かしめ工具

IMG_2313ケーブとコネクタを圧着する専用工具です。
※「ケーブルカット」「皮むき」機能が付いてる物もあります。

 


4.テスター
IMG_2312作成したケーブルの結線に間違いが無いか確認する為の機械です。

 

 

【作成手順】
1.必要な長さにケーブルをカットし両端の被覆を2~3cm程むきます。

IMG_2303

※ケーブルの被覆をむく際、内線を傷をつけないよう
 注意して下さい。

 

 

2.内線の捻じれを整え並び替える。
 下図のようにストレートケーブルは二通りの並び順があります。
 また、両端をそれぞれA配線とB配線にしたものがクロスケーブルとなります。

ストレート

クロス画像引用元 http://lan-kouji.com/contents05/contents05-01.html

3.ケーブルをコネクタへ奥まで差し込み、かしめ工具でコネクタとケーブルを繋げる。

IMG_2306正しい例:
コネクタの奥まで内線が入っており
ケーブルとコネクタの接合部もしっかり
固定されています。

 

IMG_2313悪い例:
内線がちゃんと入っておらず、コネクタとの
接合部分もケーブル被覆を噛み込んでいません。
この状態ですと、ケーブルとコネクタの接合が
不完全なため、テスター確認でOKが出ても
使用中、何かのはずみでコネクタからケーブルが
抜けてしまう等トラブルの原因となってしまいます。

4.テスターでチェックし問題無ければOK。

IMG_2307

結線に間違いがあっても見ただけでは、なかなか
気づかないので作成したケーブルは必ずテスター
で確認する事をお勧めします。

 

 

 

以上でLANケーブルの完成です。

Share on Google+Tweet about this on TwitterShare on StumbleUponShare on Facebook

Android 5.0 Lollipop でのSwitch

タグ: | 投稿日: 投稿者:

こんにちは。kikuです。

Android 5.0 が普及してきましたね。
既存のアプリが何も調整せず動いてくれるととても助かるんですけど、なかなかそううまくはいきません。

今回5.0用に対応したのがSwitch。
4.4までは普通に表示していたスイッチが、何故かテキストしか表示されなくなってしまいました。
現象としてはこんな感じ。
なんで消えてしまったのか不明なんですが、色々調べても他に同じ現象の方があまり居なかったので特別な条件があるのかも。。

とりあえず元々のxmlはこんな感じ

<Switch
    android:id="@+id/switch"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_gravity="center_vertical"
    android:gravity="center_vertical"
    android:textOff="OFF"
    android:textOn="ON"
    android:singleLine="true"/>

で今回対応したのがこれ。

<Switch
    android:id="@+id/switch"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_gravity="center_vertical"
    android:gravity="center_vertical"
    android:textOff="OFF"
    android:textOn="ON"
    android:thumb="@drawable/switch_bg"
    android:track="@drawable/switch_track"
    android:switchMinWidth="35dp"
    android:singleLine="true"/>
drawable/switch_bg.xml

<selector xmlns:android="http://schemas.android.com/apk/res/android">
    <item android:state_enabled="false" android:drawable="@drawable/g_thumb" />
    <item android:state_pressed="true"  android:drawable="@drawable/c_thumb" />
    <item android:state_checked="true"  android:drawable="@drawable/c_thumb" />
    <item                               android:drawable="@drawable/g_thumb" />
</selector>
drawable/switch_track.xml

<selector xmlns:android="http://schemas.android.com/apk/res/android">
    <item android:state_focused="true" android:drawable="@drawable/c_thumb" />
    <item                              android:drawable="@drawable/g_track" />
</selector>
drawable/g_thumb.xml

<shape xmlns:android="http://schemas.android.com/apk/res/android"
    android:shape="rectangle">
    <size android:height="25dp" android:width="25dp" />
    <gradient android:height="25dp" android:width="25dp"
        android:startColor="#BBBBBBBB" android:endColor="#BBBBBBBB"/>
</shape>
drawable/c_thumb.xml

<shape xmlns:android="http://schemas.android.com/apk/res/android"
    android:shape="rectangle">
    <size android:height="25dp" android:width="25dp" />
    <gradient android:height="25dp" android:width="25dp"
        android:startColor="#FF5599DD" android:endColor="#FF5599DD"/>
</shape>
drawable/g_track.xml

<shape xmlns:android="http://schemas.android.com/apk/res/android"
    android:shape="rectangle">
    <size android:height="25dp" android:width="25dp" />
    <gradient android:height="25dp" android:width="25dp"
        android:startColor="#DDDDDDDD" android:endColor="#DDDDDDDD"/>
</shape>

これらを設定したら表示できました。
Switchにthumbとかtrackを設定しないと5.0だと消えてしまうみたいです、私の環境だと。(他は知らない)

※2015/12/4追記
AndroidManifest.xmlのテーマ設定を新しくすれば表示が可能とのコメントを頂きました!
ほげさん、ありがとうございます!

世間的には5.0からSwitchCompatというのが追加されたようで、ちょっと調べたらそれを使おうみたいな流れになっているように感じられましたが、実際はどうなんでしょうか。
時代は古い端末を切り捨てていくスタイルなんでしょうかね。

開発者としましては、できれば発売から2年したら新しい端末にするのが常識みたいな世の中になってほしいものです。

Share on Google+Tweet about this on TwitterShare on StumbleUponShare on Facebook