サクサク読めて、アプリ限定の機能も多数!
トップへ戻る
Wikipedia
alpha-netzilla.blogspot.com
◆ 目的 ディープラーニング(深層学習)とは、多層構造のニューラルネットワークを用いた機械学習である。ディープラーニングの代表例である、畳み込みニューラルネットワーク、CNN(Convolutional Neural Network)を使い、10種類の手書き数字を認識させる処理フローを追いかけてみる。また、TensorFlowのコードを実際にどう書いて組むかも理解する。数学に対する抵抗があったとしても難しい部分はTensorFlowが対応してくれるため、誰でもディープラーニングを試すことはできる。脱苦手意識! ◆ CNNの全体像 大きな流れは、特徴を抽出(①)し、それを元に分類(②)することである。①→②のフローが基本である。 CNNでは畳み込みフィルタとプーリング層の組み合わせで特徴を引き出す。 またこのセットを何回繰り返すかは目的によりけりである。また目的が違えば抽出方法も異なる。 識
◆ 目的 チャット形式で会話ができるロボットアプリを作成する。 ここで作成するのはいわゆる人工無能というやつである。文脈を理解しているわけではないのでAIではない。それらしく答えることができるように力技で対応する。 ディープラーニングの発展も目覚ましいが、言語処理に関しては人工無能の域を出ていない。 ◆ 実現手段 大きく3つのステップを踏む。 1. ベースとなる例文の読み込み テキストであればなんでもよい。 ライセンスフリーの小説から会話文をとるのも一案かもしれない。 この後の流れを見てもらえると分かるが、そのまま例文を喋らせるわけではない。 2. 形態要素解析 文章を分解して品詞を特定するために、オープンソースの形態素解析エンジンであるmecabライブラリを利用する。 rubyでコードを書きたいため、そのモジュールとしてnattoを使う。 # yum install mecab meca
オープンソースの検索エンジンApache Solrの使い方を記録しておく。 Solrを動かすまでの環境準備を整えた後は、下記3つを実現する。 試験1. 正規化されたデータをPOSTして登録し、結果を検索できるシステム 試験2. facetを使った地理情報の検索システム 試験3. クローラ(Apache ManifoldCF)との連携 ※ 日本語の検索設定(schema.xml)に関してはディフォルトのものを利用する。 実際に動くものを作ってからどのようにチューニングするか判断するのもよいだろう。 チューニング観点は最後部に記載する。 【Solrを動かすまでの環境準備】 ◆ java周りのインストール java-X.X.X-openjdkをインストールしてJAVA_HOMEの設定をする。 oracle-jdkでなくてもよい。 JAVA_HOMEのパスが参照されるため見えるようにしておく。 #
◆ 目的 モダンでリッチな動的WEBインターフェースをコマンド経由で自動操作する。 (WEBに限らず、GUI画面全般を画像認識技術を使いオートメーション化したい場合はこちら) ◆ 対象 試験対象のWEBをIBMのBluemix管理コンソールとした。 https://console.ng.bluemix.net/ 個人的に利用することが多く、また定期的に課金情報を把握する必要性があるため、そのチェックを自動化したいと思ったことが動機である。 リッチなインターフェースであるため、このサイトで処理を自動化できれば大抵のサイトでも手順を応用できるだろう。 (乗り越えるべき技術的ポイント) 1. IDとパスワードを使ってログイン 2. 個人設定を表示させるアイコンをクリック 既存画面の前面へポップアップ画面が表示される その管理画面で数か所の項目を選択 3. 課金情報画面へ遷移し、閉じられているサー
【目的】 社内や学内などのイントラネットからインターネット上にある外部のsshサーバに接続する. ただし、イントラネットから外部へのアクセスはプロキシーサーバを通すようになっており、HTTP(80/tcp)、HTTPS(443/tcp)向けの通信しか許可されていない. 【構成概要】 intranet 企業内や学内のイントラネット ↓ +--------+ proxy.example.com:8080(proxyサーバ) | proxy | 外部へのHTTP(80/tcp)、HTTPS(443/tcp)を許可 +--------+ ↓ +--------+ remote.example.com(sshdサーバ) | remote | +--------+ 【実現手段】 HTTPSはSSL/TLSで暗号化されているので、プロキシは内容を把握できない. クライアントのWEBブラウザと接続先
【目的】 パケットを加工するプログラムを書いている際に、IPのチェックサム部分のコードの実装を理解できず混乱してしまった。ネットワークの初心者に戻ったつもりで、この機会にどういう仕組か把握しなおす。 【チェックサムを求める前の予備知識】 ◆ IPv4 パケット構造 ---------------------------------------------------------------------- | 0 | 1 | 2 | 3 | |----------------------------------------------------------------------| | Version| HL※ | ServiceType | TotalLength
HPのSwitchである5XXX系を触ることになった。 Cisco系のコマンドと相違があったためまとめておく。 ※HPのハードウェア周りの操作に関してはこちらを参考にしてほしい。 【基本操作】 ● system viewへの移行 いわゆるciscoで言うところの特権モード(enable)である $ system-view 以後の操作手順内ではシステムビューに入るためのsystem-viewコマンドは省略する ● ログアウト # quit 【確認コマンド】 ● バージョンおよびシステム稼働時間の確認 # display version ● 機器のシリアル番号の確認 # display device manuinfo ● SFP/SFP+等のシリアル番号の確認 # display transceiver manuinfo interface ● 電源の状態確認 # display power
09:00:00 up 100 days, 00:00, 1 user, load average: 2.61, 3.10, 3.30
linux上で操作されたオペレーションをログとして日時と共に記録するツール(logrec)を作成した。 telnet、ssh等で別サーバへログインしていっても、そこでの操作記録はすべてログイン元サーバで一元的に保存される。 対象は入力デバイスからの操作のみであり、コマンドの結果は記録しないものとする。 (参考) Cによるselectを利用した簡易プログラム コマンドライン引数を取得するCのサンプルコード 【review】 Unix/Linux プログラミング 理論と実践 ◆ コード logrec.cの一つだけである。 全コードはgithubを参照のこと。 https://github.com/alpha-netzilla/logrec ※linuxで使われるscriptというコマンドのコードを改造している。 ◆ 使い方 1. ビルド $ gcc -lutil logrec.c -o log
tc(traffic control)は、qdisc(queueing discipline)に従いトラフィックの
シグナルが送信された場合に、 OSは宛先となる稼働中のプロセスの処理に割り込むことができる。 (シグナル例) SIGINT : 割り込み(CTRL + C) SIGTSTP : 実行中断(CTRL+Z) SIGTERM : 強制終了(killコマンドのデフォルトの発生するシグナル) SIGHUP : 擬似端末クローズ時のハングアップ シグナルを受信したプロセスにシグナルハンドラを登録しておけば、 シグナル受信時にそのルーチンを実行させることができる。 シグナルハンドラはプログラミングにおいて考慮すべき、 いわずもがなのの基本であるが、これを安全に書くのは難しい。 まずは、シグナルハンドラの基本的な使い方を復習する。 【シグナルグナルハンドラの基礎】 ただし種々の問題があることを知っておかなければならない。 【シグナルグナルハンドラの問題点】 その対策を最終章で検討する。 【sigwai
※追記 Seleniumを直叩きするより、Capybaraを通して実行した方がいいかもしれない。 http://alpha-netzilla.blogspot.jp/2016/03/crawler.html ◆ 目的 Seleniumを利用してWEBのGUI操作(UI:User Interface部分)を自動化する。 ※GUIでのオペレーションを自動化するためにSikuliも最近ではよく使われる。 ただし両者は実装も利用用途も異なるため使い道は見極める必要がある。 ◆ 環境、事前準備 ・ Rubyのインストール 今回はRubyからSeleniumを操作するため、Rubyを使えるようにしておくこと。 インストール後、windows環境であれば以下からパスを指定する。 コントールパネル -> システムの詳細設定 -> 詳細設定 -> 環境変数 -> ユーザの環境変数 -> 変数 -> Path
◆ 目的 Google Apps Script(GAS)を利用して、 Gmailで受信した特定のメールを Googleのスプレッドシート(spread sheet)へ書き写す。 ◆ 動作概要 ・該当メールはGmailでラべリング(フォルダ分け)をしておく (メール受信時) unseenラベル (スプレッドシートへ記票後) seenラベル ※ラベル名は任意である。 ただし、ツール内で本ラベルを利用する。 ・メール内容 以下のフォーマットのメールを受信するとする。 (本文) name: piyo age: 30 ※各行終わりにGmail上で</ br>タグが付与されている。 ・スプレッドシート 作成したスクリプトを実行すると、 メールを元に、シートの最下段へnameとageを追記していく。 また、担当者がcheck欄に"o"を入れると その行がグレーアウトするような仕掛けも用意する。 ----
cassandraを運用する上でどういった 定期バッチ処理が必要かについてまとめる。 しかし、cassandraの前提知識がないと 必要性を理解しにくいため、 下の流れで若干遠回りしながら説明していく。 ◆ 分散システムの予備知識 ◆ 修復機能の予備知識 ◆ 定期的に必要となる処理の概要 ◆ 定期的に必要となる処理の詳細 ◆ 分散システムの予備知識 cassandraのような分散システムではノード間のデータで 同時に次の3つを保証することは難しい。 すべてを満たすためにはレイテンシー(遅延)を許容する必要がある。 CAP定理 Consistency:一貫性 Availability:可用性 Partition Tolerance:分断耐性 cassandraは可用性と分断耐性(AP)を重視し、一貫性を犠牲にしているが、 遅延とのトレードオフで一貫性を得ることができる。 コンシステンシレベル
動的言語としてのRubyの特徴を抑えておく。 ◆ 動的ディスパッチ 実行時にメソッドを定義する。 class MyClass def my_method(arg) arg * 2 end end MyClass.new.my_method(10) # => 20 MyClass.new.send(:my_method, 10) # => 20 普通にメソッドを利用する場合も、sendを使ってメソッドを 呼ぶのも同じ結果を得るのだが、後者に何かメリットはあるのだろうか。 send()を使えば、呼び出すメソッドはただの引数となり、 コードの実行時にメソッドを動的に選択することができるのである。 ※':文字列'はただのシンボル。 send()はパターンディスパッチにも使われる。 パターンディスパッチによって メソッド名のパターンに基づいてメソッドを振り分けることが可能である。 class MyC
サーバのボンディング(bonding)の切り替えが起きず、 トラフィックを処理できない事象が発生した。 問題への対応を検討する。 ◆ 障害内容 サーバ側で、ボンディングのActive-Backup モード(mode=1)を利用し、 障害の検知方法としてMII監視を使っていた。 しかし、L2スイッチがリンクがアップしている状態で故障したため、 サーバ側では異常を検知できなかった。 その結果サーバ側での経路切り替えが起きず、トラフィックを処理できなくなった。 L2SW L2SW | ⇒ × | 左経路から右経路にbonding切り替えが起きない SERVER ◆ ボンディング切り替えの監視方法の変更絵検討 ボンディングのActive-Backup モード (mode=1) では障害の監視方法として MII監視とARP監視の2通りの設定がある。 ボンディングを切り替えるためのトリガ
zabbixに格納されているデータはGUIからでも抽出できるのだがその数に制限がある。 データベースを参照して格納されているデータをエクスポートする。 バックエンドにはmysqlを使っているとする。 ユーザ名はzabbix, パスワードはpasswordとする。 ◆ 目的とするホスト名とアイテム名からのデータ参照方法 1. hostsテーブルからhostidの抽出 $ mysql -u zabbix -ppassword zabbix -e "select host, hostid from hosts" +-------+--------+ | host | hostid | +-------+--------+ | host1 | 10140 | | host2 | 10141 | 2. itemsテーブルからitemidの抽出 $ mysql -u zabbix -ppassw
C言語で利用するsizeof(x)はxの正味のサイズではなく、 xのアラインメントの倍数に切り上げた値になる。 基本的なデータ型のアラインメントは、下に示すようにその型のサイズ に一致することが多い。 例外もあるのだが(詳しくはこちらを参考)、ここではとにもかくにも一致するとする。 では、複合データ型(構造体など)では具体的にどういったサイズになるのであろうか。 例題を使って考えてみよう。 ◆ 基本的なデータ型のアラインメント 構造体のアラインメントを考える前提として、 先にも述べたように、各データ型のサイズとアラインメントは以下とする。 ・char サイズ : 1バイト アラインメント : 1バイト ・short サイズ : 2バイト アラインメント : 2バイト ・int サイズ : 4バイト アラインメント : 4バイト ・dou
ボンディングのモードをフォールトトレランス(アクティブ-バックアップ)として設定している場合、 プライマリのインターフェースがサーバごとにまちまちになっていると トラフィック経路に違いがでるため、そろえておきたい。 方法としては2つある。 (1) サーバのインターフェースをダウン・アップさせる。 (2) サーバが接続されているスイッチのインターフェースを シャットダウン・ノーシャットダウンさせる。 しかしこれ以外にも、サーバ側のコマンド操作で切り替えができることが分かった。 ◆ 前提 eth0とeth1の2つのインターフェースでbond0を組んでいる。 eth0はアクティブであり、eth1がバックアップである。 サーバ側で"ifenslave"コマンドを用い、eth0をバックアップにeth1をアクティブに切り替える。 ◆ 現状のインターフェースの確認 ・ ボンディング状態の確認 # cat
linuxでユーザごとにシステムリソースの制限をかける。 linuxでkernel単位でシステムリソースの制限をかける場合はこちらを参照のこと。 linuxサーバ構築時に設定が必須のパラメータと言えば/etc/sysctl.confである。 しかしここはカーネルパラメータを記述する設定ファイルであり、 つまりシステム全体で利用可能なリソースの制限を行うためのファイルである。 ユーザ単位での上限は変更できない。 ulimitコマンドを使えば設定を変更することができる。 サーバ再起動時には元に戻るので、設定を永続的にするためには、 /etc/security/limits.confに記述しておく必要がある。 サーバのチューニング時に必ずするポイントの一つだろう。 例としてファイルディスクリプタ数とプロセス数を30000に変更する。 ◆ testというユーザの現在のシステムリソースの制限値を確認
ログを確認していると何かエラーが出ていた # tail -f /var/log/messages ip_conntrack: table full, dropping packet iptablesのセッション管理テーブル(ip_conntrack)が上限に達したようである 解消方法は二つ。 ① ESTABLISHEDな状態を記録する期間を短くする ② ip_conntrackに記録できる上限数を上げる 【OSパラメータの変更作業】 ◆ 現在の使用状況の確認 ◆ 現在の設定値の確認 # sysctl -a | grep nf_conntrack net.netfilter.nf_conntrack_tcp_timeout_established = 432000 ← ①の対策 net.netfilter.nf_conntrack_max = 65536 ← ②の対策 net.nf_conn
転送元 転送先 サーバ群 サーバ(192.168.2.1) ----- | | → ----- ----- ----- | | → | | ----- ----- ----- | | → ----- local6.* local6.info 適合:match1, match2 除外:test1, test2 転送元サーバからrsyslog経由で転送先サーバへログを飛ばす。 すべて転送するのではなく、ファシリティが6(local6)のすべてのプライオリティを対象とする。 転送先では以下の条件にマッチしたものだけをログに出力させる。 近くで除外するという考えが正しいのだろうが、 転送元ノードが多くなった場合に、ポリシーを一元管理させたいためにそうする。 【適合条件】 ・ma
| local | 10080/tcp ssh -L 10080:localhost:20080 username@step1・・・①
2011年4月10日日曜日 cacti コマンドライン(CLI)での操作 cactiをコマンドライン(CLI)で扱う手順を残しておく。 ◆ 登録内容 ① Devices(ホスト)の登録 デバイス名:new_server IPアドレス:10.0.0.1 コミュニティ名:public ② Associated Graph Templates ・ ucd/net - CPU Usage ・ ucd/net - Load Average ・ ucd/net - Memory Usage ③ Associated Data Queries ・ SNMP - Interface Statistics ・ ucd/net - Get Monitored Partitions ◆ 前提 cactiはインストール済みとする コマンド操作はcactiユーザで行う $ su -
2台のサーバ間がTCPハーフコネクション状態になる事象が発生した。 TCP keepalive(キープアライブ)の設定でその状態を解消するための手段をメモしておく。 ◆ 構成 サーバAとサーバB ◆ アプリケーション仕様 サーバAがサーバB上のファイルを定期的に取得する。 両サーバ間はTCPコネクションを張り続けている。通信ごとに接続する仕様ではない。 ◆ トラブル サーバBに障害が発生し、サーバBが突然ダウンした。 そのためサーバBからサーバAへのTCPのクローズ処理が行われず、 サーバAだけにTCPの状態がESTABLISHEDで残るハーフコネクションとなってしまった。 LANケーブルが抜けた場合なども同じ状態になるだろうか。 ハーフコネクションの有無は、サーバA、サーバBでそれぞれ "lsof -n"、"netstat -an" などのコマンドを打ち、状態がESTABLISHEDにな
Hadoopを利用するうえで必要な知識を密度濃くまとめた。 ◆ 構成 マスタ スレーブ HDFS NameNode DataNode MapReduce JobTracker TaskTracker mapper(×起動数) reducer(×起動数) 本ブログ内では物理ホスト3台を利用する。 node01 マスタ node02 スレーブ1 node03 スレーブ2 NameNodeのSecondaryNameNodeはどちらかを利用できる。 CheckpointNode 一定の間隔で同期する BackupNode 常に同じ情報を保持し同期する こちらは0.2.1以降でしか利用できない ◆ 事前作業 javaをインストールする。 # su - # yum install java-1.6.0-openjdk hostsへ登録する。 # vi /etc/
linuxサーバのOS全体に効くカーネルパラメータのチューニング箇所と その設定値、またその理由をまとめておく。 あくまで自分の環境ではこうした、というだけであり、 提供するサービスごとに検討が必要である。 どこをどう変更するのか、または変えないのか、その判断材料にはなるだろう。 ※ユーザ単位でシステムリソースに制限をかける場合をこちらを参照してほしい。 以下は/etc/sysctl.conf で設定するものとする。 ● 大規模サイト用チューニング kernel.pid_max 動作:pidの最大数 設定値:131072 理由:pidを枯渇させない vm.max_map_count 動作:mmapやmalloc時にメモリを仮想空間にマッピングできる最大ページ数 設定値:300000 理由:マッピングできなくなる事態を防ぐ net.core.somaxconn 動作:接続(ソケット)キューの
2013年2月28日木曜日 Hadoopチューニング Hadoopを利用できる環境は整えた。 規模を大きくしていく場合に考量すべき最低限の チューニング個所をまとめておく。 ◆ HDFS関連 hdfs-site.xml 内で設定 ● ブロックサイズの設定 dfs.block.size ディフォルト:67108864(64MB) 変更:134217728(128MB) ブロック数の削減、またその数を抑えてヒープメモリを抑える ● レプリケーション数の設定 dfs.replication ディフォルト:3 変更:3 (そのままでいいでしょう) 必要なディスク容量は、単純に3倍になるのではなく、 MapReduceの中間データも書き込まれるので4倍程度は必要。 ● DataNodeへの上限接続数 dfs.datanode.max.xcievers(0.2.0系)
RX packets:1229784925 errors:0 dropped:830 overruns:0 frame:0
次のページ
このページを最初にブックマークしてみませんか?
『Blog Alpha Networking』の新着エントリーを見る
j次のブックマーク
k前のブックマーク
lあとで読む
eコメント一覧を開く
oページを開く