Programming

APIサーバを作ってみた: Pocketの記事をアーカイブするよ

  • POST
GolangでPocketの記事をアーカイブするAPIサーバを作ってみました。 困っていたこと 通勤中などにiPhoneで読んでいて気になった記事は、一度Pocketに ブックマークすることにしています。その後は、Workflowを用いて色々と行なっています。 ここで困ったことに気づきました。その色々行なった後にPocketに登録した記事をアーカイブしたいのですが、WorkflowからはPocketの記事をアーカイブできませんでした。。。 ただ、Workflowからは任意のHTTPリクエストを送信できることに気づいたので、簡単なAPIサーバを立てて、Pocketの記事をアーカイブすることとしました。 検討したこと 色々と検討したことのまとめです。 言語選定 お仕事柄色々なOSに触る機会があるので、お手軽に各種OSのバイナリが生成できるGolangで作成して、習熟することにしました。 ライブラリ ウェブサーバのライブラリには、ginを使って見ることにしました。こちらはお仕事で、HTTPリクエストを受け取るためのモックWebサーバを立てる時にお世話になったので。 また、Pocket用のライブラリは、go-pocketを使うこととしました。 書いてみた とりあえず書いてみます!APIサーバは、2つの部分からなります: HTTPリクエストを受け付ける、ウェブサーバの部分 HTTPリクエストに応じて、実際の処理を行う部分 ひとつずつ進めていきます: ウェブサーバ部分 ウェブサーバ部分はginを用いているので、こんな感じで書けるみたいです: package main import ( "os" "github.com/gin-gonic/gin" ) func main() { r := gin.Default() // http://localhost:8080/delete で HTTP POSTリクエストを受け付けるよ r.POST("/archive", func(c *gin.Context) { // POSTリクエストに付随するフォームデータからデータを取得するよ auth := c.PostForm("auth") // authからデータ取得 url := c.PostForm("url") // urlからデータ取得 // authで送られてきたデータが”password”だったら if auth == "password" { // レスポンスとしてステータスコード200とJSONを返す c.JSON(200, gin.H{ "auth": auth, "url": url, }) // authが”password”でなければ } else { // ステータスコード401を返すよ c.

『Webアプリエンジニア養成読本』には監視しきい値のサンプル載ってて良さげ

  • POST
『Webアプリエンジニア養成読本』を買いました。Rubyでのウェブアプリの作り方についてはとても参考になりました。 でも個人的にこの本について素晴らしいと思ったかと言えば、サービス観点で監視すべき項目と閾値列挙してくれていることと思います。気になった部分についてメモ: 外形監視 例えばhttppingなどを用いたウェブページが許容できる範囲内の時間でレスポンスを返してくれているのか。レスポンスは想定されるものなのか、などなどを監視する。 目安としては: 応答時間: 3-5秒 HTTPステータス: 200 レスポンスに含まれるキーワード: ページ末尾のキーワード 人が自分の操作に対して反応していると感じるのは、レスポンスが3秒以内の時というのはよく聞く話。それを適用すべきだよねー、という話。ページ末尾のキーワードがレスポンスに含まれていることを確認するというのはお婆ちゃんの知恵袋的な気がしたのでメモ。 デーモン監視 mysqlとかの監視を想定している。主な監視項目は: プロセスの監視 外部からの接続の可否 ステータス 応答時間 リソース監視 サーバ上のリソースの監視を行います。主な監視項目は: CPU使用率: 常に90%/コア以下になっていること Load Average: コア数以下であること スワップ: 使用率が50%以下になっていること ストレージ: 空き容量が20%以上か 死活監視 日本国内なら200-500msecとかが目安っぽい。 Webアプリエンジニア養成読本[しくみ、開発、環境構築・運用…全体像を最新知識で最初から!

Perlのリファレンスを学ぶ

  • POST
はじめに 『すぐわかる オブジェクト指向 Perl』を読んでいます。CやGaucheとの関連から結構、頭に入ってきやすいです。自分用の備忘録として書いておきます。 主な違い Perlのリファレンスというのは、Cのポインタのこと。主な違いは: C言語のポインタは、メモリーアドレスがダイレクトに入っている。 ある文字列の1文字目をC言語のポインタで指し、ポインタに1加算すると、ポインタは2文字目を指す。同様に、ある配列の1要素目を指しているポインタに1を加算すると2要素目を指す。このようにポインタの中身を自由に計算できる。 ポインタを使うときは、コンピュータのどのメモリーをどのぐらい使うかあらかじめ計算しておく必要がある。 ポインタに意味のない値をうっかり入れてしまったり、不適切な演算を行ったりすると、プラグラムが馬鹿正直にそのメモリ空間を指すので暴走してしまう。 コンピュータ上ではプログラム自身もデータである。ポインタ演算の失敗によって、メモリー上の他のプログラムやOSも書き換えられてしまうことによって軒並み暴走が起こる可能性がある。 スカラー変数のリファレンス Perlの場合 use strict; use warnings; my $age = 26; my $ref_age = \$age; print($$ref_age, "\n"); Cの場合 #include <stdio.h> int main(int argc, char *argv[]) { int age = 26; int *ref_age = printf("%3d\n", *ref_age); return ; } 配列のリファレンス Perlの場合 use strict; use warnings; my @month = ( 'January', 'February', 'March', 'April', 'May', 'June', 'July', 'August', 'September', 'October', 'November', 'December' ); # $ref_monthに@monthのリファレンスを代入 my $ref_month = \@month; # 配列のデリファレンス print(@$ref_month, "\n"); print($$ref_month[1], "\n"); # $$ref_month[4]のシンタックスシュガー print($ref_month->[4], "\n"); Cの場合 char型の二次元配列をポインタでしか宣言できなかった(.

研修に行ってきてもらってきた課題

  • POST
Bashシェルスクリプトの研修に行ってきました。そこでシェルスクリプト用の課題を色々ともらってきたのですが、最後のカレンダー作成だけはシェルよりかはCとか他の言語でくんだ方が勉強になるように思ったので、試行錯誤中。ロジックもらったから、後は組んでみるだけなんです。とりあえず途中の状態を貼り付けておく: 年と月をキー入力すると、その月のカレンダーが表示されるスクリプトを作成してください。その月の一日の曜日は外部関数を使い求めてください。計算の基準日は2001年1月1日とする。年は2003年から2099年とする。 Todos: カレンダー表示部分を作成する(現状は入力された年が閏年かの判定と何日あるかしか表示していないので) /* ======================= */ /* === Include library === */ /* ======================= */ #include <stdio.h> #include <stdlib.h> /* ==================== */ /* === Declarations === */ /* ==================== */ int days_of_month[13] = {31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31, 29}; char n_month[13][4] = {"Jan", "Feb", "Mar", "Ape", "May", "Jun", "Jul", "Aug", "Sep", "Nov", "Oct", "Dec", "Feb"}; /* ================= */ /* === Functions === */ /* ================= */ void d_print (int arg[], int num) { int i = ; for (i = ; i < num; ++i) { printf("Array [%d]: %d\n", i, arg[i]); } } /* === Function isleap === */ /* this function checks whether the year is leap year or not.

hatena-modeの投稿ログをあさってはてなのリストを作るスクリプト

  • POST
「perl」に関連する最近のエントリ 2008-07-02 – 武蔵の日記 2008-05-29 – 武蔵の日記 2008-05-22 – 武蔵の日記 こんなのをつくってみたくて、Perlでつくりました。 #!/usr/bin/perl # === use === use strict; use warnings; # 引数が指定されていなければ終了 exit if ($#ARGV == -1); # 検索するディレクトリの指定(絶対パス) my $init_dir = "/Users/simoom634/Documents/hatena/"; # 表示させる個数 my $num = 3; # ファイル名を格納する配列 my @filenames; # 出力用文字列を格納する配列 my @outputs; # 検索する文字列格納用変数(正規表現可能) my $expr = shift(); # サブルーチンの呼び出し # -->ファイル名の列挙 &list($init_dir); # サブルーチンの呼び出し # -->整形して、@outputsに格納 &prnt_titles(@filenames); if (($num + 1) < @outputs) { print ($outputs[]); for (my $i = ; $i < $num; $i++) { print(pop(@outputs)); } } else { print @outputs; } # 終了 exit; # ==================== # === サブルーチン === # ==================== # --->ファイル名列挙 # 引数として与えられたディレクトリの中から # 「\d+」に該当するものだけを列挙して # @filenameに格納する sublist { # 引数を$dirnameに代入 my $dirname = shift; # ディレクトリを開いて、一つ一つ処理 opendir(DIR, $dirname) or die "$dirname: $!