「Join」を含む日記 RSS

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

2018-12-26

anond:20181226113724

例えばワイがオカルトおじさん認定している人では「茂木健一郎」さんとかおるけど、

茂木さんの言動オープンになってる中茂木さんの脳組織Joinしたら増田自体クオリアの一部になってしまうじゃん。

マトモに資金集められてるからって自分クオリアで片づけられてしまうような存在になってしまうのは、賢しければ賢しいほど避けたいんじゃなかろか。

そういう生き方もあるし、茂木さんの頭のもじゃもじゃが一生そのままである可能性もあるからそこに賭けるっていうのもアリだとは思うが。

2018-11-19

増田プログラマー養成講座 その22 データベース設計 概念物理

前回は、DB設計の(1)要件定義を学びました。

今回は、DB設計の(2)概念設計、(3)論理設計、(4)物理設計を見てみましょう。

 

DB設計の流れ

  1. 要件定義
  2. 概念設計
  3. 論理設計
  4. 物理設計

 

DB設計の教材

データベース解説本やWeb記事を調べてみた。

  1. 本「スッキリわかるSQL入門」 第12章 テーブル設計 https://book.impress.co.jp/books/1111101167
  2. Web記事「できるエンジニアになるためのちょい上DB術」 https://www.edifist.co.jp/lecture/dbdesign/

 

スッキリわかるSQL入門」のDB設計説明コンパクトにまとまっていて、分かりやすいと思いました。(是非一度読んでみてください。)

 

 

 

概念設計論理設計物理設計概要

スッキリわかるSQL入門」第12章の説明(p.374)を参考にしてみよう。(詳しくは本を読んでみてください。)

 

概念設計

管理すべき情報はどのようなものなのかを整理します。

データベースシステムに関することは考えず、要件に登場する情報だけをザックリと把握します。

たとえば、家計簿データベースであれば、扱うべき情報として「利用者情報」や「入出金情報」などがあることを明確にします。

また、情報間で関連がある場合、どのような関係があるかも併せて整理します。

 

論理設計

概念設計で明らかになった各情報について、RDBを使う前提で構造を整理し詳しく具体化していきます

論理設計では「どのようなテーブルを作り、それぞれのテーブルにどのような列を作るか」まで明らかにすれば十分です。

型や制約など、付随的な部分については考えません。

 

物理設計

特定DBMS製品(たとえばMySQL)を使う前提に立ち、論理設計で明らかになった各テーブルについて、その内容を詳しく具体化していきます

すべてのテーブルのすべての列について、型、インデックス、制約、デフォルト値など、テーブル作成必要なすべての要素を確定させます

この物理設計に基づいて、CREATE TABLE文などを含む一連のDDL文を作成し、最終的にデータベース内にテーブル作成することができます

 

本書の「図12-4 データベース構築のおおまかな流れ」も参考にして欲しい。

入力 お客様要件(全国の倉庫商品があって、その在庫管理したいんだけど~)

 

 

●処理 DB設計作業

 ・概念設計:(商品)(在庫)(倉庫) …ER図を作成

 ・論理設計:[商品][在庫][倉庫]    …正規化

 ・物理設計:[SHOHIN][ZAIKO][SOUKO]  …使うDB仕様に合わせてテーブル定義表を作成

 

 

●出力 DDL

 ・CREATE TABLE

 ・CREATE VIEW

 ・CREATE INDEX

 

 

 

(2) 概念設計

 

ER図とは?

ER図とは、「Entity-relationship Diagram」(実体関連図)の省略形だ。

 

ER図の用語

コンピューター用語英語ばっかりだから日本語にして欲しいよねw

 

ER図の書き方
  1. エンティティ―」は四角い箱で書く。
  2. 箱の中にエンティティ―の詳細な中身=「アトリビュート」を書く。
  3. 箱と箱を「リレーション」の線でつなぐ。
  4. 線の両端に「カーディナリティー」「オプショナリティー」の記号を書く。

 

ER図で使う記号は、「IE記法」や「IDEF1X記法」など、いろいろな規格がある。

情報処理技術者試験のデータベーススペシャリストの問題では、「UML」という図の記法も使われる。

 

 

 

(3) 論理設計

 

正規化とは?

正規化 Normalization」とは、データの形を「正規形」(Normal form)に変えること。

ざっくり言うと、テーブル(表)を分割して、データの重複や不整合を解消する作業だ。

 

テーブルの形を変えていくステップには、第1~第5まで5段階ある。

  1. 第1正規
  2. 第2正規
  3. 第3正規
  4. 第4正規
  5. 第5正規

それぞれの変形方法について理解しておこう。

実務では第3正規形まで正規化できればとりあえずOK

 

第3.5正規形(ボイス-コッド正規形)

第3正規形をより厳密にした「ボイス-コッド正規形」という形もある。

第3と第4の間なので「第3.5正規形」とも呼ばれている。

(ボイス-コッド形もカウントに入れたら、第1~第5、+第3.5で計6段階になる。)

 

非正規

正規化を進めると、SQLJOIN」の利用が増えてくる。JOINを多用する処理は遅い=DBの性能低下につながる。

第3正規形まで分割しても、実際に使ってみて遅い場合は、第2正規形や第1正規形に戻して使うこともある。これを「非正規化」とか「正規化を崩す」などという。

 

RDBでは処理速度が遅くなる場合、代わりに「NoSQL」を使う場合もある。

 

 

 

(4) 物理設計

 

時間がない場合、先にGUIDB管理ツールでデータベース作成してしまい、その後でテーブル定義表を作成することもある。

 

DB設計に慣れてきたら上記の各段階はすっ飛ばして、いきなりデータベースを作れるようになるだろう。

 

ここまで、SQLの使い方やデータベース設計について学びました。

次回は、その他のSQLに関連する話も見てみよう。

 


anond:20181015215004 未経験からプログラマーなんだが全然からない

anond:20181016015826 増田プログラマー養成講座 その1 パソコンの用意

anond:20181016164341 増田プログラマー養成講座 その2 プログラムデータ+処理、プログラム言語の種類

anond:20181016180059 増田プログラマー養成講座 その3 構造プログラミングの基本(順次、反復、分岐

anond:20181016193144 増田プログラマー養成講座 その4 子ども向け教材「Scratch」で構造プログラミング練習

anond:20181017161003 増田プログラマー養成講座 その5 オブジェクトとは何か?

anond:20181017191404 増田プログラマー養成講座 その6 OOPの種類、PHPの準備

anond:20181019181549 増田プログラマー養成講座 その7 OOPの仕組み(前半)

anond:20181020230044 増田プログラマー養成講座 その8 OOPの仕組み(後半)

anond:20181022232327 増田プログラマー養成講座 その9 MVCフレームワークを使ってみよう

anond:20181023184616 増田プログラマー養成講座 その10 OOP参考書

anond:20181024214133 増田プログラマー養成講座 その11 データベースを使ってみよう

anond:20181026145516 増田プログラマー養成講座 その12 データベース参考書

anond:20181028152656 増田プログラマー養成講座 その13 SQL文法

anond:20181031014212 増田プログラマー養成講座 その14 Webアプリの試作品作成

anond:20181101225335 増田プログラマー養成講座 その15 Webアプリの完成見本

anond:20181101230220 増田プログラマー養成講座 その16 Webアプリの完成見本(続き)

anond:20181104161900 増田プログラマー養成講座 その17 Webアプリの骨組み

anond:20181104233013 増田プログラマー養成講座 その18 SQLデータの追加と取得

anond:20181110120715 増田プログラマー養成講座 その19 SQLデータ更新

anond:20181110182445 増田プログラマー養成講座 その20 SQLデータの削除

anond:20181111205255 増田プログラマー養成講座 その21 データベース設計 (1)要件定義

anond:20181119224031 増田プログラマー養成講座 その22 データベース設計 概念物理 ←★今ここ★

anond:20181024214737 増田プログラマー養成講座 コンテンツ一覧

2018-10-28

増田プログラマー養成講座 その13 SQL文法

前回は、データベース参考書を見た。

今回は、DBで使うプログラム言語SQL」の文法を見てみよう。

 

リレーショナル・データベース(Relational Database、RDB)とは?

WikipediaRDB説明を見てみよう。

関係データベース(relational database)は関係モデルにもとづいて設計、開発されるデータベースである

関係データベース管理するデータベース管理システム (DBMS) を関係データベース管理システム (RDBMS) と呼ぶ。

Oracle Database、Microsoft SQL Server、MySQLPostgreSQLDB2、FileMakerH2 Database などがRDBMSである

 

関係モデルIBMエドガー・F・コッドによって考案された現在もっとも広く用いられているデータモデルである

データベース利用者は、クエリ(問い掛け)をデータベースに与え、データ検索したり、変更することができる。

 

データは表に似た構造管理されるが、関係と呼ぶ概念モデル化される。

関係は組(タプル、表における行に相当する)、属性アトリビュート、表における列に相当する)、定義域(ドメイン)、候補キー(主キー)、外部キーなどによって構成される。

SQLなどに代表されるデータベース言語(問い合わせ言語)を用いて、関係に対して制限・射影・結合・和・差・交わりなどの関係代数演算(集合演算を含む)ないし関係論理演算を行うことで結果を取り出す。

関係複数持つことも可能で、互いを関連させることも可能である

要するに、

 

SQLとは?

WikipediaSQL説明も見てみよう。

SQLエスキューエル)は、関係データベース管理システム (RDBMS) において、データ操作定義を行うためのデータベース言語(問い合わせ言語)、ドメイン固有言語である

エドガー・F・コッドによって考案された関係データベース関係モデルにおける演算体系である関係代数関係論理関係計算)にある程度基づいている。

 

SQLは、シークェルと読まれることもある。

これは、SQLの元となったデータベース言語が、IBMが開発したRDBMSの実験実装であるSystem Rの操作言語SEQUEL (Structured English Query Language)」であったことが由来である

SEQUEL (Structured English Query Language)」を略して「SQL」と呼んだらしい。

 

  1. 質問する、尋ねる
  2. 問い合わせ[クエリー]を行う

英語クエリーは、質問する、問い合わせる、という意味なんだね。

 

SQL3分

SQL説明するとき、3つのグループに分類される。

 

↑このページをよく読んでくれ。理解できたらSQL説明は終わりだ!!!

 

 

 

…というと、説明することがなくなるので、ちょっとまとめておこう。

このページの「表1●SQLDDLDML,DCLの三つに大別できる。このうちプログラマが最も多く使うのはDMLだ」という図を見てみよう。

 

という3種類に分けてる。順番に見てみよう。

 

DDL(Data Definition Language:データ定義言語

データベーステーブル、ビュー、インデックスユーザーなどを作成/変更/削除するときに使うSQL

これでデータベースを使う準備ができる。

  • 「CREATE」…作成する。
  • ALTER」…変更する。
  • DROP」…削除する。

 

DML(Data Manipulation Language:データ操作言語

データ操作するときに使う。いわゆる「CRUD」のことで、SQLのうち、このDMLを覚えれば、とりあえずRDBは使えるようになる。

CRUD(クラッド)とは、ほとんど全てのコンピュータソフトウェアが持つ永続性の4つの基本機能イニシャルを並べた用語

その4つとは、Create(生成)、Read(読み取り)、Update(更新)、Delete(削除)である

ユーザインタフェースが備えるべき機能情報の参照/検索/更新)を指す用語としても使われる。

 

この中で一番活躍するのは、「SELECTコマンド命令文)だろう。

SELECTは、いろんな条件を付けてデータを絞り込む/加工することができて、便利なんだ。(Excelなどの表計算ソフトよりも高機能

 

JOIN(結合)

RDBは「リレーショナル」(関係)という冠言葉が付いてることからも分かるように、関係がある表と表をくっつけて、データを加工できる。

表と表をくっつける操作のことを「結合」という。

SQLでは「JOIN」というコマンドを使って表と表を結合できる。

↑このページにある丸と丸が重なった図を見てくれ。この図は「ベン図」といって包含関係を示す図だ。図を描いて塗りつぶせば、欲しい部分が分かりやすくなるだろう。

 

結合の種類

表と表のつなげ方には、何通りかパターンがあるよ。

  • 結合は、「内部結合」(INNNER JOIN)と「外部結合」(OUTER JOIN)の2種類に分類できる。
  • 外部結合はさらに、「左結合」(LEFT JOIN)と「右結合」(RIGHT JOIN)と「完全結合」(FULL JOIN)の3種類に分類できる。

 

内部結合は単純だ。外部結合はちょっとややこしい。

外部結合は「LEFT JOIN」の形がよく使われると思うので、まず最初にLEFT JOINの仕組みを理解すれば大丈夫だろう。

(LEFTの仕組みを基準にして、RIGHTやFULLとの相違点を意識すれば、表のつなぎ方を間違えにくい?)

 

DCL(DataControl Language:データ制御言語

トランザクション」は、データ更新に失敗したとき、元に戻せる機能だ。(安全装置

  • 「COMMIT」…更新処理の確定
  • 「ROLLBACK」…更新処理の破棄

 

言葉だけだと意味が分かりづらいと思う。

Google画像検索で「トランザクション」を検索して、分かりやすそうな図解を探してみよう。

↑このページの「図1 処理失敗による不整合の発生」を見てみよう。

 

銀行で口座間の送金を考えてみる。Aさんの口座からBさんの口座へ50万円送金したい。

  1. Aさんの口座から50万円減らす。
  2. Bさんの口座に50万円追加する。

この2つの処理が両方とも成功しないと、送金は失敗だ。(Aさんは送金できてないのに貯金が減ったら怒る。Bさんは送金されてないのに貯金が増えてラッキー!)

AとBの両方が成功したら更新処理を確定する。AとBのどちらか、または両方が失敗したら更新処理は破棄してなかったことにする。(やり直し!)

これがトランザクションだ。

 

クレーム対応難易度

ちょっと話がそれるけど、トラブルの重大さ=クレーム対応難易度について考えてみよう。

  1. 人身事故 …人命にかかわる事故は取り返しがつかない。文句も一番キツイ絶対ミスがあってはならない分野のシステム開発はなるべく避けよう。
  2. 金銭絡み …(命の次に)お金大事という人は多い。人は金の話になるとシビア文句も強烈だ。決済など金銭絡みのシステムでは、RDBトランザクションを使おう。
  3. 上記以外 …その他のクレームは、それほどハードではない。匿名掲示板とか、どうでもいいゴミ情報投稿されるシステムなら、トランザクションは使わなくてもOKだろうw

 

DB管理ツール

ここまで、SQLRDB操作する方法について話した。

RDBは、SQLコマンド操作するだけでなく、DB管理ツールを使って操作することもできる。

DB管理ツールについても知っておこう。

 

この講座では「phpMyAdmin」というDB管理ツールで「MySQL」を操作した。

他にも、Google検索で「DB 管理 ツール GUI」などで探してみよう。商用だけでなく無料でも便利なソフトがたくさんあるね。

 

など。

 

SQLパズルだ!

SQLを駆使すると、欲しいデータをホイホイ取り出せる。

SQLコマンドを組み立てる作業パズルのような要素もあるので、遊びだと思ってSQLに取り組んでみて欲しい。

SQL パズル」でGoogle検索すると、いろんなテクニックが紹介されているので、時間があったらチャレンジしてみよう!

 

SQLの話は、それだけで1冊の本になるぐらい広範だ。今回は、SQL概要説明するだけになってしまった。

SQLの詳細については、前回紹介したSQL参考書などを読んでみてね。

 

まとめ

 

次回は、データベースを使ってWebアプリを作ってみよう!

データベースって便利だな~~~!!!」と実感して欲しい。

 


anond:20181015215004 未経験からプログラマーなんだが全然からない

anond:20181016015826 増田プログラマ養成講座 その1 パソコンの用意

anond:20181016164341 増田プログラマ養成講座 その2 プログラムデータ+処理、プログラム言語の種類

anond:20181016180059 増田プログラマ養成講座 その3 構造プログラミングの基本(順次、反復、分岐

anond:20181016193144 増田プログラマ養成講座 その4 子ども向け教材「Scratch」で構造プログラミング練習

anond:20181017161003 増田プログラマ養成講座 その5 オブジェクトとは何か?

anond:20181017191404 増田プログラマ養成講座 その6 OOPの種類、PHPの準備

anond:20181019181549 増田プログラマ養成講座 その7 OOPの仕組み(前半)

anond:20181020230044 増田プログラマ養成講座 その8 OOPの仕組み(後半)

anond:20181022232327 増田プログラマ養成講座 その9 MVCフレームワークを使ってみよう

anond:20181023184616 増田プログラマ養成講座 その10 OOP参考書

anond:20181024214133 増田プログラマ養成講座 その11 データベースを使ってみよう

anond:20181026145516 増田プログラマ養成講座 その12 データベース参考書

anond:20181028152656 増田プログラマ養成講座 その13 SQL文法 ←★今ここ★

anond:20181031014212 増田プログラマ養成講座 その14 Webアプリの試作品作成

anond:20181024214737 増田プログラマ養成講座 コンテンツ一覧

2018-10-20

anond:20181020224028

同意

ロック処理とか甘いしサイズ制限も2GBだしANSI SQLに一部対応してないしで、Webサービスバックエンドに向かないのは間違いないが、さりとて5万行程度のテーブルを捌けない程無能RDBでもない。

複数テーブルでもちゃんと外部参照設定して第3正規化するくらいは普通にできる。複数テーブルJoinしたりサブクエリ書いたりもできる。

元の発言した人は、ちゃんAccessを使ったことがあるのか疑問である

ただ、Excelよりも便利なのは確実だが、WordExcelくらいしか使えない人も多いので、ほかの人とデータ共有するのであれば、Excelのままでもいいかな。

2018-09-11

町中でちんぽ出すくらい許せよ

ええやろちんぽくらい

ちんぽ出しの自由叫びたい

まだそのタイミングじゃないから言えんけど

この世界全裸で歩きたいんや




上記ネタを私が知ったのはAnarchy実況板のお陰です

↓↓↓今すぐ飛び込め!!↓↓↓

http://agree.5ch.net/liveanarchy/

 ↑↑↑JOIN NOW↑↑↑

2018-08-21

anond:20180821121543

これ使わないでhash joinにする方法ないんよね…?

2018-07-19

anond:20180718114419

上記ソースを私が知ったのはAnarchy実況のお陰です

↓↓↓今すぐ飛び込め!!↓↓↓

http://agree.5ch.net/liveanarchy/

 ↑↑↑JOIN NOW↑↑↑

2018-07-18

有識者の暑さ対策すげええええええええええええ

真夏東京五輪、暑さ対策打ち水など検討

2015年04月17日 10時01分

有識者会議は、打ち水のほか、浴衣、よしずの活用など日本ならではの対策を盛り込み、観光PRにも生かしたい考えだ。

外国人観光客に快適に過ごしてもらうため、路上オープンカフェを開きやすいよう規制を緩和することや、案内標識デザイン見直しなども検討する。さらに、赤外線を反射する遮熱材を路面に施して温度を上がりにくくする舗装技術などの効果検証する。

https://www.yomiuri.co.jp/olympic/2020/20150417-OYT1T50027.html

上記ソースを私が知ったのはAnarchy実況のお陰です

↓↓↓今すぐ飛び込め!!↓↓↓

http://agree.5ch.net/liveanarchy/

 ↑↑↑JOIN NOW↑↑↑

2018-04-19

"イエメンになるには"

1 件 (0.19 秒)

The latest Tweets on #三外はアラビア語へ. Read what people are saying and join the conversation.

2018-04-08

読んだページを全部自動ブクマする

数日前に puppeteer で自動PDF にする試みを書いたブログホッテントリに入ってるのを見た

それに影響されて自動ブクマするもの作ってみた

bg.js

const username = ""
const api_key = ""

chrome.runtime.onMessage.addListener((message, sender, sendResponse) => {
	if(message.bookmark){
		bookmark(message.bookmark)
	}
})

async function bookmark(url){
	fetch("http://b.hatena.ne.jp/atom/post", {
		method: "POST",
		referrer: "no-referrer",
		headers: {
			Accept: "application/x.atom+xml, application/xml, text/xml, */*",
			"X-WSSE": await createCredential(),
		},
		body: `
			<entry xmlns="http://purl.org/atom/ns#">
				<link rel="related" type="text/html" href="${url}" />
			</entry>
		`.replace(/\t/g, ""),
	}).then(e => {console.log(e)})
}

async function createCredential(){
	const non = Math.random().toString(36).substr(2)
	const now = new Date().toISOString()
	const buf = new TextEncoder().encode(non + now + api_key)
	const u8a = new Uint8Array(await crypto.subtle.digest("SHA-1", buf))
	const str = Array.from(u8a, e => String.fromCharCode(e)).join("")
	const b64 = btoa(str)
	return `UsernameToken Username="${username}", PasswordDigest="${b64}", Nonce="${btoa(non)}", Created="${now}"`
}

username と api_key を埋めてバックグラウンドで動かす

page.js

chrome.runtime.sendMessage({
	bookmark: location.href
})

ページ内で動かすコード

URLバックグラウンドに投げる

今は全部投げるコードになってるが、必要に応じていらないドメインを弾いたりする

2018-03-28

anond:20180328214304

海外ブログから原書の該当部分の引用だけ拾ってきたので考察は任せた

In the early days of airmail flying, the mail pilots came to believe that their crash rate was unacceptable, even for people accustomed to danger. Finally, a group of them convinced the U.S. Air Mail Service that postal supervisors at the airports were ordering them aloft in bad storms and poor visibility. The solution? Not a new regulation spelling out what weather was safe and unsafe, but rather this simple order: if an outgoing pilot desired, his supervisor had to join him in the cockpit to fly a circuit around the airport before the pilot went off on his mail run. Quickly the supervisors’ tolerance for bad weather dropped.

2018-02-25

pythonって一貫性なさすぎじゃない?

いや、実用的で素晴らしい言語だと思うよ。

でもさ、なんか一貫性が無いように感じるんだよね。

まず、言語の大半の部分がオブジェクト指向言語っぽいデザインになってるのに、listの要素数を測る手段len()って*関数*なのはどうなの?

(しか略語って...)

a = [1, 2, 3]
len(a)  # 3

他にもあるよ! pythonくんのアレな所

俺は、sortとsortedって言う命名からこの挙動をまったく予測できなかった。

  • 破壊的変更をする list.sort()
a = [1, 3, 2]
a.sort()  # None
a  # [1, 2, 3]
sorted([1, 3, 2])  # [1, 2, 3]

しかもsortedにdictを渡すとkeyがlistに変換されてソートされて返ってくる。

コードリーダビティに関する本を開けば、どの本にだって「良い名前選択する」ことの重要性が書かれていると思う。

「sort()が破壊的で、sorted()が非破壊的、sorted()にdictを渡すとkeyのlistがソートされて返ってくる」これって良い命名なのかな?

pythonくんってこう言う所あるよね

配列の要素を文字列連結

", ".join(['1', '2', '4', '8', '16'])  # "1, 2, 4, 8, 16"

えーっ、join()のレシーバー区切り文字って…引くわー

しかも、これに対する「文字列リテラル (文字列定数) のメソッドを使うのは*醜すぎる*」という意見に対しての公式の返答が、これってのも凄い。

かにそうかも知れませんが*文字列リテラルは単なる固定された値に過ぎないというのが答えです。文字列に束縛された名前メソッドが許されるなら、リテラルに使えないようにする論理的理由はないでしょう。

https://docs.python.jp/3/faq/design.html#why-is-join-a-string-method-instead-of-a-list-or-tuple-method

The Zen of Pythonで「醜いより美しい方がいい」って言ってましたやん。

そもそもリテラルかどうかに関係なくstrインスタンスにこのメソッドがある事がおかしいと思った。

なんでpythonくんって一貫性ないの? pythonくん「歴史です」

pythonmap関数として実装されている。(まただよ...)

list(map(lambda x: x*x, [1, 2, 3]))  # [1, 4, 9]

なんでメソッドにしなかったの? って質問に対して公式がこう答えてる。

主な理由歴史です。複数の型に対しての総称的な操作で、対象オブジェクトメソッドを全く持っていなかった (例えば、タプル) としても働くよう意図したもの関数は使われました。

(中略)

個々のケースについては粗探しのしようがありますが、Python の一部であるし、根本的な変更をするには遅すぎます

https://docs.python.jp/3/faq/design.html#why-does-python-use-methods-for-some-functionality-e-g-list-index-but-functions-for-other-e-g-len-list

うわー、信じられねぇ…

歴史的経緯があるから一貫性が無いのは仕方ないみたいなこの感じ。

これが設計思想に「醜いより美しい方がいい」を掲げるpython実装なんだねぇ…

pythonくんの良い所

散々pythonの事を悪く言ったけど、おれ実はpythonくんの良い所もいっぱい知ってるんだ。

pythonくんの良い所:

ライブラリが超充実してる!
インデントコードブロック表現する文法クール!
PEP8という規約であるべきコードフォーマットを明示したのが良いよね。
Cythonで高速化楽ちん!
namespaceが使いやすい! デコレーター便利!

美しくない、それゆえに強いプログラミング言語python

The Zen of PythonPython設計思想が色々書いてある。

「醜いより美しいほうがいい」という指針があることはさっき紹介した通りだ。

pythonがそれを体現してるとは、僕にはどうも思えない。

でもThe Zen of Pythonには「Although practicality beats purity.(実用性を求めると純粋さが失われることがある。)」とも書いてある。

pythonはこの設計思想を他の言語には無い高いレベル体現してるとは思う。

pythonは、

節操に色々取り入れた上で、「tupleからメソッドはやせないから、map関数にする」とか、メチャクチャ方法でそれらを統合した言語だ。

だが、そういう言語からこそ、pythonで書いたコードを育てていく中で様々なパラダイムへとシームレスに変化させていく事ができる。

そういう「不純であるがゆえに柔軟性を持ったプログラミング言語pythonだと思う。

ruby純粋性はすごいよ。イカれたくらい徹底されたオブジェクト指向

BaseObjectをrootとする継承のツリーの中に世界のすべてが収まっている。

haskell純粋性も凄い。「代入が無い」プログラミング言語に初めてであった時の衝撃。

でも、そういう純粋性をかなぐり捨てたpythonにはタブーが無い。

不純で醜い、それゆえに強い言語python.

から僕はrubyとの思い出を反芻し、haskellに焦がれながら、明日pythonを選び、書いていく。

2018-01-19

事業会社データサイエンティスト 会社退職しました

元々コンサル会社から事業会社のほうでデータサイエンティストをやるようになって1年経つが辞める。そのきつかったことを匿名という場所卑怯ながらも話したいと思う。

元々私は大学院でそこそこ統計をやってきてからコンサル会社に行きデータサイエンティストとして事業会社へ移った口だ。

根本的にデータサイエンティストとしての資質としてざっくりいうと以下の3つが必要だと思われる。

1. 統計能力関係及びそのプログラミング可視化能力

2. KPI設計及び事業からKPIへの落とし込みからそのKPIからどう事業繋がるかというビジネス設計能力

3. 上を基にしたコンサル能力

能力的には1がやや強く、その次に2がまぁまぁそして3はまだまだといった所で事業会社データサイエンティストとして孤軍奮闘をすることになった。

 入社理由

データはあるが、なかなか活用できていないこともあり、分析から企画から関われるという事で入社しようと思った。

後そこそこ大きな会社で働くのも良い経験と思い入社を決意した。ニッチな分野ではあるが、この分野ではTopカンパニーである

 実際の業務

最初の4日ぐらいは会社研修とかで潰れるのは仕方ないもので、それが終わり早速の業務を行う事になった。

まずはデータ各部門に依頼してから頂くのだが・・・

貰えない。

許可申請関係で3週間程かかってからまず最初データを頂けるようになった。この時点でやる気を削がれた。

更にデータ確認という事で事業へのヒアリングを進めるだけで・・・6週間程かかった。更にやる気を削がれた。

この辺りで気付いた事だが、コンサル会社でいたときは、データ確認がスピィーディーだったのに何故こんな遅い作業なったかというと

日本企業部署跨ぐというのはとても大変で、コンサルとしてやっていたときは単価も高いし、期間内でやらないといけないという事で

いろいろと調整がスムーズに進んでいたという事がこの時に分かった。コンサルとして外から見ているとやはり分からない事は多い物である

分析ツールエクセルだけ

データ確認も終わり、分析をし、改善を行うテーマを決めて進める事になった。この時点で2カ月ぐらい過ぎていた気がする。R/Python自分パソコンへの許可申請を出すが、降りない・・・会社的にはCならばOKだと言われる。でもCの追加ライブラリー関係ダメらしく・・・悩んだ結果エクセルを基に分析をする事になった。現状把握のために基礎集計をするが、エクセルSQLで言うGroup_byやら違うデータ同士をくっつけるためのJoinを32 bit エクセル関数ベースでやると何度も落ちる・・・。この時点でやる気は地の底へと落ちていた。

この辺りでCベースでもう書き直そうかと悩むが、流石にCのライブラリーがない所でフルスクラッチ調に書くのは工数的にかかると考えたのでvbaを用いていた。

エクセルベースでの可視化から上司関係者にデータ分析の結果を見せていく。この辺りでデータ分析から改善策はまとまっていた。しかしこの辺りでやる気をマイナスにして頂ける言葉を伺う。

私がVBAを書いているのをちらっと見て

プログラミング何かやっていても仕方ないし、プログラマーではねぇ・・・。今後会社ではプログラマーなんていらないか企画できるようにならないと」

勿論これは直属の上司からのお言葉ではないが・・・正確には同期である・・・もはや殺意すら覚える。因みにこの人の既存サービスの改良プロジェクトが回った時のデータ収集したら分析する事になっていたが、プロジェクトスケジュール感を見ると

要件定義 2週間

画面設計及び機能設計 3カ月

開発 4カ月

単体テスト・移行テスト 5カ月

運用以降

みたいな形でうん?何か少なくないか?と思ったら既存サービスに関してのギャップ分析無しに既存サービスの改良を進めているらしい

・・・その上取れるデータは〇〇〇で〇〇〇は無いらしい。あっそんなん改善出来んやん・・・。一応私はアリバイ工作のためにメール会議にて発言する

・・・空気を読めないと言われ会議呼ばれなくなってしまう(因みにこのプロジェクト要件定義から運用以降まで外注である)。

最早これは逃亡しかないだろうと心に固く決めてしまう。

私のコンサル的な能力がなかったと言えば確かにその通りである。でもいやうん日本企業の中で、分析をやっていくのは本当に難しいというのがよくわかる。

一人だったというのもある・・・でも殆ど基礎集計レベルで難しい用語を使わず改善を行おうとしたいやでもこの日本企業では無理だった。そしてやりたいと思わなかった。

たまに日本企業でのエンジニアの不遇差を嘆く記事を見かけるが、割と同じようなパターン臭いがする。

追記

新規リニューアルは当然のごとくつぶれ、また私がよくわからない事にawsへの移行だけは上手くいき(?)

200万pvの会員サイトAmazon aws料金を月々リザーブインスタンスで80万ぐらい払っていてクラウド安くないと社内的に炎上しているらしい。どんな設計したのかは

もはや手をつっこみたくないレベル

2017-12-21

PCパワーをマイニングもいいけど、人類のために使ってみない?

やすっかり定着した暗号通貨マイニングマイニング専用PCを作るためのビデオカードが売れたりと、活況を呈していたりする。

これまでもっぱら個人目的ゲーム動画etc)のためだったコンピュータ演算資源

自らの利益のもののために使うという発想が一般に広まってきつつあるのは歓迎すべきだと考えている。


が、その演算資源科学の発展(人類利益にも通じるかな)に使ってしまおうという発想が、遡ること18年前、1999年に始まった。

SETI@homeであるSETIはSearch for Extra-Terrestrial Intelligenceの略である映画コンタクト」を見た人になら覚えがあるかもしれない。

まり地球外知的生命宇宙人から発せられて地球に届いているかもしれない電波を見つけるという目的運営されており、

それは、プエルトリコにあるアレシボ電波望遠鏡キャッチした電波の中から特定パターンに一致するもの

分散コンピューティング、つまりこのプロジェクトに参加するユーザPCのパワーをちょっと間借りして解析し、宇宙人から電波を見つけるというとてもチャレンジングなもの

これは誰でも参加できる。

この辺の詳しい沿革概要についてはSETI@home - Wikipediaを読んでほしい。

いまではBOINCというカリフォルニア州立大学バークレー校分散コンピューティングプラットフォーム上で動くものであり、

SETIのほかに計算リソース必要とするタンパク質構造予測や、ある種の糖尿病などの先天性疾患の原因遺伝子発見などの

興味深いプロジェクトが行われている。

伝えたいのはここから

夜空を見上げてほしい。東京の人でも今の時期なら冬の大三角形を南の空に見ることができると思う。

私も含めた田舎在住の人ならもっとたくさん、もしかしたらオリオン星雲なんかも見ることができるだろう。

肉眼で見える星の数というのはおよそ8600個。私たちの住むこの銀河系には1000億というオーダーで存在する。

思いを馳せてみよう。

その中にもきっと私たちと同じような文明があること。

私たちと同じように苦しいこともあったり、楽しいこともあったりする生活を送っているだろうこと。

いろんなことを考えているだろうこと。

そして、きっと私たちと同じように彼らの星の外に知的生物を探しているのだろうこと。

そんな途方もないことは現実には知りようがない?

いや、私は考えている。それを知るためにこのプロジェクトがある。

自らのコンピュータ演算が、その途方もないことを知るための小さい一歩であること。

そしてそれが人類にとっての大きな飛躍につながっていること。

この考えとともに今までおよそ10年ほどこのプロジェクトに参加している。

まだ有望な電波は見つかっていないようだが、それでも私は今日コンピュータを走らせる。

強要するつもりはなく、はてなーの皆さんに認知だけでもしてもらいたいと思いこれを書いた。

もしすでに豊富CPUパワーを持っていて知らなかったという人はぜひ参加を検討してほしいし、

マイニングをしているという人は、もしふっとこれが頭によぎることがあれば、参加してくれればいいと思っている。

また最近プロジェクト自体かなりの財政的困難にも見舞われているようなので、寄付ができるのであればしてもらえたらとも思う。

ぜひ、あなたコンピュータ科学の発展のために役立ててみてほしい。

蛇足だし、リテラシーの高いはてなーなら自分で調べてインストールすると思うが、SETI@home

Join SETI@home

からダウンロードできる。

2017-11-22

2017-11-22 の『死にたい

anond:20171122153136 を見つけた今日は、『死にたい記念日

http://anond.hatelabo.jp/20170125102038

約 6,230,000 件 (0.31 秒)

検索結果

相談先のご案内 日本:

0570-064-556

こころ健康相談統一ダイヤル

時間: 都道府県によって異なります。詳細

言語: 日本語

ウェブサイト: www.mhlw.go.jp/stf/seisakunitsuite/bunya/0000117743.html

フィードバック

疲れた・・】死にたい人、鬱な人が必ず見るべき7項目【消えたい】 - NAVER ...

https://matome.naver.jp/odai/2141091366365039201

人を傷つけられない人にとって「逃げる」と言う行動はとても生産的です。自愛と共に生きましょう。

‎消えたい · ‎死にたい人、鬱な人が必ず見る ... · ‎【疲れた・・】死にたい人、鬱な人 ...

#死にたい hashtag on Twitter

https://twitter.com/hashtag/死にたい

See Tweets about #死にたい on Twitter. See what people are saying and join the conversation.

トップニュース

座間遺体】「死にたい」けど「迷い」 田村愛子さん、揺れ動く心書き込み 案じていた兄 産経ニュース 9時間

死にたいSNSが救いの場 規制弱者追い詰める? 朝日新聞デジタル 1日前

座間遺体殺人容疑で追及 「死にたい人いなかった」 - 毎日新聞 毎日新聞 2週間前

死にたい」のその他のニュース

死にたいあなたへ飛び降り自殺失敗者が送るメッセージ - 専業主婦卒業 ...

www.tukishiro01.com › メンタル

2017/07/23 - 死にたい疲れた、消えたい。。。 今あなたはそんな気持ちで、ここに訪れたのではないでしょうか?そして周りに「死にたい、消えたい、もう疲れた」と言って、一度は「でも、死ぬのはだめだ」と言われたことがあるのではないでしょうか? 大丈夫 ...

http://archive.is/AG4rV

死にたくない

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-08-06

5 reasons why Japanese Engineer are fu*king da*n

  • Because they likes "Technical document" much, though they usually study with books even it's Front-end latest technology, Many of them are just translated original EN contents or da*n not sexy sample code, it's worthless in the world which dynamically changing day by day in few months. Regardless of free latest contents which can be found everywhere, they just get Secondary Information given by some evangelists with passive mindset, it causes making this Evangelist? market stable due to this kind of information gap structure.

See also : https://anond.hatelabo.jp/20170728223725

2017-05-31

http://anond.hatelabo.jp/20170530233852

SQL意識して書かないと死ぬほど読みにくくなるのが気に入らない。

前の職場には何もかも全部大文字表記し、ろくに改行も入れないバカが居て死ぬほどつらかった。あろうことか、読みづらいクエリを書ける自分プライドを持ってるっぽかった。ああいう奴とは二度と仕事をしたくないよ。

SELECT COL0,COL1,COL2 FROM TABLE0 WHERE COL0=1000 AND COL2 IN (100,102)

これを少しでも読みやすくするために予約語大文字カラム名テーブル名を小文字表記している (カラム名テーブル名が大文字で決め打ちされているなら、予約語を小文字統一している)。

SELECT col0,col1,col2
FROM table0
WHERE col0=1000
  AND col2 IN (100,102)

しかしこの方法も万全ではなくて、例えば複数テーブルが関連するクエリ

SELECT t0.col0, t0.col1, t0.col2, t1.col0
FROM table0 t0
  LEFT OUTER JOIN table1 t1 ON t0.col3=t1.col3
WHERE t0.col0=1000
  AND t0.col2 IN (100,102)

みたくなってしまう (テーブル名のtable0、仮名t0、カラム名col0が全部小文字になっているため、なかなか読みづらい)。

皆さん、どうやって工夫されてますか?

2017-05-13

発達障害だけど社会に出たらむしろ鬱が治った

中学生の頃、発達障害人達が集まる2ちゃんねるスレを見て自分発達障害であることを知った。

そこに書かれていたのは社会に出た後の発達障害の心の叫び阿鼻叫喚の図だった。

そしてそれは恐らく自分も今後否応なしに同じ道を辿るであろう、自分人生ネタバレ

これから自分は彼らと同じ地獄の道を辿り、最後には社会に捨てられ惨めに首を括るのか、そんな未来予想を想像するのは中高生のクソガキの精神的には少しきつすぎた。

こんな社会ゴミ、死んだ方がいいと何千万回も考えた。

心療内科に行くと発達障害副作用的な抑うつ症状だと診断された。

なんやかんやで口からでまかせ言って就活はなんとかなった。趣味プログラミングをやっていたのがよかった。

頭が悪い学歴もないので大手とかはそもそも諦めていたが、なんとか地方の小さなIT企業に入れた。

まあこんな茶番みたいな就職したところで2週間くらいで首になるか首を括るかするものかと思っていた。

しかし予想に反して、なんやかんやで4年くらい続いてしまった。今年度で社会人5年目。思ったよりなんとかなってしまったのだ。

更に社会の中でいろんな人と触れ合う中で、いつの間にか希死念慮とかも心から小さくなっていることに気づいた。

・間に挟まってる社会的意義が全くない(むしろ社会悪に近い)3次請け案件の某2次請け企業

・3年目でずっとWeb系の下流工程にいるはずなのにJOIN句も知らなかった先輩社員

・2人日仕事10人日に変えてしま錬金術師

ドキュメントバージョン管理どころかRedmineすら使いこなせないSIer

女子中学生買って捕まった某社のプロマネ

etc

自分が死んだ方が良い社会ゴミであることは今でも間違いないと確信している。

でもよかった。

この世界自分が思っていたよりもゴミ人間で溢れていた。

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