「PostgreSQL」を含む日記 RSS

はてなキーワード: PostgreSQLとは

2017-09-13

LAMP環境って

今でも主要な開発環境なの?

この前某社の面接(中途採用)を受けて、結果的には落ちたわけだけど、

LAMP環境がなんとかってコメントとしてあり。

(落ちた直接の原因はLAMP環境経験ではないと思う)

Rails流行ってからPHPPerlはそれほど需要高くなくなったと思ってるし、

業務システムを開発している身としては、PostgreSQLのほうが使いやすイメージが強くて。

今でもWeb系開発ってLAMPが圧倒的なの??

2017-09-11

https://anond.hatelabo.jp/20170910205249

まじな話をすると、N予備校プログラミング入門コースやるのがオススメ

https://www.nnn.ed.nico

一日8時間勉強時間があるなら、だいたい一ヶ月で終わる内容。

月額1000円だけどしっかり勉強すれば一ヶ月の無料間中に終わると思う。

もともとN高等学校のノンプログラマーの生徒をWebエンジニアとして就職させるために作られたカリキュラム講師曰く去年はこれで二人エンジニア就職を決めたらしい。

内容も相当親切に説明していて、プログラミングで何か作るだけじゃなくて、就職必要な環境構築やセキュリティまでみっちりやる。

http://qiita.com/sifue/items/7e7c7867b64ce9742aee#%E3%82%B3%E3%83%B3%E3%82%BB%E3%83%97%E3%83%88%E3%82%92%E3%82%82%E3%81%A8%E3%81%AB%E6%A7%8B%E6%88%90%E3%81%95%E3%82%8C%E3%81%9F%E3%82%B3%E3%83%BC%E3%82%B9%E3%81%A8%E5%86%85%E5%AE%B9

講師が書いてる入門コースで習うことがまとめ。テキスト教材もあるけど授業も1項目を2時間で説明している。授業は週2の生放送とそのアーカイブがある。

↓みたいなことが学べる

----

Webプログラミング入門コース

Web ブラウザとは (Chrome, デベロッパーコンソール, alert)

はじめてのHTML (VSCode, HTML, Emmet)

さまざまなHTMLタグ (h, p, a, img, ul, tableタグ)

HTMLで作る自己紹介ページ (HTMLタグ組み合わせ, コンテンツ埋め込み)

はじめてのJavaScript (JS, ES6, エラー)

JavaScriptでの計算 (値, 算術演算子, 変数, 代入)

JavaScript論理を扱う (論理値, 論理積, 論理和, 否定, 比較演算子, if)

JavaScriptループ (ループ, for)

JavaScriptコレクション (コレクション, 配列, 添字, undefined)

JavaScript関数 (関数, 関数宣言, 引数, 戻り値, 関数呼び出し, 再帰)

JavaScriptオブジェクト (オブジェクト, モデリング, プロパティ, 要件定義)

はじめてのCSS (CSS, セレクタ, background-color, border)

CSSを使ったプログラミング (transform, id, class)

Webページの企画とデザイン (企画, 要件定義, モックアップ, 16進数カラーコード)

診断機能の開発 (const, let, JSDoc, インタフェース, 正規表現, テストコード)

診断機能組込み (div, 無名関数, アロー関数, ガード句, truthy, falsy)

ツイート機能の開発 (リバースエンジニアリング, URI, URL, URIエンコード)

Linux開発環境構築コース

LinuxというOS (VirtualBox, Vagrant, Ubuntuインストール, OS, CUIの大切さ)

コンピューター構成要素 (ノイマンコンピューター, プロセス, lshw, man, ps, dfの使い方)

ファイル操作 (pwd, ls, cd, mkdir, rm, cp, mv, find, ホストマシンとの共有ディレクトリ)

標準出力 (標準入力標準出力標準エラー出力パイプgrep)

vi (vimtutor)

シェルプログラミング (シバン, echo, read, 変数, if)

通信ネットワーク (パケット, tcpdump, IPアドレス, TCP, ルーター, ping)

サーバークライアント (tmux, nc, telnet)

HTTP通信 (http, https, DNS, hostsファイル, ポートフォワーディング)

通信をするボットの開発 (cron, ログ収集)

GitHubウェブサイトの公開 (GitHub, リポジトリ, fork, commit, 情報モラル)

イシュー管理とWikiによるドキュメント作成 (Issues, Wiki)

GitとGitHub連携 (git, ssh, clone, pull)

GitHubへのpush (init, add, status, インデックス, commit, push, tag)

Gitのブランチ (branch, checkout, merge, gh-pages)

ソーシャルコーディング (コンフリクト、プルリクエスト)

Webアプリ基礎コース

Node.js (Node.js, nodebrew, Linux, REPL, コマンドライン引数, プルリク課題)

集計処理を行うプログラム (集計, 人口動態CSV, Stream, for-of, 連想配列Map, map関数)

アルゴリズムの改善 (アルゴリズム, フィボナッチ数列, 再帰, time, プロファイル, nodegrind, O記法, メモ化)

ライブラリ (ライブラリ, パッケージマネージャー, npm)

Slackボット開発 (slack, mention, bot)

HubotとSlackアダプタ (hubot, yo)

モジュール化された処理 CRUD, オブジェクトライフサイクル, filter)

ボットインタフェースとの連携 (モジュールのつなぎ込み, trim, join)

同期I/Oと非同期I/O (同期I/O, 非同期I/O, ブロッキング)

例外処理 (try, catch, finally, throw)

HTTPサーバー (Web, TCPとUDP, Webサーバーの仕組み, Node.jsイベントループ, リスナー)

ログ (ログ, ログレベル)

HTTPのメソッド (メソッド, GET, POST, PUT, DELETE, CRUDとの対応)

HTMLフォーム (フォームの仕組み, form, input)

テンプレートエンジン (テンプレートエンジン, jade)

HerokuWebサービスを公開 (Webサービスの公開, heroku, dyno, toolbelt, login, create, logs)

認証利用者を制限する (認証, Basic認証, Authorizationヘッダ, ステータスコード)

Cookie を使った秘密匿名掲示板 (Cookie, Set-Cookie, expire)

UI、URI、モジュール設計 (モジュール設計, フォームメソッド制限, リダイレクト, 302)

フォームによる投稿機能の実装 (モジュール性, textarea, 303)

認証された投稿の一覧表示機能 (パスワードの平文管理の問題, 404, テンプレートのeach-in)

データベースへの保存機能の実装 (データベース, PostgreSQL, 主キー)

トラッキングCookieの実装 (トラッキング Cookie, IDの偽装, Cookie の削除)

削除機能の実装 (データベースを利用した削除処理, 認可, サーバーサイドでの認可)

管理者機能の実装 (Web サービス管理責任, 管理者機能の重要性)

デザインの改善 (Bootstrap, レスポンシブデザイン, セキュリティの問題があるサイトを公開しない)

脆弱性 (脆弱性, 脆弱性で生まれる損失, 個人情報保護法, OS コマンド・インジェクション)

XSS脆弱性対策 (XSS, 適切なエスケープ処理, リグレッション)

パスワード脆弱性対策(ハッシュ関数, メッセージダイジェスト, 不正アクセス禁止法, パスワードジェネレーター, 辞書攻撃)

セッション固定化攻撃脆弱性対策 (セッション, セッション固定化攻撃, ハッシュ値による正当性チェック)

より強固なセッション管理 (推測しづらいセッション識別子, 秘密鍵)

CSRF脆弱性対策 (CSRF, ワンタイムトークン)

安全なHerokuへの公開 (脆弱性に対する考え方, HTTPの廃止)

Webアプリ応用コース

Webフレームワーク (Express.js, フレームワーク導入, 簡単なAPI, セキュリティアップデート, Cookie パーサー, ミドルウェア, 外部認証, ロガー)

ExpressのAPI (app, Properties, Request, Response, Router)

GitHubを使った外部認証 (Passport, OAuth)

スティングフレームワーク (Mocha, レッド, グリーン, リファクタリング)

継続的インテグレーション (CircleCI)

クライアントフレームワーク (Webpack, Chrome 以外のブラウザでもES6)

DOM操作フレームワーク (jQuery, jQueryアニメーション, this)

AJAX (jQuery.ajax, クロスドメイン, 同一生成元ポリシー, x-requested-by, CORS)

WebSocket (WebSocket, WebSocketの状態遷移, Socket.io)

RDBとSQL (DDL, DCL, CREATE, DROP, INSERT, DELETE, UPDATE, WHERE)

データモデリング (リレーショナルモデル, 正規化)

テーブルの結合 (外部結合, 内部結合, 片側外部結合, JOIN ON)

インデックス (インデックス, 複合インデックス, Bツリー)

集計とソート (SUM, COUNT, ORDER BY, GROUP BY)

「予定調整くん」の設計 (要件定義、用語集、データモデル、URL設計モジュール設計、MVC)

認証とRouterモジュールの実装 (Mocha, supertest, passport-stub, モックテスト)

予定とユーザーの保存 (セキュリティ要件, UUID, 複合主キー)

予定とユーザーの一覧の表示 (非同期処理, Promise, then)

出欠とコメントの表示 (入れ子の連想配列, Promise.all, 子どもからデータを消す)

出欠とコメント更新 (Promiseチェイン, リファクタリング)

予定の編集と削除 (要件の衝突, 関数再利用)

デザインの改善 (this, グローバルオブジェクト)

セキュリティ対策と公開 (X-Frame-Options, Heroku環境変数)

2017-05-22

なんでAzureってこんな空気なのかなあ

Build2017 で MySQLPostgreSQLサポートしましたって言っても誰も見向きもしてないよね。

AmazonAurora との比較記事くらいあっても良いんじゃないの。

2017-05-14

http://anond.hatelabo.jp/20170513223605

関西圏でLaravel(PHP)+Postgresql+jQuery開発でプログラマーネットワークアナリスト2年目

基本給22、残業60-80hで手取り30ぐらいなんだがこれって妥当

60とか80って部長でさえそんなにもらってないのに、一体どこに行けばそんな給料貰えるの教えてマジで

2016-12-29

はてブで「Amazon」と検索してみると

昨今話題になってるヤマト佐川関連のブックマークが上位を占めるかと思いきや、まったく違った。

2016年12月29日10:54時点、本文、新着順で検索

Amazon検索結果 (絞り込み: 3 users 以上) 約 3,423 件中 1 - 40 件目 (0.26 秒)

以下略

ECサイト連想させるトピックほとんどなくて、AmazonB2B向けサービスを充実させていることに驚いた。

Amazonって表向きは物流業界革命問題を起こしている要因に挙げられているけど、EC以外のインパクトがどれだけ大きいのか門外漢なので分からない。

↑でブクマ付けた人、何が起きるのか教えて

2016-11-06

http://anond.hatelabo.jp/20161106094548

LaravelのCRUD程度ができる、CakePHPはやったことないけど同じPHPフレームワークだし覚える気はある。

jqueryアコーディオンとかは何も見ないでも作れるが他はネットで調べつつ。

PostgreSQLをよく使ってたけどMySQLはしたことない。

でもフレームワーク使うならSQL文ほぼ使わないだろうから追々覚えたら行けるだろ

って考えの大阪プログラマーだけど雇ってもらえます

2016-11-04

IT界隈の動物たち

GitHubの謎生物が気になり、せっかくなのでIT界隈の動物(?)を用いた名前ロゴの由来など調べてみた。

※追記あり:Gopherファンに襲われそうなので。ごめんねGopher

GitHub

種類:octocat(ネコタコ

名前:monalisa

Q.どうしてタコなのに8本足じゃないの?

A.なにも考えずに描いたからね!

もともとデザイナーはoctopussと呼んでいたが、いくら訂正してもGitHub社員がoctocatと呼ぶため、octocatで落ち着いた。

octocatはあの生物種の名称であり、monalisaという名前社員の娘が学校課題で名付けたもの

Python

種類:ニシキヘビ

名前: -

イギリスコメディ番組空飛ぶモンティ・パイソン』より。

またPythonという英単語はニシキヘビを意味するため、マスコットとしてヘビが用いられる。

オライリーの本とかすごい表紙だよね。

PHP

種類:ゾウ

名前:ElePHPant

PHP」という字面が、横から象を見たような感じなので。

PostgreSQL

種類:ゾウ

名前:slonik

動物ロゴにしたいなら、象なんてどうだい?アガサ・クリスティ小説にもある『象は忘れない』だ」

   ― PostgreSQL発足時のメーリスより

Evernote

種類:ゾウ

名前: -

象は記憶力が非常に優れた動物のため。PostgreSQLと同じで、象の優れた能力あやかっている。

GNU

種類:ヌー

名前: -

GNU is Not Unix.

Mozilla Firefox

種類:キツネ

名前: -

もともとPhoenixという名前だったが、商標権侵害していたので、公募Firebirdという名前に決定。

しかし今度はDBに同じ名前があったので、Firefoxレッサーパンダの別名)に改名

みなさん命名は慎重に。

Docker

種類:クジラ

名前Moby Dock

白鯨Moby-Dick)』より。クジラ採用した理由デザイン見れば納得。

個人的に一番センスのある名前デザインだと感じる。

Linux

種類:ペンギン

名前Tux

名前タキシードTuxedo)を着ているように見えるから

ロゴコンテストで決定されたが、他の作品を見ればなぜ選ばれたのかよくわかる。デザインって大事

https://www.cs.earlham.edu/~jeremiah/linux-pix/linux-logo.html

Twitter

種類:鳥

名前:ラリー・バード

名前NBAのラリー・バード選手より。社員ファンだったらしい

ちなみに初期のTwitterデザインGitHubデザイナーが手掛けたもの。すごいっすね。

Seaser

種類:シーサー

名前: -

開発者出身地沖縄だったので。

MySQL

種類:イルカ

名前:Sakila

データ大海原を進む、という意味をこめてイルカ採用

Apache Tomcat

種類:ネコ

名前: -

オライリーの本に載ることを考慮して動物マスコットにしようと考え、「自立した強かさ」を持つという意味Tomcat(雄猫の愛称)を採用

しかし、猫はオライリーUML本で使われてしまい、念願のTomcat本にはユキヒョウが使われたという…。

が、最近Tomcat本には猫が使われた。めでたし。

Apple

種類:Dogcow(イヌ+ウシ)

名前:Clarus

昔々、Mac OSで用紙の向きや色を表示するために使用されていたらしい。

知らんわ。

Plan 9 from Bell Labs

種類:ウサギ

名前:Glenda

OS名前であるPlan 9~」はエド・ウッドの『Plan 9 from Outer Space』に由来。

ウサギ名前であるGlendaはエド・ウッドの『グレンとグレンダ』に由来。

どんだけエド・ウッド好きなんだよ。

Go

種類:ホリネズミ

名前Go Gopher

彼の歴史Goプロジェクトよりずっと前、1999年に遡る。

ニュージャージーのWFMUラジオで、Renee Frenchによって宣伝用のTシャツに描かれたのが、彼の初登場。

その後、Bell labsのメールシステムアバターとして起用もされた。

(ちなみにReneeはBell labsのGlendaを描いた人。Glendaもアバターの一員だった)

そうして2009年Goプロジェクトが発足し、ロゴ検討していたメンバーにReneeが無償で描いてあげたのが「Go gopherである

みんなGo Gopherと呼ぶので、特に固有の名前は無いらしい。

由来は下記サイトにありました。

https://blog.golang.org/gopher



調べてみた感想:週末にエド・ウッド作品見てみようかな、と思いました。

2016-08-07

ディープラーニングAV女優類似画像検索サイトをつくった

Babelink

http://www.babelink.net/

作った動機は、そっくりNAVIをつくった人と似ていて技術勉強のためと今ある類似検索サイトへの不満からです。

そっくりNAVI - 気になる子顔写真で、似てるAV検索できるサイトを作った

http://anond.hatelabo.jp/20160719033025#tb

... 素人からも探せるのは素晴らしいと思います

ディープラーニング最近流行りの技術で、一般的物体認識では人間匹敵するか

もしくは超えるぐらい画像認識の精度がいい手法です。

今回は自分が持っている画像有名人に似ているAV女優を探すという

極めて実用的な問題にその手法を試したいと思い、サイトをつくってみました。

使った主要なライブラリを紹介しておきます

■使ったライブラリなど

python (プログラミング言語)

PostgreSQL (データベース)

・flask (Web構築)

opencv (画像認識)

・dlib (顔検出)

chainer (ディープラーニング)

・FlexSlider (画像スライダー)

・Awesomplete (入力補完)

ぼくは一応エンジニアのはしくれですが、pythonとか仕事でちゃんと使ったことなレベルです。

それでも3~4ヶ月程度である程度のサイトはつくれるので、みなさんも是非つくってみてください。

課題

ディープラーニングでは非常に多くの画像機械学習させる必要があるのですが、

現状では学習のための画像がまだまだ足りていないので、あまりいい精度はでていません。

あとはディープラーニングで精度を高めるには、ハイスペックGPUマシン必要になるのですが、

そんなもの持っていないので精度をこれ以上あげるのは難しかったです。

そんなかんじで、まだまだ改良の余地はたくさんあるので、楽しみにしていてください。

■参考にしたサイト

完全に一致

http://anond.hatelabo.jp/20101203150748

京大画像処理を学んだ僕が本気でエロWEBサービス作ったった

http://anond.hatelabo.jp/20130122180847

UIは一応Netflixを参考にしてます

画像収集サーバー容量の問題もあり、していないので画像検索を気軽に試してみてください。

Babelink

http://www.babelink.net/

2016-01-14

北朝鮮公式

かなりオープンサイトだ。

nmap www.korea-dpr.com

Starting Nmap 6.47 ( http://nmap.org ) at 2016-01-14 21:20 JST
Stats: 0:00:00 elapsed; 0 hosts completed (1 up), 1 undergoing Connect Scan
Connect Scan Timing: About 0.55% done
Nmap scan report for www.korea-dpr.com (87.98.231.40)
Host is up (0.28s latency).
rDNS record for 87.98.231.40: cluster011.ovh.net
PORT      STATE    SERVICE
1/tcp     open     tcpmux
3/tcp     open     compressnet
4/tcp     open     unknown
6/tcp     open     unknown
7/tcp     open     echo
9/tcp     open     discard
13/tcp    open     daytime
17/tcp    open     qotd
19/tcp    open     chargen
20/tcp    open     ftp-data
21/tcp    open     ftp
22/tcp    open     ssh
23/tcp    open     telnet
24/tcp    open     priv-mail
25/tcp    closed   smtp
26/tcp    open     rsftp
30/tcp    open     unknown
32/tcp    open     unknown
33/tcp    open     dsp
37/tcp    open     time
42/tcp    open     nameserver
43/tcp    open     whois
49/tcp    open     tacacs
53/tcp    open     domain
70/tcp    open     gopher
79/tcp    open     finger
80/tcp    open     http
81/tcp    open     hosts2-ns
82/tcp    open     xfer
83/tcp    open     mit-ml-dev
84/tcp    open     ctf
85/tcp    open     mit-ml-dev
88/tcp    open     kerberos-sec
89/tcp    open     su-mit-tg
90/tcp    open     dnsix
99/tcp    open     metagram
100/tcp   open     newacct
106/tcp   open     pop3pw
109/tcp   open     pop2
110/tcp   open     pop3
111/tcp   open     rpcbind
113/tcp   open     ident
119/tcp   open     nntp
125/tcp   open     locus-map
135/tcp   open     msrpc
139/tcp   filtered netbios-ssn
143/tcp   open     imap
144/tcp   open     news
146/tcp   open     iso-tp0
161/tcp   open     snmp
163/tcp   open     cmip-man
179/tcp   open     bgp
199/tcp   open     smux
211/tcp   open     914c-g
212/tcp   open     anet
222/tcp   open     rsh-spx
254/tcp   open     unknown
255/tcp   open     unknown
256/tcp   open     fw1-secureremote
259/tcp   open     esro-gen
264/tcp   open     bgmp
280/tcp   open     http-mgmt
301/tcp   open     unknown
306/tcp   open     unknown
311/tcp   open     asip-webadmin
340/tcp   open     unknown
366/tcp   open     odmr
389/tcp   open     ldap
406/tcp   open     imsp
407/tcp   open     timbuktu
416/tcp   open     silverplatter
417/tcp   open     onmux
425/tcp   open     icad-el
427/tcp   open     svrloc
443/tcp   open     https
444/tcp   open     snpp
445/tcp   filtered microsoft-ds
458/tcp   open     appleqtc
464/tcp   open     kpasswd5
465/tcp   open     smtps
481/tcp   open     dvs
497/tcp   open     retrospect
500/tcp   open     isakmp
512/tcp   open     exec
513/tcp   open     login
514/tcp   open     shell
515/tcp   open     printer
524/tcp   open     ncp
541/tcp   open     uucp-rlogin
543/tcp   open     klogin
544/tcp   open     kshell
545/tcp   open     ekshell
548/tcp   open     afp
554/tcp   open     rtsp
555/tcp   open     dsf
563/tcp   open     snews
587/tcp   open     submission
593/tcp   open     http-rpc-epmap
616/tcp   open     sco-sysmgr
617/tcp   open     sco-dtmgr
625/tcp   open     apple-xsrvr-admin
631/tcp   open     ipp
636/tcp   open     ldapssl
646/tcp   open     ldp
648/tcp   open     rrp
666/tcp   open     doom
667/tcp   open     disclose
668/tcp   open     mecomm
683/tcp   open     corba-iiop
687/tcp   open     asipregistry
691/tcp   open     resvc
700/tcp   open     epp
705/tcp   open     agentx
711/tcp   open     cisco-tdp
714/tcp   open     iris-xpcs
720/tcp   open     unknown
722/tcp   open     unknown
726/tcp   open     unknown
749/tcp   open     kerberos-adm
765/tcp   open     webster
777/tcp   open     multiling-http
783/tcp   open     spamassassin
787/tcp   open     qsc
800/tcp   open     mdbs_daemon
801/tcp   open     device
808/tcp   open     ccproxy-http
843/tcp   open     unknown
873/tcp   open     rsync
880/tcp   open     unknown
888/tcp   open     accessbuilder
898/tcp   open     sun-manageconsole
900/tcp   open     omginitialrefs
901/tcp   open     samba-swat
902/tcp   open     iss-realsecure
903/tcp   open     iss-console-mgr
911/tcp   open     xact-backup
912/tcp   open     apex-mesh
981/tcp   open     unknown
987/tcp   open     unknown
990/tcp   open     ftps
992/tcp   open     telnets
993/tcp   open     imaps
995/tcp   open     pop3s
999/tcp   open     garcon
1000/tcp  open     cadlock
1001/tcp  open     unknown
1002/tcp  open     windows-icfw
1007/tcp  open     unknown
1009/tcp  open     unknown
1010/tcp  open     surf
1011/tcp  open     unknown
1021/tcp  open     exp1
1022/tcp  open     exp2
1023/tcp  open     netvenuechat
1024/tcp  open     kdm
1025/tcp  open     NFS-or-IIS
1026/tcp  open     LSA-or-nterm
1027/tcp  open     IIS
1028/tcp  open     unknown
1029/tcp  open     ms-lsa
1030/tcp  open     iad1
1031/tcp  open     iad2
1032/tcp  open     iad3
1033/tcp  open     netinfo
1034/tcp  open     zincite-a
1035/tcp  open     multidropper
1036/tcp  open     nsstp
1037/tcp  open     ams
1038/tcp  open     mtqp
1039/tcp  open     sbl
1040/tcp  open     netsaint
1041/tcp  open     danf-ak2
1042/tcp  open     afrog
1043/tcp  open     boinc
1044/tcp  open     dcutility
1045/tcp  open     fpitp
1046/tcp  open     wfremotertm
1047/tcp  open     neod1
1048/tcp  open     neod2
1049/tcp  open     td-postman
1050/tcp  open     java-or-OTGfileshare
1051/tcp  open     optima-vnet
1052/tcp  open     ddt
1053/tcp  open     remote-as
1054/tcp  open     brvread
1055/tcp  open     ansyslmd
1056/tcp  open     vfo
1057/tcp  open     startron
1058/tcp  open     nim
1059/tcp  open     nimreg
1060/tcp  open     polestar
1061/tcp  open     kiosk
1062/tcp  open     veracity
1063/tcp  open     kyoceranetdev
1064/tcp  open     jstel
1065/tcp  open     syscomlan
1066/tcp  open     fpo-fns
1067/tcp  open     instl_boots
1068/tcp  open     instl_bootc
1069/tcp  open     cognex-insight
1070/tcp  open     gmrupdateserv
1071/tcp  open     bsquare-voip
1072/tcp  open     cardax
1073/tcp  open     bridgecontrol
1074/tcp  open     warmspotMgmt
1075/tcp  open     rdrmshc
1076/tcp  open     sns_credit
1077/tcp  open     imgames
1078/tcp  open     avocent-proxy
1079/tcp  open     asprovatalk
1080/tcp  open     socks
1081/tcp  open     pvuniwien
1082/tcp  open     amt-esd-prot
1083/tcp  open     ansoft-lm-1
1084/tcp  open     ansoft-lm-2
1085/tcp  open     webobjects
1086/tcp  open     cplscrambler-lg
1087/tcp  open     cplscrambler-in
1088/tcp  open     cplscrambler-al
1089/tcp  open     ff-annunc
1090/tcp  open     ff-fms
1091/tcp  open     ff-sm
1092/tcp  open     obrpd
1093/tcp  open     proofd
1094/tcp  open     rootd
1095/tcp  open     nicelink
1096/tcp  open     cnrprotocol
1097/tcp  open     sunclustermgr
1098/tcp  open     rmiactivation
1099/tcp  open     rmiregistry
1100/tcp  open     mctp
1102/tcp  open     adobeserver-1
1104/tcp  open     xrl
1105/tcp  open     ftranhc
1106/tcp  open     isoipsigport-1
1107/tcp  open     isoipsigport-2
1108/tcp  open     ratio-adp
1110/tcp  open     nfsd-status
1111/tcp  open     lmsocialserver
1112/tcp  open     msql
1113/tcp  open     ltp-deepspace
1114/tcp  open     mini-sql
1117/tcp  open     ardus-mtrns
1119/tcp  open     bnetgame
1121/tcp  open     rmpp
1122/tcp  open     availant-mgr
1123/tcp  open     murray
1124/tcp  open     hpvmmcontrol
1126/tcp  open     hpvmmdata
1130/tcp  open     casp
1131/tcp  open     caspssl
1132/tcp  open     kvm-via-ip
1137/tcp  open     trim
1138/tcp  open     encrypted_admin
1141/tcp  open     mxomss
1145/tcp  open     x9-icue
1147/tcp  open     capioverlan
1148/tcp  open     elfiq-repl
1149/tcp  open     bvtsonar
1151/tcp  open     unizensus
1152/tcp  open     winpoplanmess
1154/tcp  open     resacommunity
1163/tcp  open     sddp
1164/tcp  open     qsm-proxy
1165/tcp  open     qsm-gui
1166/tcp  open     qsm-remote
1169/tcp  open     tripwire
1174/tcp  open     fnet-remote-ui
1175/tcp  open     dossier
1183/tcp  open     llsurfup-http
1185/tcp  open     catchpole
1186/tcp  open     mysql-cluster
1187/tcp  open     alias
1192/tcp  open     caids-sensor
1198/tcp  open     cajo-discovery
1199/tcp  open     dmidi
1201/tcp  open     nucleus-sand
1213/tcp  open     mpc-lifenet
1216/tcp  open     etebac5
1217/tcp  open     hpss-ndapi
1218/tcp  open     aeroflight-ads
1233/tcp  open     univ-appserver
1234/tcp  open     hotline
1236/tcp  open     bvcontrol
1244/tcp  open     isbconference1
1247/tcp  open     visionpyramid
1248/tcp  open     hermes
1259/tcp  open     opennl-voice
1271/tcp  open     excw
1272/tcp  open     cspmlockmgr
1277/tcp  open     miva-mqs
1287/tcp  open     routematch
1296/tcp  open     dproxy
1300/tcp  open     h323hostcallsc
1301/tcp  open     ci3-software-1
1309/tcp  open     jtag-server
1310/tcp  open     husky
1311/tcp  open     rxmon
1322/tcp  open     novation
1328/tcp  open     ewall
1334/tcp  open     writesrv
1352/tcp  open     lotusnotes
1417/tcp  open     timbuktu-srv1
1433/tcp  open     ms-sql-s
1434/tcp  open     ms-sql-m
1443/tcp  open     ies-lm
1455/tcp  open     esl-lm
1461/tcp  open     ibm_wrless_lan
1494/tcp  open     citrix-ica
1500/tcp  open     vlsi-lm
1501/tcp  open     sas-3
1503/tcp  open     imtc-mcs
1521/tcp  open     oracle
1524/tcp  open     ingreslock
1533/tcp  open     virtual-places
1556/tcp  open     veritas_pbx
1580/tcp  open     tn-tl-r1
1583/tcp  open     simbaexpress
1594/tcp  open     sixtrak
1600/tcp  open     issd
1641/tcp  open     invision
1658/tcp  open     sixnetudr
1666/tcp  open     netview-aix-6
1687/tcp  open     nsjtp-ctrl
1688/tcp  open     nsjtp-data
1700/tcp  open     mps-raft
1717/tcp  open     fj-hdnet
1718/tcp  open     h323gatedisc
1719/tcp  open     h323gatestat
1720/tcp  open     H.323/Q.931
1721/tcp  open     caicci
1723/tcp  open     pptp
1755/tcp  open     wms
1761/tcp  open     landesk-rc
1782/tcp  open     hp-hcip
1783/tcp  open     unknown
1801/tcp  open     msmq
1805/tcp  open     enl-name
1812/tcp  open     radius
1839/tcp  open     netopia-vo1
1840/tcp  open     netopia-vo2
1862/tcp  open     mysql-cm-agent
1863/tcp  open     msnp
1864/tcp  open     paradym-31
1875/tcp  open     westell-stats
1900/tcp  open     upnp
1914/tcp  open     elm-momentum
1935/tcp  open     rtmp
1947/tcp  open     sentinelsrm
1971/tcp  open     netop-school
1972/tcp  open     intersys-cache
1974/tcp  open     drp
1984/tcp  open     bigbrother
1998/tcp  open     x25-svc-port
1999/tcp  open     tcp-id-port
2000/tcp  open     cisco-sccp
2001/tcp  open     dc
2002/tcp  open     globe
2003/tcp  open     finger
2004/tcp  open     mailbox
2005/tcp  open     deslogin
2006/tcp  open     invokator
2007/tcp  open     dectalk
2008/tcp  open     conf
2009/tcp  open     news
2010/tcp  open     search
2013/tcp  open     raid-am
2020/tcp  open     xinupageserver
2021/tcp  open     servexec
2022/tcp  open     down
2030/tcp  open     device2
2033/tcp  open     glogger
2034/tcp  open     scoremgr
2035/tcp  open     imsldoc
2038/tcp  open     objectmanager
2040/tcp  open     lam
2041/tcp  open     interbase
2042/tcp  open     isis
2043/tcp  open     isis-bcast
2045/tcp  open     cdfunc
2046/tcp  open     sdfunc
2047/tcp  open     dls
2048/tcp  open     dls-monitor
2049/tcp  filtered nfs
2065/tcp  open     dlsrpn
2068/tcp  open     advocentkvm
2099/tcp  open     h2250-annex-g
2100/tcp  open     amiganetfs
2103/tcp  open     zephyr-clt
2105/tcp  open     eklogin
2106/tcp  open     ekshell
2107/tcp  open     msmq-mgmt
2111/tcp  open     kx
2119/tcp  open     gsigatekeeper
2121/tcp  open     ccproxy-ftp
2126/tcp  open     pktcable-cops
2135/tcp  open     gris
2144/tcp  open     lv-ffx
2160/tcp  open     apc-2160
2161/tcp  open     apc-agent
2170/tcp  open     eyetv
2179/tcp  open     vmrdp
2190/tcp  open     tivoconnect
2191/tcp  open     tvbus
2196/tcp  open     unknown
2200/tcp  open     ici
2222/tcp  open     EtherNet/IP-1
2251/tcp  open     dif-port
2260/tcp  open     apc-2260
2288/tcp  open     netml
2301/tcp  open     compaqdiag
2323/tcp  open     3d-nfsd
2366/tcp  open     qip-login
2381/tcp  open     compaq-https
2382/tcp  open     ms-olap3
2383/tcp  open     ms-olap4
2393/tcp  open     ms-olap1
2394/tcp  open     ms-olap2
2399/tcp  open     fmpro-fdal
2401/tcp  open     cvspserver
2492/tcp  open     groove
2500/tcp  open     rtsserv
2522/tcp  open     windb
2525/tcp  open     ms-v-worlds
2557/tcp  open     nicetec-mgmt
2601/tcp  open     zebra
2602/tcp  open     ripd
2604/tcp  open     ospfd
2605/tcp  open     bgpd
2607/tcp  open     connection
2608/tcp  open     wag-service
2638/tcp  open     sybase
2701/tcp  open     sms-rcinfo
2702/tcp  open     sms-xfer
2710/tcp  open     sso-service
2717/tcp  open     pn-requester
2718/tcp  open     pn-requester2
2725/tcp  open     msolap-ptp2
2800/tcp  



  
  

2015-08-06

とうとう人類幸せに導くpgbouncer1.6が公開された

みんな大好きPostgreSQL

複数DBマルチテナントシステムを構築するなら忘れてはいけないコネクションプーリング

大量コネクションを扱うなら都度forkやpre-fork式ではちょっと辛い、イベントベースが好ましい。

もうお分かりですね。pgbouncer1.6の話題です。

PostgreSQL界隈では有名なコネクションプーリング実装が2つあります。 pgpool-II と pgbouncer。

ざっくり言うと高機能の pgpool-II に対して、軽量・大規模向けの pgbouncer という棲み分けがあると言えるでしょう。

pgpool-II は最近日本トレジャーデータ社の Prestogres ( https://github.com/treasure-data/prestogres ) という痺れるようなプロジェクトベースとして採用されていることで名前を聞いたことのある方もいるのではないでしょうか。

pgbouncer は少し古いですが LastFM( http://www.lastfm.jp/user/Russ/journal/2008/02/21/zd_postgres_connection_pools:_pgpool_vs._pgbouncer )の事例が有名でしょう。Instagram も使ってますネ。

pgbouncerは現行のバージョンは1.5系で、最新は1.5.5です。1.6系は8月1日リリースされ、複数DBマルチテナントシステムに向けた大規模な機能強化が行われています

この1.6系では複数DBマルチテナントシステム開発者にとって嬉しい機能がたくさん搭載される予定です。本番運用に投入する前に一足お先にリリースノートを読んで夢を感じましょう。

バージョン2013年ぐらいからリリースノートは準備されているのにさっぱりリリースされなくて関係者をやきもきさせていました。(想像

記事では以下のリリースノートをもとにザックリ読み解いたものです。

http://pgbouncer.github.io/2015/08/pgbouncer-1-6/

主要新機能

接続ユーザーパスワードハッシュDBからロードできるようになった

プーリングモードの設定をデータベース毎、ユーザー毎に設定できるようになった

データベース毎、ユーザー毎にコネクションの最大接続数を制御できるようになった

・新しいコネクション確立を避けるための DISABLE/ENABLE コマンドが追加された

・新しい推奨のDNSバックエンド c-ares が追加された

設定ファイルに include ディレクティブを追加した

ではリリースノートをそれぞれ細かく見ていきましょう。

接続ユーザーパスワードハッシュDBからロードできるようになった

新しく以下のパラメータが追加された

1.5までのpgbouncerは userlist.txt というテキストに静的に接続ユーザを書かなければいけませんでした。

これは動的に接続ユーザーが増えるようなマルチテナントシステムを構築するのに不向きという事です。

この機能はその悩みを解消するための機能と言えるでしょう。

プールモードデータベース毎、ユーザー毎に設定することができる。

タイトルがすべてを物語ってます。柔軟にできますねぇ('∀`)

ただ、私にはちょっと有用な利用シーンが思いつかなかったです。

たとえば分析ユーザーではトランザクションなんて使わないので statement モードにしてコネクションの消費を抑えたりできるという事でしょうか。

データベース毎、ユーザー毎にコネクションの上限を設定できる。

max_db_connections と max_user_connections という設定が追加されます

テナント毎にユーザーを分けているような複数DBマルチテナントシステムにとって必須といえる機能です。

特定ユーザーリクエストコネクションをすべて占有されてしまい、他のユーザーサービスできないという事態を避けることができるようになるでしょう。

新しいコネクション生成を防止する DISABLE/ENABLE コマンドを追加。

特定データベースの新しいコネクション確立を抑止・再開することができます

新しいDNSバックエンドとして c-ares を導入した。

c-ares名前解決の非同期化を行うためのライブラリです。c-ares名前解決をブロックしないし、いろいろな方式名前解決に対応している唯一のプロダクトとのこと。

名前解決をブロッキングしてしまうようではpgbouncerのような大規模向けシステムでは役に立たないのだというpgbouncerの強い意志を感じる。

というか、ドキュメントを見る限り pgbouncer は名前解決にかなりこだわりを持っているらしい。それだけそこが重要ということでしょう

個人的には困ったことがないのでそこまでだわる理由はよくわからない。)。

SHOW CLIENTS, SHOW SERVERS で remote_pid を出すようになった。

UNIXドメインソケットで接続しているクライアントと、TCPまたはUNIXドメインソケットで接続しているサーバーでremote_pidを取得できるようになりました。

tcp serverの場合、pid はキャンセルキーから取得できる。(?ドキュメントから意味が読み取れず)

キャンセルキーとは何でしょうね。ちょっとリリースノートから判断できませんでした。

pg_cancel_backend とかに使えるPIDだよという事なのでしょうか。

ネガティブDNSキャッシュのために dns_nxdomain_ttl を分割した。

DBの数なんてもはや何台あるかわからない。ホスト名の解決はもはやDNSで行っておるよという皆様にとって必須機能

…なのでしょうがちょっとこの機能必要となるようなシステムとはどんなものなのか、私も未経験なのでよくわからないです。

クライアントIPアドレスポートapplicationネームに追加する

この設定は application_name_add_host=on にすることで有効となる。

今や接続アプリケーション名がWebだとかBatchだとか区別できるだけで問題が解決するような時代ではない。

どのホスト(ポート)レベル区別しないと。という事なんだろう。

「おお、Webサーバーから死ぬほど重いクエリが飛んでる、今すぐ調べないと!で、どのWebサーバーよ?100台あるんだぜ」みたいなときに助かりますね。

設定ファイルに外部ファイル読み込みディレクティブを追加することができるようになります

設定ファイル大規模化してくると、切り出して整理したいという要望はどうしてもでてくるもの

データベース毎、ユーザー毎に設定できる項目が増えてきたので必要になったという事でしょう。

以上。

以降はバグフィックスとかクリーンアップだとかで自分はあまり興味がないので各自読むように。

本番運用突撃するPostgreSQL界の猛者の報告待ってます

2015-02-02

不正アクセスされた

まえがき

恥ずかしすぎてハンドルネームでやってる自分ブログにすら書けず、かと言ってどこかに吐き出したくはあったのでここに書いておく。

見た人は存分に笑い飛ばして欲しい。


不正アクセスされたことについて

先週、趣味で立てたVPSサーバー(CentOS 6.5)のCPU使用率が、気付くまでの9時間ずっと100%になっていた。

作動中のプロセスを見ると、2つのperlプロセスがその原因であることが分かった。

そのプロセスユーザー「postgres」によって実行されたプロセスだった。

postgresは、PostgreSQLインストールすると勝手に作られるユーザーだ。

先日自分PostgreSQL9.4をインストールしたので、このユーザー存在自体問題無い。

その時このpostgresに、「postgres」という簡素パスワードを、passwdコマンドで設定した。

特に理由はない。その時理由を聞かれていたとしたら、

「まぁ無いよりはマシなんじゃね?サーバー内でしか使わないユーザーからハッキング心配とかないしどうでも良いけど〜。」

と言ってたと思う。

その程度の認識だった。

これにより下記コマンドでpostgresとしてサーバーに入れてしまう状態になっていた。

$ ssh postgres@my.server.address.com

実行するとパスワードを求められるが、もちろんそれは前述のパスワード「postgres」だ。

それまではパスワードを設定していなかったので逆に助かっていた。

パスワードが設定されていないユーザーにはsshでは入れないからだ。

「もちろん」というが、それまではユーザーパスワードsshで入る時のパスワードになることを知らなかった。

そしてそれだけで接続可能になる可能性があることを知らなかった。

sshサーバーの設定はひと通り、自分が使っているVPSサービスがやってくれており、多分大丈夫だろうとそのまま使っていたからだ。

それでハッキングされ、そいつに謎のperlスクリプトを走らされていた。

具体的なスクリプトファイルや.bash_historyは消されていたようで、どんなものを走らせられていたのかよく分からない。

踏み台としてどこかにDoS攻撃していたんだろうか。

ハッキングであることを知ったのは、/var/log/secure を見たからだが、そもそもこの自体に陥るまで /var/log/secure の存在とその役割を知らなかった。

「ポスグレ(PostgreSQL)がなんかバグったわ〜でも原因がよく分からんわ〜ヒマだしハッキングの可能性も考えとくか〜でも絶対ポスグレがバグったんだわ〜」

でググって初めて知ったぐらいだ。

それで見たらパスワード設定してから9日間でそれぞれ別の端末23から不正アクセスを受けていたことが分かった。

VPSサービスコントロールパネルを見ると、その内の1件が侵入した3分後にCPU100%現象が始まったので、十中八九そいつ仕業だろう。

それ以外の連中が何をやったのかは分からない。

からないのでOSを再インストールした。DoS攻撃だったらあとで攻撃先に訴えられるかもしれないので、全データを家のパソコンDLする事で証拠(?)を保存してから

不正アクセスに気付いてからやったこと
1. パスワードによる認証原則不可にした

/etc/ssh/sshd_config には、sshサーバーの設定が書かれている。

その中のPasswordAuthenticationをnoにし、公開鍵暗号方式による認証のみ受け付けるようにした。

2. ユーザー「postgres」のパスワードを削除した


3. http://www.websec-room.com/2014/02/09/1822 を全て適用した




他になんかやることとかある?おしえてぴょーん

2014-08-12

コーディングスタイル論争「カッコを省略するな」が出るたびに思う事

こういう記事が上がって

それへの反応

記事最初のカッコの省略だけど、世界的に評価されて広く使われてるようなプロジェクトコードを見ると、案外{}が省略されていたりしてそんなことは気にしてない。(たとえばlinux, apache, postgresql, mysql, chromium, netbeeans, eclipse, llvm, jruby, android)

で「こんなコードを書くヤツは夜道に気をつけろ」「八つ裂き」みたいな大げさな反応してるのって、どういうコードを書いてるかよく分からないような人たち。

自転車置き場の議論的な、素人でも分かりやすポイントからこのツッコミって人気あるのかね。

―――――↓見てないかもしれないけどブクマとかへの返信を追加―――――

2chあたりでコーディングスタイル議論になったときは、俺様基準じゃなくて実際に成果を出してる人たちが採用してるコーディングスタイル基準にしようぜってことで、誰もが認める成果を出しててソースを見れるオープンソースコードを引き合いに出すことが多いんだけど、そうするとよくある反論が二つある。

みたいなの。

さすがにはてなツイッターじゃ、前者のような「お前は20年前からタイムスリップしてきたのか」みたいな認識の人はいないみたいだけど後者のような人は何人もいるね。

高度なコードを書いてる人とITドカタのコーディングルールは違うってなんなんだろうね。

「高度なコードを書いてる人は低レベルケアレスミスなんてしない、だからカッコを省略しても平気なんだ、レベルの低い連中はケアレスミスをするからカッコが必要なんだ」って認識なのかね。

まあたしかに「viは一晩で書かれた」みたいにハッカーが複雑なコードを一気に書きあげてバグがなかったみたいな伝説ってあるけど、素人じゃないんだからそういうハッカーイメージで高度な人たちをとらえるのはやめよう。

集中力が高度でケアレスミスをしないとか、今どきのソフト開発の「高度」はそういう意味じゃありません。

高度なソフトを開発している人たちは、おおむね読みやすさや保守性にセンシティブです。そのらのSIerなんかに比べたらはるかに。

で、そういう人たちが、カッコを書くか書かないかなんてどうでもいいって認識からカッコを省くコードが書かれてるんです。

ハンガリアン記法コードの質を高めると信じられてたときとか、if (100 == n) のように比較で定数を左にもってくるのが流行ったときも、そういう流儀の人たちは自分らは安全側に倒してるから正義だって信じて主張を全然曲げなかったですね。

むやみに安全側に倒せばプロだとか、コードの質にセンシティブだって思考は恥ずかしいみたいな風潮になればいいのにね。

2014-07-22

MySQLを商用利用すると無料で使えないという都市伝説

MySQLに限らないけど、「GPL営利目的では使えない的な思い込み」は止めて欲しい。

先週、システム開発の提案で客先に行ってきた。

当方、30前半のSE対応してくれた担当者40代後半の情報システム部門の方。

提案したシステムの規模はそれほど大きくはなく、お客さんからもあまり予算はないと言われていたため、RDBMSに「MySQL」を使ったWebシステムを提案したところ、「それほど可用性は求めてないし、無料で使えるDBの方がいい」と言われた。

あぁ、商用ライセンスを購入すると勘違いしたんだな、と思ったので、「MySQLGPLライセンスもあるので無料で使うことができますよ」と説明したところ、担当者の顔が険しくなった。

GPLだとソースコードを公開しないといけないんだよ?たとえMySQLソースコードを改変していなくても、MySQLを使ったソフトウェアであればソースコードを公開しないといけないし、それを企業で使おうとすると犯罪になるよ。」

「だからウチでは重要システムOracleを使っているし、重要度が低いシステムPostgreSQLを使ってる。」

たまたま提案先がウチだからいいものの、他の企業にそんな提案すると恥をかくし、あなた会社の信用も堕ちる。」

いろいろ言われたけど、要約するとこんな感じ。


「確かにGPLだと他の誰かにMySQLを使ったソフトウェア頒布する場合ソースコードも渡さないといけないですが、今回は御社に導入するWebシステムですから問題ないですよ」

とは返したものの、

Webシステムなのが問題なんだ。システムを使う人にソースコードを公開しないといけないんだよ。TOPページとかにリンクを貼るの?ソースコードはこちら、みたいなの。ありえないよね?」

システムを使った社員ソースコードを持って帰って公開したらどうなるの?機密情報流出だよ。」

と捲し立てられてしまった。

心の中では「Webシステムだと利用者全員にソースコード公開とか、なわけねーだろ」と思いつつも、相手の勢いがスゴいし反論するための明確な情報を持っていなかったので一旦持ち帰って再検討することになりました。


http://www.ipa.go.jp/files/000028332.html

英語が苦手なのでIPAが公開しているGPLv3の日本語訳で確認したところ、「0. 定義」の項目に以下の文言があった。


著作物の「コンベイ」(convey)とは,プロパゲートに当たる行為のうち第三者が複製すること又は複製物を受領することを可能にする行為をいう。ただし,コンピュータネットワーク上での単なるやりとりであって複製物の伝送を伴わない場合は,コンベイに当たらない。



そりゃそうだよね。てかWebシステム利用者ソースコードを公開しないといけないとか誰が言い出したんだよ。


で、結局提案はPostgreSQLに変更しました。ライセンス云々関係なくPostgreSQL統一されているんだったら運用コスト面でその方がいいし、MySQLを提案したのは俺がPostgreSQLより得意だからってだけだから

ライセンスについては調べたことを担当者に伝えるかどうか思案中…。

ここまで捲し立てられたのは初めてだったけど、今までもお客さんからGPLだけど商用ダメなんじゃないの?」って言われたことが多いんだよね。

もう一度言うが

GPL営利目的では使えない的な思い込み」は止めて欲しい

2013-12-10

環境設定が一番大変

Redmineインストールがようやく終わった。

rubyインストールして、railsインストールして、PostgreSQLインストールして、OpenSSLインストールして、ImageMagickインストールしたけどrmagickがインストール出来ずに断念して、ようやくRedmineインストール可能な状態になったって敷居高すぎだろ。手順に沿って上記のソフトを入れるだけでも面倒なのに、所々でエラーになるし、手順は大抵Unix/Linux環境向けだし、インストールで力尽きた感がある。

大体新しい物を学習しようと思った時は一番最初環境設定の部分で躓くんだよな。

2013-12-09

postgresqlで指定桁数で値を受け取る方法

real型で、5.0などと値を受け取りたい場合はnumericにキャストする。

2013-11-09

http://anond.hatelabo.jp/20131109013939

IT系の知識って多岐に渡るくせに、初めの一歩のために浅く広くで体系立てられた情報源が無いんだよね。

DBならOraclePostgreSQL…、言語ならC、Java…みたいな感じで各技術分野の中の特定の技術ってのを学ぶ手段は山ほどあるんだけど、その技術分野同士の相関関係や各技術の違いなどのメタ情報が個人ブログとかで部分的表現されてるだけで、体系立てられてないから、とにかく実務で身に付ける、アンテナ張って色んな技術情報を身に付けていく内に段々分かってくるってモノになってる気がするんだよな。ググって調べても説明文にまた分からない言葉や腑に落ちない部分があるからまたその言葉をググってみたいな事を繰り返してようやく何となく分かったみたいな経験がこの仕事をしてる人は誰にでもあると思う。

から、用意されたインフラ上で実装するって現場ばっかり回されるような人は知らなくても不思議ではないと思う(若干酷いなとは思うけど)。

プライベートキャッチアップし続けてようやく知って当たり前の知識が身に付くって構図はあまり良いとは思えないんだよな。

Iパス基本情報所詮はバラバラの情報の寄せ集めなんで書いてある内容の理解や各技術分野の関連を理解するには行間自分で埋めなきゃならないんだけど、まさにその行間を埋めるための全体像を把握するための知識が今この業界に欠けているものであり必要なのだと思う。

2013-09-18

Ruby on Rails可愛い子が集まるエロサイトを公開するまでの24H

仕事で3ヶ月ほどRuby on Railsに触れる機会があったので、色々と調べているうちにRailsエロサイトを作るのが流行っているというのを知りました。

そこで、自分でも作ってみようかと思いました。

2番煎じなのは重々承知ですが、とにかく作ってみることが重要なのです。

最低限、自分で使うことが出来るレベルにはしたいと思います

今回のエントリでは、個人的にエロサイト作成して公開するまで自分でやった方法を紹介します。

※公開後の状況なども書き込みします。

作成したサイト

可愛い子が集まる動画共有サイト

CuteClipper : http://cuteclipper.night-generations.info/

目標

準備するもの(私の環境

目次

  1. ( 0:30)作成したい機能を考える
  2. ( 1:00)ドメインを取得する
  3. (12:00)アプリ作成する
    1. 基本部分を作成する(rails new)
    2. Xvideosをスクレイピングする(gem : nokogiri)
    3. 動画管理タグで行う(gem : acts-as-taggable-on)
    4. 動画ストック機能追加(javascript)
  4. (16:00)本番環境で動かしてみる -環境周り-
  5. (17:00)Google Analytics / ウェブマスターツール に登録
  6. (20:00)公開の準備をする
  7. (24:00)公開
  1. 今後の野望

( 0:30)作成したい機能を考える

既にあるものなら新しく作る必要はないわけで、、、今回は自分の使いたい機能を作ってみました。

Xvideosの動画サイトの多くは、動画を選択すると他のサイトブログみたいなやつ)に飛ばされてしまい、

そのサイトで、動画のある場所を探さないといけないことが多くてめんどくさい。

動画がないこともシバシバ

自分で作るのならh300さんのように分かりやすサイトにしたいと思いました。

たくさんの動画を観て廻るものの、本当にいいと思う動画は大体3本くらいです。(自分場合

なので、3本まで動画ストックする機能があるといいなと思いました。

( 1:00)ドメインを取得する

今回はムームーさんでドメインとりました。

本番環境herokuドメインの設定も簡単で助かりました。

(12:00)アプリ作成する

基本部分を作成する(rails new)

rails newしてdb作成して、基本的なアプリ作成しました。

Xvideosをスクレイピングする(gem : nokogiri)

動画情報の解析のため、RailsGemのnokogiriを使用しました。

nokogiriはhtmlなどの解析をして、情報を取得することができます

Ruby - Nokogiriでスクレイピング - Qiita [キータ]

動画ストック機能追加(javascript)

動画ストック機能javascript作りました

WebStorageを使用してストックしています

//localStrage.setItem("key","value");
localStorage.setItem("test","テスト");

//localStrage.getItem("key");
localStorage.getItem("test"); //"テスト"

こんな感じで、DBを使わずストックが可能です。

レイアウト改善(gem : twitter-bootstrap-rails)

レイアウトにはあまり時間を掛けず、bootstrapを利用しました。

殆ど時間を掛けずにそこそこのレイアウトが作れます

twitter bootstrap railsを使ったら職が見つかり彼女も出来て背も3センチ伸びました。 - ppworks blog

タグクラウドを実装(gem : acts-as-taggable-on)

タグクラウドはacts-as-taggable-onで簡単に実装できます

備忘録.りくわいやー

(16:00)本番環境で動かしてみる

とにかく本番環境デプロイするんだ!!

ということで、ここまでで出来上がったものを本番環境にアップします。

本番環境にはherokuを選びました。

herokugitpushをするだけで簡単に本番環境デプロイ出来ます

とにかく動かすという目標のためにはherokuベストチョイスです。

スピードに関しては、海外サーバという点が難点ですが、今回はjavascriptをメインにしたことで、それほど問題はありませんでした。

(17:00)Google Analytics / ウェブマスターツール に登録

サイトを公開する場合、解析が必要となります

解析の仕方を覚えるためにもGoogle Analyticsを使用しました。

(20:00)公開の準備をする

公開の準備として以下の作業をしました。

ただ、公開することを最優先にしたので、しっかり作りこんではいないです。

  1. title,キーワードなど基本的なSEO実施
  2. ソーシャルブックマークTwitterなどのソーシャルボタンをつける
  3. googleクロール申請をする
  4. この記事を書く

(24:00)公開

公開します。

今後の野望

動画投稿をみんなでできるようにする。

今の投稿方法だとエラーが発生しやすいので修正してからじゃないとなぁ

ストック回数の多い順にソート出来るようにする。

ストック回数のカウント機能は実装してあります

後は、並び替えるだけなんですが、まずはカウントが貯まるまではソートも何もないので・・・

動画の評価を出来るようにする。

ストック回数だけじゃ物足りないので、評価をつけれるようにしたいです。

Xvideos以外の動画も観れるようにしたい。

もっとたくさんの動画を観たいよね。

まとめ

Webアプリを作ること自体は、思っていたより簡単でした。

でも、たくさんの人に使ってもらえるものを作るというのは、とても大変ですね。

今回、CuteClipperを作りながら、他のWebアプリを観てきました。

オリジナリティアイデアの優れたアプリが沢山あります

そういうアプリの中で、自分アプリを埋もれさせない努力を続けていかないといけないですね。

がんばります。というやる気がでました。

2013-03-04

http://anond.hatelabo.jp/20130303084659

デザイナー搾取と役所におけるボランティア活用を別の問題として考えるべきで

ごちゃまぜにしているから噛み合わないだと思う。

一般論としてNPOも含め公的な目的でのボランティア活用は認められてもよいと思う。

ダンピングとの指摘もあるが、ダンピング規制されるのはガソリンスタンドの値下げのように競合を潰して自らの利益にする目的で行われるからであって

目的の異なるボランティア活用と同列にすることはできないと思う。

海岸で清掃ボランティアをするひとは、清掃業者に対するダンピングなのでやめるべきですか?

近所の掃除は? ほぼボランティアで近所の子供にサッカーを教える人は?(これは公的ではないか・・)

個人的にはよくも悪くも、社会の変化による避けられない現象だと思う。

IT業界におけるフリーソフトの台頭に近い。これまで有償提供されていたスマホアプリが、個人が作ったフリーソフトに負ける。

MySQLPostgreSQLに潰された中小データベースメーカー多いだろう。

これはダンピングと見えなくもないが、フリーソフト提供者も利用者も社会的に認められている。

Wikipediaだってボランティアによる百科事典業界に対するダンピングに見えなくもないが否定する人は少ないだろう。

今回のケースでは社会に対するボランティア意識の高まりと(似非も含めた)デザイナーの過多が原因ではないかと思う。

一般論について話したいのでこれ以上突っ込まない)

ただし大前提としてボランティアとして成り立つのは動機が奉仕の心によってのみであるべきで、

それ以外の邪念(今後の仕事に役に立つとか)を応募側も持つべきでないし、募集側も匂わせるべきではない。

追記

今回のケースは当初から募集側応募側双方に邪念があったので、ボランティアじゃないよね。

皮肉にも無償デザイナーというのは正直正しい。

ボランティアならは「自発」「見返りを求めない」が守られている必要がある。

そういった意味ボランティアとするならば、バーターの要素を一切排除し

・「見返りを求めない」というボランティア理念を明記する

・応募側の実績にならない形にする(匿名デザイナー

・可能であれば何らか別の形でデザイナーに報いる

ターゲットは元デザイナー専業主婦とかで

デザインの力で行政を変えるのは無理だと思うけど・・

2012-09-26

【2012超まとめ】確実にWEBサービスを作りたい人へ【中編】

前編はこちら

http://anond.hatelabo.jp/20120926165407

ステップ6:MySQL(10時間)

会員情報や文章などのコンテンツを保存しておくデータべース、MySQLを調べます

データベースは他にもPostgreSQLSQLiteなどが有名ですが、やはり王道勉強します。

MySQLCakePHPや、ステップ4のWordPress他、よく使いますので把握しておきましょう。

基礎からのMySQ

http://www.amazon.co.jp/%E5%9F%BA%E7%A4%8E%E3%81%8B%E3%82%89%E3%81%AEMySQL-%E5%9F%BA%E7%A4%8E%E3%81%8B%E3%82%89%E3%81%AE%E3%82%B7%E3%83%AA%E3%83%BC%E3%82%BA-%E3%83%97%E3%83%AD%E3%82%B0%E3%83%A9%E3%83%9E%E3%81%AE%E7%A8%AE%E3%82%B7%E3%83%AA%E3%83%BC%E3%82%BA-%E8%A5%BF%E6%B2%A2-%E5%A4%A2%E8%B7%AF/dp/4797344385/ref=sr_1_1?s=books&ie=UTF8&qid=1348063628&sr=1-1

今はまだ関係ありませんが、余裕があればこれも読むといいです。

MySQLによるタフなサイトの作り方

http://www.amazon.co.jp/MySQL%E3%81%AB%E3%82%88%E3%82%8B%E3%82%BF%E3%83%95%E3%81%AA%E3%82%B5%E3%82%A4%E3%83%88%E3%81%AE%E4%BD%9C%E3%82%8A%E6%96%B9-%E4%BD%90%E8%97%A4-%E7%9C%9F%E4%BA%BA/dp/4797353937/ref=sr_1_1?s=books&ie=UTF8&qid=1348063787&sr=1-1

操作コマンドラインを覚えていく方向で、始めはブラウザ操作できるphpMyAdminを使ってOKです。

ストレージエンジンはとりあえずInnoDBで。

ステップ7:休憩(10時間)

技術調査はこの位にして、これからは実際にWebサイトを作っていきます

ここまで来ると何となくWebサイトがどんな仕組みで動いてるかが分かってくるので、

ステップ0でイメージした作りたいサイトがどんな技術で実現出来るか調べます

冒頭の「完全に一致」の中の人のようにスクレイピングしたり、

TwitterGoogleYahooAmazonなどのAPIを使ってサテライトサイトを作っても良いと思います

が、高度な事をするとはまりやすいので、ある程度やって無理だったらあきらめて次回にまわしましょう。

まずは何か一つ完成させる事のほうが大切です。

それから開発効率UPのため、Chromeプラグインを入れましょう。

説明はそれぞれのリンク先を見て下さい。

CSSViewer

https://chrome.google.com/webstore/detail/ggfgijbpiheegefliciemofobhmofgce

Firebug Lite for Google Chrome

https://chrome.google.com/webstore/detail/bmagokdooijbeehmkpknfglimnifench

View Selection Source

https://chrome.google.com/webstore/detail/fbhgckgfljgjkkfngcoeajbgndkeoaaj

Pendule

https://chrome.google.com/webstore/detail/gbkffbkamcejhkcaocmkdeiiccpmjfdi

BuiltWith Technology Profiler

https://chrome.google.com/webstore/detail/dapjbgnjinbpoindlpdmhochffioedbn

iPSim

https://chrome.google.com/webstore/detail/gcligifbhamdimemnemmlkffkpmflehh

Color Picker

https://chrome.google.com/webstore/detail/ohcpnigalekghcmgcdcenkpelffpdolg

CSS Tester

https://chrome.google.com/webstore/detail/pjncppaiejjkcjlcgegcbmhgkflhenfp

MeasureIt

https://chrome.google.com/webstore/detail/pokhcahijjfkdccinalifdifljglhclm

あとはFireFoxにはFireBugデバッグ定番らしいです。

https://addons.mozilla.org/ja/firefox/addon/firebug/

それから、空いた時間無料プログラミング動画サイトドットインストール」を見ておくと

ここまでの知識が定着すると思います

ドットインストール

http://dotinstall.com/

ステップ8:ドメインを取る(10時間)

ステップ7で作りたいサイトイメージ出来てきたら、ドメインを取りましょう。

サーバーさくら場合ドメインさくらで取得すると楽ですが、もっと安いところもあります

希望するドメインが空いているか調べて取得、空いていなければ他のドメインを考えます

さくらドメイン取得

http://www.sakura.ne.jp/domain/

ムームードメイン

http://muumuu-domain.com/

バリュードメイン

http://www.value-domain.com/

定番の.com、.net、.orgは誰が見ても親しみがあるし安いので、できればこの3種類のどれかにしたい所ですが、

一般的な言葉はほぼ埋まっているので、その場合.jp等にしても良いでしょう。

日本語ドメイン(www.日本.netみたいな)は流行っていないですが、

自分サイト名が「○○○.com」のような名前場合は一緒に取得して、アルファベットドメインリダイレクトしましょう。

ChromeユーザーURL欄で検索する時、「○○○.com」のように後ろに.xxxが付いているとそのURLに直接アクセスしてしまい、

 検索にならないので、アクセス機会損失を防ぐため。)

僕はバリュードメインで取得して、サーバーさくらレンタルサーバーしました。

その際の親切な設定方法の解説はこちら。

VALUE DOMAIN で取得したドメインさくらレンタルサーバで使う

http://nekohacks.com/wordpress/domain/value-domain/

ステップ9:サイトの基礎部分の開発(100時間)

実際にサイトを開発していきます

どんなサイトで、どんな機能があって、どんなページがあるかノートに書き出して行きます

初めにデータベースのテーブルやレコード構造を考えて、

次にメインとなる機能プログラムして行きます

サイトの基本的なレイアウトCSSで組みながら、デザインイメージもしておきましょう。

ここではデザインはまだやりません。

先にデザインを作っても、プログラムを進めていく過程で変更がでたりする為です。

(でもあんまり後回しにしても、見た目がチープなせいでモチベーションが下がったりするので、次のステップでやります

あと、ここで気をつけたいのは、あくまでメインとなる機能の開発を優先することです。

「あったほうが良いな」程度の機能は後回しにします。

外堀から埋めていくとそこでモチベーションが尽きてしまったり、

メインの機能を実装してみたら外堀の修正が発生してしまったりするためです。

始めると分からない事がどんどん出てくると思うので、本を読み返したりGoogle先生検索しながら進めて行きます

なかなか進まなくて検索8割、コーディング2割くらいの進め方になると思いますが、それでOKです。

長い暗闇を抜けると、少しづつ視界が開けてきます

メインの機能がなんとなく出来たら次に進みます

ステップ10:サイトデザイン(30時間)

メインの機能何となくできたら、デザインをやります

鉛筆殴り書きで良いので紙に描いてみます

いきなり慣れないCGソフト上でデザインすると、

いじっているだけでモチベーションを使い切ってしまったりするので危険です。

CGソフトは色々ありますが、おすすめフォトショ(Photoshop)です。

WebサイトデザインFireworksなども有名ですが、学習コストがかかるので、

Webサイトにもそれ以外にも使えて一番つぶしが効くフォトショップでOKです。

今年からクラウド契約が始まり、今なら1ヶ月8000円、年間契約なら1ヶ月5000円で

Adobeソフトが全部使い放題です。

Adobe Creative Cloud

http://www.adobe.com/jp/products/creativecloud.html

お勧めの本はこれ

10日でおぼえるPhotoshop入門教室

http://www.amazon.co.jp/10%E6%97%A5%E3%81%A7%E3%81%8A%E3%81%BC%E3%81%88%E3%82%8BPhotoshop%E5%85%A5%E9%96%80%E6%95%99%E5%AE%A4-CS2-CS%E5%AF%BE%E5%BF%9C-%E4%BA%95%E4%B8%8A-%E3%81%AE%E3%81%8D%E3%81%82/dp/4798111953/ref=sr_1_1?s=books&ie=UTF8&qid=1348498454&sr=1-1

基本操作を覚えたらWeb情報を収集します。

PHOTOSHOP VIPさんが親切です

http://photoshopvip.net/

から全部自分で作らなくても、素材サイトからダウンロードして加工するなどして手間を省きます

PCスマホ携帯(ガラケー)全部に対応するのは大変なので、

初めはそのサービスを最も使うだろうと思われるどれか1つに絞ります

初めに作る際のお勧めPCサイトです。

PCサイトならスマホでも最低限アクセスはできるし、携帯は縮小傾向なので優先度低、

スマホ画面サイズがまちまちでタブレット端末が目下発展中、AndroidブラウザがたくさんあるがChromeに統一されていくかも、

混沌とした状況なのでお勧めしません。

複数デバイスへの対応リリース後でも遅くありませんが、

対応する際はCSSを切り替えてレスポンシブレイアウトにするのがお勧めです。

その他、困ったらTwitter社が公開しているブートストラップを使うのもお勧めです。

ブートストラップcssフレームワークで、簡単にシャレ乙なデザインに仕上がります

超便利!Twitter BootstrapでさくさくWeb開発

http://blog.asial.co.jp/887

どうしても自分イケてるデザインが出来ないと思ったら、友だちに頼んだり、SNSコミュで募集したり、

デザイン系の大学専門学校掲示板にビラを貼らせてもらったりしましょう。制作費が出せればランサーズで募ってもいいかも。

Lancers - 仕事フリーランス発注できるクラウドソーシングサービス

http://www.lancers.jp/

僕はたまたまフォトショップの使用経験があったので、ここにかけた時間は30時間ではなく5時間程です(トータル275時間で開発)。

後編はこちら

http://anond.hatelabo.jp/20120926165920

2012-07-30

『リーダブルコード』を読んで

仕事コード書いてて、「クラス名や変数名はわかりやす名前を付けないと」といったことに腐心していて、ふと思った。自分のやってることって、「技術」というよりも「わかりやすい文章の書き方講座」みたいだな、と。プログラミングにおいて、技術面以外でも重要なことがあるのだろう。

そんな問題意識があったので、ソースコードの読みやすさがテーマの『リーダブルコード』は自分マッチする気がした。

 

読みやすい、読みにくい、というのは人間主観に基づくものだ。

しか主観といっても「何を読みやすいと思うかは人それぞれ」などといった極端な相対主義は通用しない。読みやすコードと読みにくいクソには歴然とした差があるものだ。

この判断は、文芸批評などに近いかもしれない。本書の原題は"The Art of Readable Code"となっている。エンジニアリングでもサイエンスでもなく、まさにアートなのだ

 

自分としては本書のハイライトはこれ。

13.3 コードを小さく保つ

ソフトウェアプロジェクトを始めるときには、ソースコードは1つか2つしかない。素晴らしい。コードコンパイルして実行するなんて簡単だ。変更もしやすい。関数クラスをどこで定義しているかもすぐに思い出せる。

プロジェクトが進んでいくと、ファイルが増えていく。ディレクトリを分けてファイルを整理しなきゃいけなくなってくる。どの関数がどの関数を呼び出しているかがよくわからなくなってくる。バグを見つけるのもだんだん面倒になっていく。

最終的には、いろんなディレクトリファイルが散らばることになる。プロジェクトは巨大になって、すべてを把握できる人は誰もいなくなる。新しい機能を追加するのが苦痛になってくる。コードを扱うのが厄介になって楽しくなくなる。

あらゆる協調システムは成長する。それらを結び付ける複雑さはもっと速い速度で成長する。これは宇宙自然法則だ。

まりプロジェクトが成長しても、コードをできるだけ小さく軽量に維持するしかない。

 

コードの「重量」を意識する。軽量で機敏にしておく。

うそう、コードは「重い」。

機能追加やデバッグをするとなると、その「重い」ものを動かさなくてはならない。だから疲れる。

そして、コードはどんどん重くなっていく。私が仕事で書いているシステムもそうだ。

例外はないだろう。

PostgreSQL現在の形になったとき20万行ほどだったソースコードは、今では100万行ほどあります

Linuxカーネルコードは、1995年に25万行だったが、2010年には1400万行ある。

結局のところ、「使える」ソフトウェア肥大化せざるを得ないのだと思う。

多くのソフトウェア開発者昔ながらの「80/20ルールに魅了されている。80%の人々は20%の機能しか使わない、というのは大いに意味があるように見える。それであなた20%の機能だけ実装すればよく、それでも80%は売れると思い込む。

残念ながら、それは決して同じ20%ではないのだ。みんな異なる機能セットを使っている。

 

あなたが「ライト版」の製品マーケティングを始めて、「どうです、軽いでしょう。たった1MBだ」と人々に言い、彼らはとても喜んで、それが彼らにとって必須機能を持っているか聞くが、それがないと分かると彼らは買わない。

 

ジェイミー・ザウィンスキーは、オリジナルバージョンNetscape世界を変えたことについて議論しながら、そのことをよく説明している、「もしそういうことなら分かりやすいのだろうけど、Mozilla(Netscape 1.0)が大きいのは役にたたないゴミでいっぱいだからではない。Mozillaが大きいのはあなた必要が大きいからだ。あなたニーズが大きいのはインターネットが大きいからだ。小さくて貧弱なWebブラウザがたくさんあるが、それは役に立つことはほとんど何もしない。しかし輝く宝石完璧さは、私たちMozillaを書いたとき目的ではなかった」

 

現実世界で使えるソフトウェアを作ろうと思ったら、大量にコードを書かなければならない。大量のコードを読まなければならない。

からリーダブルコードなのだ

1.2 読みやすさの基本定理

 

コードは他の人が最短時間で理解できるように書かなければいけない。

 

「理解する」っていう言葉には、高いハードルを設けてある。「コードを理解する」というのは、変更を加えたりバグを見つけたりできるという意味だ。他のコード連携する方法も理解しておかなければいけない。

仮に、ソースコードの分量やソフトウェア機能が同じだった場合、リーダブルコードとそうでないコード比較すると、前者の方が圧倒的に「軽い」。

第Ⅱ部

君のコードの「精神的な荷物」を減らしたいと思っている。複雑なループ・巨大な式・膨大な変数を見ると、真剣に考えて記憶しなければいけないので、頭のなかに「精神的な荷物」が増えてしまう。これは「理解しやすい」と正反対のことだ。コードに「精神的な荷物」がたくさんあると、バグは見つからなくなるし、コードは変更しにくくなるし、何よりコードに触れるのが楽しくなくなる。

コードの重さに押しつぶされてしまわないよう、軽くてキレのあるリーダブルコードを書くべきなのだ

 

本書のテーマとは関係ないが、コードの「重さ」に関して思っていることを一つ。

テストコードを書いたりバージョン管理システムを使うことは、たとえるなら、キャスターを付けたり、テコの原理を使った器具を使うようなものだと思っている。

そういう特殊な器具を使うと、全体の重量は増すし、器具の使い方を覚える手間も増える。でもそれで、素手では到底持ち上げられないような重いモノだって動かせるようになる。腕力重要だが、ひと一人の限界は知れている。

 

ライブラリを使えば、自分で書くコードの量が減るので、コードを軽く保てる。

10.4

便利なライブラリシステムのことを考えてみよう。SQLデータベースJavaScriptライブラリHTMLテンプレートシステム。いずれも内部のことを考えずに使えている。つまり、君のプロジェクトから完全に切り離されているわけだ。結果として、君のプロジェクトコードは小さく保たれている。

もちろん、ライブラリの使い方を覚えなきゃいけないし、バージョンアップしたら動かなくなった、みたいな手間も発生するわけだが、そこはトレードオフで、たいていは元が取れるだろう。

普通は、ライブラリインストールや使い方を調べる手間と、自分で実装する手間を比べてしまう。コードを軽く維持できることを加味すると、実は思っている以上に恩恵があるのかもしれない。

ライブラリでどんなことができるか知らなければ使おうとも思わないわけで、まずは知ることが大事

13.4 身近なライブラリに親しむ

プログラマというのは、既存ライブラリで問題を解決できることを知らないことが多い。あるいは、ライブラリで可能なことを忘れていることが多い。ライブラリ機能を熟知して、実際に活用することが大切だ。

ここでささやかな提案だ。たまには標準ライブラリのすべての関数モジュール・型の名前を15分かけて読んでみよう。

 

ライブラリを全部覚えろと言ってるわけじゃない。どんなことができそうか感じ取るだけでいい。そすれば、新しいコードを書いているときに、「ちょっと待てよ。これは、APIで見たような……」と思い出すことができる。あらかじめやっておけば、すぐに役立つときが来るはずだ。そのうち最初からライブラリを使えるようになるだろう。

この、ライブラリドキュメント読んどけ、というのは、まったく同じことを指摘している人がいる。

標準のメソッドをとことん使いたおしていけばコードを圧倒的に簡潔にできるのです。StringRegexp・Array・Hash・Enumerable あたりだけで十分ですからリファレンスマニュアルは熟読しておきましょう。

...

誰も知らないようなメソッドライブラリを使ってもあまりわかりやすくはならないだろうと思います

...

もっとメジャーメソッドの組み合わせで書けるから必要ない」という意見に対しては、まったく少しも全然微塵も賛成できません。

プログラミング言語目的プログラム人間に理解しやすくすることです。プリミティブな操作を組み合わせた「結果として」Xという操作を実行できる場合、われわれが知りたいのは「結果として X になる」ということなのです。それを知るために、わざわざプリミティブな操作をすべて追っていかなければならないというのは理不尽まりありません。

したがって、わたしの結論はこうです。「ちょうど求める働きをするメソッドがあるのなら、どんどん使うべきである。 少なくともよく知られているメソッドに関しては」。

また、これはコメントを書くことにも応用できると思う。

6.8 情報密度の高い言葉を使う

多くの意味を含んだ言葉表現が数多く存在する。例えば、「ヒューリスティック」・「ブルートフォース」・「ナイーブソリューション」などがそうだ。コメントが長くてくどいと感じたら、こうした表現を使えないかかめよう。

いわば、コメントに関しても「自分で実装」するのではなく既存ライブラリを使え、ということだ。自分以外の誰かが頭をひねって説明を考えてくれるので、自分はがんばって説明しなくてもいいわけだ。

 

日頃コードを書いてて思うのが、「本質的コード」と「必要だが本質的でないコード」があるということ。

はじめは目的の処理を行うコードだけを書いて、短くてすっきりしていたのが、やがてデータ整合性チェックやら設定の読み書きやらの処理を書かなくてはならなくなる。ソースは長くなり、はじめよりも見通しが悪くなる。

そんなことを考えていたので、本書のこの部分を見たときは、まさに我が意を得たり、と思った。

10.7

プログラムの多くのコードは、その他のコードを支援するためだけに存在する。例えば、関数の事前処理や事後処理などがそうだ。こうした「グルー」コードは、プログラム本質的ロジックとは関係ないことが多い。

そしてこれも似たようなことが指摘されている。

読んでいくときはまず「何を読まないか」を考えたほうがいい。どんなに工夫しても全部を全部読むのでは時間がかかりすぎる。エラー処理や不要な分岐、あまり使われない場合分けなどは全部飛ばすようにする。ガード文がうまく使われているとこのステップが非常に楽である。逆に言うと、こういうところを楽にするために例外だとかガード文を使うのだ。

ガード節については本書でも「7.5 関数から早く返す」などでを使うことを勧められている。私もネストが浅くなるところがとても好きだ。

 

やっぱりツールは重要だと思った。コードの見た目に対する影響も大きい。

単語補完機能があれば、長い変数名も苦痛ではない。

2.5

長い名前を避ける理由はいくつもある。でも、「入力しにくい」というのは、もはや理由にならない。プログラミングに使うテキストエディタには「単語補完機能」がついている。この機能を知らないプログラマは以外と多い。

補完機能が充実してなかった頃は、短い名前の方が美徳とされていたような気がする。こういう常識環境によって変わってゆくのもあるので、どういう根拠でそうなっているのかを考えないと、環境が変わった後にダメな因習を引きずることになる。

ソースコードの縦の線をそろえるのが好きでよくやるので、本書の4.4節はとても心強い。

4.4 縦の線をまっすぐにする

整列すべきなのか?

縦の線が「視覚的な手すり」になれば、流し読みが楽にできるようになる。これは「似ているコードは似ているように見せる」のいい例だ。

でも、これが好きでないプログラマもいる。整列やその維持に手間がかかるというのだ。1行だけ更新したいのに、他の行も(それも空白だけ)変更しなければいけないので、「差分」が増えるという人もいる。

でも、試しにやってみてはどうだろうか。ぼくたちの経験では、プログラマ心配するほどの手間にはならない。もし手間になるようだったら、そとのきは止めればいい。

これに関しては、エディタの「矩形選択」(英語だと"column selection")機能が効いてくる。これがないと面倒でやってられない。EmEditorの矩形選択および矩形編集はとても素晴らしく、少ない労力で縦の線をそろえられる。最近使わなくなったが、サクラエディタもいけていた。Sublime Textはなかなかいいが、全角文字やタブ文字といった幅の違う文字があるとガタガタになるし、行末が揃ってないところの編集がうまくいかないし、矩形ペースト挙動イマイチ。使った事のある中では、EmEditorが一番。

かつては、ソースコードを変更したら、変更前の内容をコメントアウトして残しておいたものだった。しかバージョン管理システムを導入してから、この習慣はパッタリと無くなった。よいことだ。

 

読みさすさのため だ け に、それだけのために、変数関数を作っても、いいじゃない。そう思えるようになった。本書に明記してあったわけではないので、著者はそうは思ってないかもしれないが。

よくある説明は、くり返しを防ぐために変数関数を使いましょう、というものだ。同じ処理が複数箇所にあるなら、コピペなんてしないで、関数しましょうと。

じゃあ、その処理が一箇所にしかないならどうだろう。それでも変数に代入したり、関数を作ったりする意味はあるのだろうか。

私はあると思う。

たとえば本書の、「4.3 メソッドを使った整列」、「8.1 説明変数」、そして10.3節。

10.3

思いも寄らない恩恵

気づきにくいかもしれないけど、「コード独立していれば、format_pretty()の改善が楽になるから」だ。関数というのは、小さくて独立したものになっていれば、機能追加・読みやすさの向上・エッジケースの処理などが楽にできる。

もちろん場合によるが、複雑なことをしていると感じたなら、やる価値はある。テストコードも書けるし。

 

テストコードを書くのは本当によい習慣だと思う。

14.8

あとでテストを書くつもりでコードを書くと、おもしろいことが起きる。テストやすいようにコード設計するようになるのだ! このようにコードを書いていけば、いいコードが書けるようになる!

テストに優しい設計をすれば、振る舞いごとにうまく分割されて、自然コードが構成されていく。

再利用しやすコードを書きましょう、とはよく言われるが、作っているときは一箇所からしか呼ばれないことも多い。一応、再利用しやすそうなコードは書くのだが、時が経って実際に再利用するとなるとそれほどやりやすくなかった、なんてことになりがち。

テストを書くと、本番用のコードテストコードの二箇所から呼ばれることになる。開発段階から再利用できるのだ。

 

「8.3 ド・モルガンの法則を使う」。ド・モルガンの法則は、if文の条件を考えるときなどに、本当に使える。学校で習った論理学関係の事柄で、最も直接的に役に立ってるのがこれではないかと思う。

 

どういうプログラムにしたいかを、自然言語で説明して、その通りに作ってしまえばいい、というのは面白い

12.4

この「簡単な言葉で説明する」手法は、コードを書くこと以外にも適用できる。例えば、ある大学計算機センターにはこんな方針があった。プログラムデバッグに悩む学生は、部室の隅に置かれたテディベアに向かって最初に説明しなければいけないのである。驚くべきことに、問題を声に出して説明するだけで、学生は解決策が見つかるのだ。この方法は「ラバーダッキング」とも呼ばれている。

ラバーダッキングについては、『ハッカーズ大辞典』で見たことがある。あれもいい本だった。

これは言葉による説明に限らないと思う。関数クラスについて、「どんな風に使いたいか」を先に書いてしまって、その通り呼び出せるように中身を実装する、という手法に応用できる。

 

コメントとしてのソースコード、というコンセプトも面白いと思った。

14.6 テスト機能名前をつける

長くて変な名前にならないかと怖がることはない。他のコードから呼び出されるものではないので、長くなっても構わない。テスト関数名前コメントだと思えばいい。

「説明変数」もコメント的な側面が強いだろう。

コメントのようなソースコードを書けば、コメントが減るわけだ。コードコメントの不一致もなくなる。

 

本書のよいと思った点は、大げさな言い方になるが「世界観」が共有できるということ。

コードは読みやすい方がいい、こういうコードが読みやすい、というのもさることながら、何よりも、このような本が存在していること自体が、読みやすコードを書くことにはまとまった時間をかけて取り組む価値がある、というメッセージになっていて頼もしい。

2011-03-07

イケてるWebサービスを作ったのでeHubインタビューズっぽく宣伝してみる

あなたウェブアプリケーション/サービスは何ですか?

【音注意】Count Down Tube http://www.leno-ig.com/ja/youtube/channel/

Count Down Tubeチャンネル別に、トップソングをカウントダウン形式で視聴出来ます

このプロジェクトを始めた理由は?

iTunes Music Storeプレビュー(30秒)では物足りなかったのが一番の理由です

プレビューの短さを補うために、YouTubeにあるPV再生しようと思いました

また、1曲づつクリックして再生するのが手間だったので、カウントダウン形式で自動再生させました

製作にかかった時間は?

計4日で内訳は

チームの規模はどれくらいですか?また、あなたの素性および経歴は?

現在使用しているインフラ技術は何ですか?

技術的な特徴があれば、紹介してください。

開発の際に気を付けたことはありますか?

iTunes Music StoreYouTubeアーティストユーザすべてにメリットがある」

プロジェクトは次の半年でどこへ向かうと思いますか?

アクセス増への対策」

広告

  • 載せません。

「機能追加」

自分Webサービスを作りたいと思っている人に向けて何かありますか?

利用者に向けて何かありますか?

  • 自分では、かなり実用的だと思っているのですが、実際の所、どうなんでしょう。使ってみて、ダメ出しでも何でも良いので、感想を聞かせてもらえると嬉しいです

[twitter:@leno_ig]

元ネタ

http://anond.hatelabo.jp/20101219185436

http://anond.hatelabo.jp/20101203150748

  • eHub Interviews

http://emilychang.com/ehub/app/category/ehub-interviews/

http://d.hatena.ne.jp/brazil/20051102/1130901002

2010-12-19

ヌケるWebサービスを作ったのでeHubインタビューズっぽく宣伝してみる

あなたウェブアプリケーション/サービスは何ですか?

エロ注意】eroino http://eroino.net/

eroinoは毎日更新される大量のアダルト動画を、AV女優キーワードで分類して表示したり、お気に入りリストクリップできるサイトです現在動画数は、約28万件。

このプロジェクトを始めた理由は?

製作にかかった時間は?また、本業がありますか?

チームの規模はどれくらいですか?また、あなたの素性および経歴は?

現在使用しているインフラ技術は何ですか?

技術的な特徴があれば、紹介してください。

お気に入りリスト

開発の際に気を付けたことはありますか?

データの取得元、動画投稿サイトに迷惑をかけない」

プロジェクトは次の半年でどこへ向かうと思いますか?

アクセス増への対策」
広告
「機能追加」
  • まったくの白紙です。まずは安定稼働。

自分Webサービスを作りたいと思っている人に向けて何かありますか?

利用者に向けて何かありますか?

  • 自分では、かなり実用的だと思っているのですが、実際の所、どうなんでしょう。使ってみて、ダメ出しでも何でも良いので、感想を聞かせてもらえると嬉しいです

元ネタ

自分WEBサービスを作りたいと思っている人へ

http://anond.hatelabo.jp/20101203150748

eHub Interviews

http://emilychang.com/ehub/app/category/ehub-interviews/

eHub インタビューズ - Last.fm翻訳

http://d.hatena.ne.jp/brazil/20051102/1130901002

2010-11-22

さくらVPSセキュリティに悩む(日記9)

初回:http://anond.hatelabo.jp/20101118000033

前回:http://anond.hatelabo.jp/20101122141124


店のHP(Wordpressで構築)をさくらVPS移転完了。

無事、稼働している様子。


これで旧サーバからおさらば出来る。

ぶっちゃげサーバはここ最近明らかに調子がおかしく、

某所でもヤバイヤバイ言われており、サポート掲示板でのサービス提供者の発言も

結構ヤバゲな運用状況に陥っているのが透けて見えていた。

まぁ月々500円でmysqlpostgresqlを使い放題だし、安かろう悪かろうじゃないけど致し方がない面もあり。



さて、今度はさくらVPSに移ったわけだが、レビューによると性能は良いらしい。

ただし、root権限があるので自分セキュリティアップデートに気をつけないといけないわけだが…


セキュリティiptableぐらいしかかけてない…

現状を羅列してみる。

さすがにこれはヤバイ気がする。


みんなセキュリティはどうしてるんだろ?あと追加でやるとすれば…


つの間にかAppArmorがカーネルマージされたのか。

http://sourceforge.jp/magazine/10/10/22/0725213

アーカイブ ヘルプ
ログイン ユーザー登録
ようこそ ゲスト さん