読者です 読者をやめる 読者になる 読者になる

インターネットサーバーを知ろうの巻

linux

1. インターネットサーバーってどんなことができるの?

独自ドメインを取得すると、
メールのやりとりをしたりする機能をインターネットを通じて提供できたり(メールサーバー)、Webページを公開できたりするのだにょん(webサーバー)!

f:id:k_ootake:20160612193615p:plain

2. 固定IPのインターネットサーバーのネットワーク構築

独自のドメインを取得するためには、ユーザー名義のグローバルIPアドレスが取得できるインターネットサービスへの契約が必要なんだ!
通常、8個以上のIPアドレスを取得できるのだけど、インターネット接続サービスによっては、オプションで固定IPアドレスが割り当ててもらえるサービスがあるのだ!この場合、割り当ててもらったIPアドレスはユーザー名義ではないので、独自ドメインによるサーバー運用ができない点に気をつけるのだにょん!!

f:id:k_ootake:20160613004924p:plain

3. ダイナミックIPのインターネットサーバーのネットワーク構成

インターネット接続に利用するIPアドレスが変化するダイナミックIPの環境でも制限はあるけどインターネットサーバーの運用はできるの!
それは、現在利用しているIPアドレスを外部のDNSサービスに登録できるダイナミックDNSというサービスを使うのだにょんにょん!!

f:id:k_ootake:20160613013254p:plain

CentOSってなに??

linux

1. CentOSってなに??

Community ENTerprise Operating System (コミュニティベースで開発された、エンタープライズ用途のOS)の略。 サーバーとしてよく使われてるだにょん! 商用のエンタープライズ用途LInuxとしては、Red Hat社のRed Hat Enterprise LinuxRHEL)が代表的なんだけど。。。そのREHLをベースに作られていて、REHLのソースコードから商用を含まない形で再構成されたんだって。
メリットはRHELと互換でありながら無償であること!!でも有償のREHLで受けられるサポートや商用パッケージは使えないのだな。残念。。 なのでその点は割りきってサーバーを構築するのに向いているディストリビューションだと思ってね!
あと、Red Hat社は有償のRHELだけでなく、Fedoraという無償のディストリビューションを提供するFedora Projectをサポートしているの!
半年ごとにリリースされるFedoraで新機能を試しつつ、そのノウハウをRHELに反映しているのよ!

むむ!!FedoraRHELCentOSの関係が難しいだにょ(><)

2.FedoraRHELCentOSの関係
f:id:k_ootake:20160611120906p:plainおわり

linuxってなに???

linux だにょん

1. Linuxとは?

OS!!

Linuxはね!1991年、リーナス・トーバル氏が個人で開発したんだよ。(私とLinuxタメ!)
フリーソフトウェアのためのライセンスGPLにより、ライセンスされてオープンソースとなり、そこから皆がlinuxの開発をして進化を続けたんだな!そんな経歴をもってるから最大の特徴は、内部が完全に公開されていることフリーソフトウェアであることだにょん。
LInuxって、厳密にいうとCPUを中心にメモリやファイル入出力などのコンピューターとして必要な機能をソフトウェアにうけもつカーネルのことを指すんだ!!!もちろんこれだけでは使えないので、ユーザーにとって必要な物をパーケージに詰め込んで使うよ!これをLInuxディストリビューションと呼ぶんだ!!そのこともあって、この頃はLinuxディストリビューションが広義にlinuxと呼ばれているんですにょん!

2. Linuxディストリビューション

この3つで構成されているよん!Linuxディストリビューションの種類は3つ、 DebianSlackwareRed Hat Linuxの3種類しかないよん! Linuxカーネルと標準ライブラリの2つは、どのバージョンのものを利用しているか、といった程度の違いしかないんだけど、大事なのはソフトウェアにゃので、どの種類を使うか吟味してね!!
openSUSE(Slackware系列)、Ubuntu(Debian系列)→GUI寄り
CentOS(Red Hat Linux系列)、Debian GNU/Linux(Debian系列)→CUI寄り

こんなのインストールしてどんどん自分好みのLinuxにしちゃおう!!!!!

2. ここがすごいぞLInux

  • 安定性 → 特定のプログラムに問題が起こっても、そのプログラムだけを再起動or停止できるしくみ!pc自体は再起動の必要なし!
  • 信頼性 → 世界中で多く使われてる! 動作するプログラムもサーバーとしての実績あり!
  • 低コスト → 高価なサーバー専用機は必要なし!OSもソフトウェアも安く手に入れられる!

つまりサーバー用としてもいいって言えるんじゃないかな!

さらにさらに(><)

  • ネットワークとの親和性が高い → インターネットはUnixというOSと共に発展してきたネットワークで、インターネット上のサーバー機能はUnix系のOSによって提供されたし今でも中核を担っているのはUnix系OS!このUnix系OSをパソコンでも使えるように作られたのが、Linux! さらにイントラネットとインターネットの両方との仲良しなのでサーバーに適しているのだにょん。

そしてそして(><)

おわり

jQuery.Deferredについて知る

jQuery

1. jQuery.Deferredとは?
jQueryバージョン1.5から導入された、非同期処理を上手に扱うたmwの標準モジュール。 javascriptで非同期処理を書くときの問題点として、 コールバック地獄と、エラー処理に例外が使えない などがある。これらを対処した。

2. jQuery.Deferredを使って書いてみる。
(before)

$.ajax({
  …,  // 経歴を入力する
  success: function () {
    // スキルシートを添付する
    $('#upload_btn').on('click', {}, function () {
      // ポートフォリオを添付する
      ga('click', {
        hitCallback: function () {
          // 経歴を入力するとスキルシートを添付とポートフォリオを添付が終わったら遷移させる
          document.location = e.target.href;
        }
      });
    });
  }
});  

!!!!!!(middle?????)!!!!!

$.ajax({}) //  経歴を入力する  
    .done(function () {
        dfdSkillsheet('click', {})   // スキルシートを添付する    
            .done(function () {
                // 経歴を入力するとスキルシートを添付が終わったら、遷移させる
                document.location = e.target.href;
             });
     })

var dfdSkillsheet = function ('event', 'props') {
    var dfd = jQuery.Deferred();  
    $('#upload_btn').on(event, props, function () {
         dfd.resolve();
    });
    return dfd.promise();  
};

階層深くなる!!よくない!
(after)

$.when(
  $.ajax({ … }),            //  経歴を入力する
  dfdSkillsheetl('click', {}), // スキルシートを添付
  dfdGa( 'click')    // ポートフォリオを添付
).done(function () {
  // 自前APIとmixpanelとGoogle Analyticsへの送信が終わったら遷移させる
  document.location = e.target.href;
}); 

並列化させる。

3. Deferredインタフェースの実装方法

var dfdfunc = function (cond) {
    var dfd = jQuery.Deferred();
    cond ?  dfd.resolve() : dfd.reject();
    return dfd.promise(); 
}  
dfdFunc(true)
  .done(function () { console.log('Resolved!'); })
  .fail(function () { console.log('Rejected!'); });  

promise#done と promise#fail はそれぞれ resolved か rejected な promise に対して実行されるコールバックを設定するメソッド!!!!

4.DeferredとPromiseの関係

  • Defferdオブジェクトが作らると、promiseは自動的に生成される。Defferdオブジェクトと非同期処理を関連付けている!!
    f:id:k_ootake:20160607094236p:plain

  • promiseだけ即座にreturn
    f:id:k_ootake:20160607094711p:plain

5. Promiseの基本構造

  • 状態(.state)
  • 状態がresolvedになったときに実行されるコールバック(.done)
  • 状態がrejectedになったときに実行されるコールバック(.fail)
var promise = delayHello(); 
promise.done(function(){/*resolvedで実行*/});  
promise.fail(function(){/*rejectedで実行*/});    

☆.then() →.doneと.failを一気にできる!

delayHello() 
.then(function(){/*resolvedで実行*/}), function(e){/*rejectedで実行*/});  

対応するコールバックのみが起動する!(resolvedになった.doneだけとか)

jQuery.Defferedでは、非同期処理それぞれにpromiseと呼ばれるオブジェクトを割り当て、そのオブジェクトの状態を伝播させていくことで処理を進める。

(jQuery).when()と.done()で順番に処理を実行しよう!

jQuery ]

「この処理の次にこの処理したい!」的な悩みをjQueryで解決!
コールバック関数を設定出来ない.ajax()の処理などのときに便利!

1. .when() →一つ以上のオブジェクト(主に Deferred オブジェクト)を受け取り Promise オブジェクトを生成する。返された Promise オブジェクトに 登録したコールバックは、受け取ったオブジェクトの状態に基づいて実行される。

小難しいことを言っているが。。 要は、.when()は先に終わらせたい処理を書く!

var myPromise = $.when(
    alert(‘部屋の片付け!’);
) ;  

2 . .done() → Deferredオブジェクトがresolveの場合に、実行したいコールバック関数を指定する。

超小難しいことを言っているが。。 要は、.done()は後で実行したい処理を書く!

myPromise.done(function () {
    alert('ケーキを食べる!');    
}) ;

3. メゾットチェーンでつなげる!

$.when(
  $.ajax({
    type: 'GET',
    url: file,
    dataType: 'html',
    success: function(data) {
      $('#directory').html(data);
    },error:function() {
    alert('エラーです');
    }
  })
).done(function() {
  $('#directory_btn').click(function(){
    alert('ボタンが押された');
  });
});

配列を文字列に変換する。var_export、serialize、json_encode

php
$data = array(  
    'bool'   => true,  
    'int'    => 3,  
    'float'  => 1.23,  
    'string' => 'test',  
    'array'  => array('php', 'java', 'ruby'),  
    'key-value' => array(  
        'hot' => 'summer',   
        'cool' => 'autom',   
        'cold' => 'winter',  
    ),  
);    

この配列を文字列に変換!!!!!!!!!
1. var_export ()

$php = var_export($data, true);  
var_dump($php);  
/* 
string(267) "array ( 'bool' => true, 
  'int' => 3, 'float' => 1.23,  'string' => 'test',  'array' =>  
  array ( 0 => 'php',  1 => 'java', 2 => 'ruby', ), 
  'key-value' =>  array ( 'hot' => 'summer', 'cool' => 'autom', 'cold' => 'winter', ),)" 
*/ 
  • PHPとして解釈可能な文字列に変換
  • インポートする直接的に対応する関数はない!
    *eval()関数で文字列を評価する。(危険なのであまり使わない方向で)

2. serialize ()

$serial = serialize($data);  
var_dump($serial);  
// string(285) "a:6:{s:4:"bool";b:1;s:3:"int";i:3;s:5:"float";d:1.229999999999999982236431605997495353221893310546875;s:6:"string";s:6:"test";s:5:"array";a:3:{i:0;s:5:"php";i:1;s:6:"java";i:2;s:10:"ruby";}s:9:"key-value";a:3:{s:2:"hot";s:5:"summer";s:2:"cool";s:3:"auto";s:2:"cold";s:5:"winter";}}"  

*型、大きさ、値を保持する!
* unserialiseで配列に戻してくれる!

3. json_encode()

$json = json_encode($data);  
var_dump($json);  
// string(143) "{"bool":true,"int":1,"float":1.23,"string":"test","array":["php","java","ruby"],"key-value":{"hot":"summer","cool":autom","cold":"winter"}}"  
  • json_decodeで配列に戻してくれる!

cron

linux

1.cronとは

決められた時刻にコマンドを定期的に実行したり、シェルスプリクト、さらにはインタースプリクト言語で書かれたプログラムを動作させたりするデーモンプロセス。
これは、crondというデーモンによって管理することができる。

2. cronの設定

①サービス起動しているか確認

# /etc/rc.d/init.d/crond status  

②設定ファイル確認

/etc/cron.hourly root 毎時実行される自動タスク設定ファイルを置くディレクトリ /etc/cron.daily root 毎日実行される自動タスク設定ファイルを置くディレクトリ /etc/cron.monthly root 毎月実行される自動タスク設定ファイルを置くディレクトリ /etc/cron.weekly root 毎週実行される自動タスク設定ファイルを置くディレクトリ /etc/cron.d root 上記以外の自動タスク設定ファイルを置くディレクト

ここらに実行したいスプリクトを書く!!!!!!!!!!!!!!!!

③ cronコマンドの設定

/etc/crontab root 毎時、毎日、毎月、毎週の自動タスクのメイン設定ファイル を編集
or
crontab -e で編集

SHELL=/bin/bash    ※/etc/passwdの記述に関係なく、強制的にここで定義されたシェルを使う。
PATH=/sbin:/bin:/usr/sbin:/usr/bin    ※パスの設定。ここに記述されたディレクトリ内の実行ファイルはパス名を省略して記述することが可能。
MAILTO=root    ※cronの実行結果をここで指定されたユーザー宛にメールで送ります。(デフォルトではroot)。
HOME=/    ※crondによりプログラム実行されるときの  カレントディレクトリの指定。

# run-parts
01 * * * * root run-parts /etc/cron.hourly
02 4 * * * root run-parts /etc/cron.daily
22 4 * * 0 root run-parts /etc/cron.weekly
42 4 1 * * root run-parts /etc/cron.monthly


分 時 日 月 曜日 コマンド
(曜日は0と7が日曜日、1から月、火、水、木、金、土)

④ cronコマンドの設定 を確認

crontab -l  

ユーザは、それぞれのcrontabファイルを「/var/spool/cron」配下にユーザー名をファイル名として保存される。

# ls -l /var/spool/cron
-rw------- 1 root root 172  3月 3 13:45 root

rootというファイルが作成