「戻り値」を含む日記 RSS

はてなキーワード: 戻り値とは

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-01-20

[]1月20日

○朝食:なし

○昼食:ブリトー(餅お好み焼き)、ホルモン弁当

○夕食:キムチラーメンビールつくね

調子

はややー。

今日と昨日と遅くまで残業して疲れたからか、普段より一際、酔いが回っているので、変なこと書くかも。

問題ありそうならあとで修正する。

昨日言われた通り、調査っていうか、っていうか、向こうの人が望む方式でやるために、もう一度調べ直しをしてた。

向こうの人曰く「このやり方でできる」そうなんだけど、やっぱりどう考えても、できないようにしか思えない。

その、それなりにプログラマやってきてるけど、Web仕事はこの現場が初めてで、いやまあ一年ぐらいこのプロジェクトはいものの、今までは画面とかサーバーサイドで単体で動くバックエンドの仕組みとかを作ってたから、ちょっとこういう部分わからいか

はーい、と頷いて、頑張って調べたんだけど、

やっぱりどうも、そんなやり方はできないようにしか思えない……

うーむ、ちょっと、真面目に勉強したいな、本とか買ってまずは一般論を学ぶべきな気がしてきた。

っていうかあれか、クソ雑魚ナメクジらしく質問サイト質問すればいいのかなあ。

うーーーーーーーーん、なんか難しいなあ、

いやでも、なんか、仕組みを考える限り、できないようにしか思えないけどなあ。

でも、ネット調べるとやってる人もいるんだよなあ。

でも、なんでできるんだあ? なんか理屈がよくわからんぞいやだなあ。

だってさ、GETからURLの中に戻り値が入って取り出せるんでしょ?(うーーーーん、この理解もだいぶあやしいぞ、なんかうまくこの仕組みを理解できてない気がする) POSTだったら、戻り値レスポンス(あれ? リクエスト? いっつも、レスポンスリクエストがどっちかわからなくなる)のボディに入ってくるから、それただの戻り値で、JSONPでもなんでもなくない?

POSTのJSONPなんてできなくない?

でも、できるっていうんだもんなー。

よくわかんねーなー。

僕の頭が悪いんだろうなあ。

そもそも、なんで、向こうの人がPOSTに固執してるのかも、全く全然からないんだよなあ。

セキリティってなに? パスワードとか、機密事項ならわかるけど、ただの検索だしなあ。

しかも、検索結果は嫌がおうにも、DBテキストファイルログ出力されるから、誰が何を検索たかは、URL覗けるぐらいの人なら、POSTでもわかると思うんだけどなあ)

あーーーーー、ビールおいしい。

●XboxOne

○HaloWars2

マルチプレイオープンベータが始まったので、とりあえずダウンロードだけした。

ストーリーが楽しみで、対人戦はあまり興味がなかったんだけど、ネットインタビュー記事によると、

5分とかそれぐらいで楽しめる、短めのモードがあるらしいので、少し興味がある。

別にこれが楽しくなくても、ゲーム自体は買うんだけどね。

3DS

すれちがいMii広場

プレイ

今日10人フルにすれ違えたので、どれも進んだ。

バッジとれ〜るセンター

アクジキングに、ジョウトの悪ポケたちがキターーーー!!!

というわけで、速攻で課金課金

ちゃんと、全員揃えて、悪ポケを並べて満悦です!

恒例の、悪ポケモン実装リスト更新です!

「両」は普通絵、ドット絵共に実装済

「普」は普通絵のみ実装済

「ド」はドット絵のみ実装済

「未」はドット絵でも普通絵でも未実装

カントー

コラッタ(両)、ラッタ(両)、アローラコラッタ(普)、アローララッタ(普)

ニャース(両)、ペルシアン(両)、アローラニャース(普)、アローラペルシアン(普)

コイキング(両)、ギャラドス(両)、メガギャラドス(普)

イーブイ(両)

ベトベター(ド)、ベトベトン(ド)、アローベトベター(普)、アローベトベトン(普)

ジョウト

ブラッキー(ド)

ヤミカラス(両)

ニューラ(両)

デルビル(両)、ヘルガー(両)、メガヘルガー(普)

ヨーギラス(両)、サナギラス(両)、バンギラス(両)、メガバンギラス(普)

ホウエン

ポチエナ(ド)、グラエナ(ド)

タネボー(両)、コノハナ(両)、ダーテング(両)

ヤミラミ(両)、メガヤミラミ(普)

キバニア(ド)、サメハダー(ド)、メガサメハダー(普)

サボネア(両)、ノクタス(両)

ヘイガニ(両)、シザリガー(両)

アブソル(両)、メガアブソル(普)

シンオウ

ドンカラス(普)

スカンプー(普)、スカタンク(普)

ミカルゲ(普)

スコルピ(普)、ドラピオン(普)

マニューラ(普)

ダークライ(未)

例外:無アルセウス(普)、悪アルセウス(未))

・イッシュ

チョロネコ(普)、レパルダス(普)

メグロコ(普)、ワルビル(普)、ワルビアル(普)

ズルッグ(普)、ズルズキン(普)

ゾロア(普)、ゾロアーク(普)

コマタナ(普)、キリキザン(普)

バルチャイ(普)、バルジーナ(普)

モノズ(普)、ジヘッド(普)、サザンドラ(普)

・カロス

ケロマツ(両)、ゲコガシラ(両)、ゲッコウガ(両)、サトシゲッコウガ(普)

ヤンチャム(両)、ゴロンダ(両)

マーイーカ(両)、カラマネロ(両)

イベルタル(両)

戒めフーパー(ド)、解き放たれしフーパ(未)

アロー

ニャビー(普)、ニャヒート(普)、ガオガエン(普)

アクジキング(未)

例外タイプヌル(普)、無シルヴァディ(普)、悪シルヴァディ(未))

これで、アローラの悪ポケの普通バッジコンプ

僕は普通バッジを優先で集めてるので、

カントーは、ベトベターリージョンじゃない方)、ベトベトンリージョンじゃない方)の普通絵が未実装ドット絵はあるから仮置き中。

ジョウトは、ブラッキー普通絵が未実装ドット絵はあるから仮置き中。

ホウエンは、ポチエナグラエナキバニアサメハダー、の普通絵が未実装ドット絵はあるから仮置き中。

シンオウは、ダークライが両方未実装。仕方ないから、バッジとれ〜るセンターバイトを仮置き中。

イッシュは、普通コンプリート

カロスは、いましめフーパ普通絵が未実装ドット絵はあるから仮置き中。ときはなフーパは両方未実装。仕方ないから、バッジとれ〜るセンターバイトを仮置き中。

アローラは、普通コンプリート

こんな感じなので、仮置きしてる、ドット絵普通絵もない、悪ポケは、

ダークライと、ときはなフーパの二体のみ!

(悪アルセウスと悪シルヴァディ例外

うーむ、全悪ポケが揃うのがとっても楽しみです!

っていうか、もう、バッジケースがいっぱいいっぱいなので、ドット絵を外させてほしいから、早く普通絵でコンプしてほしいなあ。

ポケとる

セレビィレベル50)

目標を達成して、メガスキルアップをゲット。

これで、19個なので、目標20個まであと一つ。

20個揃えることで、レックウザが真の力を解放して、ようやく、ポケとるチュートリアルが終わる、とかネットコミュニティでは言われているので、楽しみ。

はいえ、コインを使えば、普通に真の力は解放できるので、コインが使えないランキングイベントとか、メインステージの道中とかで使うぐらいなのかなあ、まだよくわかんないや。

iPhone

ポケモンコマスター

ログボのみ。

2017-01-14

http://anond.hatelabo.jp/20170114155348

明確な目標があるのに、もったいない

ネットだと、情報が多すぎるのかな

javascriptかな?と思ったけど、ruby

ifもforもでてこなくてスマ

eachが形を変えたforです

いろんなとこからコピペ量産して、2時間近くかかりました^^

api取得はすぐだったけど、json、hash、arrayでごにゃごにゃ)

rubyソース

# ライブラリ
require 'net/http';
require 'uri'
require 'json'

# 検索文字
$q = 'http://ci.nii.ac.jp/books/opensearch/search?q=%E7%B3%9E&format=json'

# web-apiから取得
# https://support.nii.ac.jp/ja/cib/api/b_opensearch
def search(q)
    uri = URI.parse(q)
    json = Net::HTTP.get(uri)
    result = JSON.parse(json)
end

=begin
取得データ1件サンプル
{"title":"糞土",
"link":{"@id":"http://ci.nii.ac.jp/ncid/AN00094249"},
"@id":"http://ci.nii.ac.jp/ncid/AN00094249",
"@type":"item",
"rdfs:seeAlso":{"@id":"http://ci.nii.ac.jp/ncid/AN00094249.json"},
"dc:date":"1953",
"dc:creator":"糞土会",
"dc:publisher":["糞土会"],
"prism:publicationDate":"1953",
"cinii:ownerCount":"8"},
=end

# データ整形
#
# 入力データ構造
# {"@id":"http://ci.nii.ac.jp/books/opensearch/search?q=%E7%B3%9E&format=json",
#  "@graph":[ { "items":[ ,,,
#
# 出力(ハッシュ)
# {title => dc:date ,,, }
def format(hash)
    title_date = Hash.new

    # ハッシュキー"@graph"の値の配列の先頭のハッシュキー"items"のハッシュ配列を取得
    items = hash['@graph'][0]['items']

    # タイトル出版年を取得して、戻り値ハッシュへ追加していく
    items.each do |item|
        title = item['title'].chomp
        date  = item['dc:date']
        title_date.store(title, date)
    end

    return title_date
end

# 並び替え
def sort(hash)
    hash.sort_by do |key, value|
        value
    end
end

# 出力
def print(hash)
    hash.each do |key, value|
        puts "#{value}年 #{key}"
    end
end

# メイン関数
def main
    # web-api検索して、
    result1 = search($q)
    # データを整形して、
    result2 = format(result1)
    # 出版年で並び替えて、
    result3 = sort(result2)
    # 出力する
    print(result3)
end

# 実行
main

rubyスクリプトの実行結果

C:\Users\unko\Desktop\prog>ruby webapi.rb
1848年 人欲辨 (じんよくべん)
1870年 雀糞論説
1920年 青瓷説
1933年 管内ニ於ケル鶏糞ノ利用状況
1947年 糞尿譚 : 小説1953年 糞土
1955年 黒い裾
1955年 形成
1959年 石糞
1972年 糞 : 海田真生個人文芸誌
1972年 乳幼児糞便図譜
1987年 糞尿と生活文化
1991年 皇居と糞尿と大嘗祭 : 皇居「糞尿」裁判を支える会ニュース
1995年 糞袋
2000年 糞尿史 : 遷都は糞尿汚染からの逃避だった
2005年 「糞尿」大全
2007年 糞虫たちの博物誌
2008年 うんちのはなし : う~んとげんきになる
2009年 糞神

2016-05-29

富士通退職した話」に言及とついでに自分の話でも。

自分も前に富士通に居て既に退職してます。後で詳しく書くけど、ソフトウェア開発職に居たです。

富士通を退職した話

彼のへの感想

富士通はクソでっかい会社なんだし、サイト見ればメインフレームやってるのだって判るんだから、開発職を希望したらメインフレーム関連の開発やる可能性あるのは当然予見出来るだろうし、それを想像してなかったのなら情弱とかブコメで言われてしまうよね。あと何も記述が無いか想像だけど、「それほど有能ではない」と判断された可能性もある。と言っても学生が思う「開発者として有能かどうか」ってのと会社でのそれってのは別物で、要するに学生自身自分が実績もあって優秀だと思っても、会社的にはそうでないのよね。そうなると(後述の富士通入社して10年が経った人の話にもあるのだけど)新人能力客観的判断材料って大学資格応用情報レベル以上)程度なのよね。資格に関しても基本情報なんてMARCHクラス以上の人間なら受けたら取れて当然だから、「有能かどうか」の判断材料にならない。就活の際に本気でIT業界に入りたいかどうかの判断材料にはなる程度。自分の同世代富士通本体に入ってソフトウェア開発関連に配属された人のプロフィールを見たけど、確か偏差値的には少なくとも神戸大学とか千葉大学あたりの修士しか居なかった覚えがある。あと確か2~3人がソフ開持ってた気がする。だから、この増田がどの程度だったのかなと。

ただ、20人月案件が具体的に何かは判らないのだけど、自分の在籍していた当時でも炎上巨大案件というのはあって、(自分が知ってるのは確かデジタルテレビがどうのこうのとか言ってた)、そういうのに入社して間もなく入ってしまうと自身勉強等が出来なかったり潰されたり最悪死んだりするんで、そういう意味でも逃げるのは正解の一つ。(自分炎上案件に放り込まれ新人が寮で死んでたとか話を聞いたことある

上司対応はまあこれだけ見ればクソだわな。

富士通を退職して思うこと

はあ、としか。この人がこう判断した際の判断材料にするであろう自己体験を具体的に書いてないので、意識高い系がフカしてるようにしか見えない。あと、たった3年しか居なくてあの巨大企業経営とか体制とか理解出来るんかね?と思わないでもない。自分とは部署が違うだろうから当然かもしれないけど、自分体験とは違うなーって感じ。自分は、外から見たら馬鹿みたいな事やってるように見えるかもしれないけど、経緯や目的巨大企業特有問題があってそうなってるんだなって思う事が多々あった。

富士通に入社して10年が経った - blog

近い時期に入社したと思われる。具体的な話が自分経験と一致してる。特に富士通ソフトウェア開発と言えばミドルウェアの開発が主だというのは、富士通内部じゃないとなかなか(特に学生なんかじゃ)判らないかなと。

それでこれらの話を見てどんな人が富士通(というか大企業)に向くのかなと考えたんだけど、「やりたいこと」そこまで明確じゃないけどコンピュータは嫌いじゃないって感じで、地頭がまあまあ良くて勉強に関しても要領よくやれる(要するにそこそこの大学に行って卒業した人)、それでそこそこ安定した職・収入目当てな人かなと。ってコレ書いててふわふわしてる人みたいであまり良い印象の人物像じゃないな。マッチングミスはどうしても起きると思うし、学生の頃に思う「やりたい事」って往々にして変わったり間違いだったりするし、そもそも学生の頃に明確な「やりたい事」がある人の方が少数派でしょ。だからこういうそこそこ優秀だけどふわふわしてる人の方が良いんじゃないかなとか。逆に、ちゃんと「やりたい事」が明確にあるけどまあ安定はしたいって人はどうしたらいいのかって言うと、自分みたく大企業の子会社を狙うと良いんじゃないかなと。子会社ならその会社がやってる事が理解やすいし、入った後の配属の希望も大きく違ったものにはなりにくいし。まあ子会社子会社で色々アルかもしれないけど。

で、自分入社から退社までの話。

入社10年ぐらい前。入ったのは富士通の子会社で主にミドルウェアの開発をやっている所でした。入社して1~2年したら子会社の統廃合とのことで富士通本体連携してる部署自分がそうだった)は富士通本体になりますとのことで富士通本体の方に移ったという経緯ですね。別に待遇とか元々本体と同じだったから変わらず、事務関連が小回りきかなくなったぐらい。入社してから退職までは5年ぐらいでした。辞めた理由実家事業を継ぐ事にしたため。

入社して数ヶ月の時にある温泉地にある某所でその手の開発をやってる子会社沢山と

富士通本体ソフト開発配属の人達研修をやったのだけど、その際に富士通本体人達と知り合った。(この際に全員のプロフィール冊子が配られた)そのときは流石子会社に入る人達本体とじゃレベルが違うな~と思いましたね。(ちなみに自分MARCHより下の院卒。)

自分が配属されたのは某製品部署API部分チーム。その製品C言語Java言語からも使えるように出入り口を用意する部分。中でやってる事は指定されたIPポートプロトコルに沿ってデータ投げるだけなんだけどね。ちなみに配属希望の際は「そこそこの忙しさの所がイイ」と言っていました。「バリバリに働きたい」と言ってた同期は多忙ヤバい所に配属されてました。他にもチームがいくつかあったけど、それらのうちの一つは例の「山奥の工場」でしたね。自分が配属された当時はC言語APIリニューアルするって開発してたのだけど、設計担当Javaしかやったことない人で色々とC言語流儀に反してて後々のメンテが大変でした。まあそれでもリニューアル前よりは遙かに良くて、以前はユーザに見せてる関数名が ○○search1 ○○search2 ○○search3 とかでしたね(ちなみに機能はそれサーチか?思うのもあった)。もっと酷かったのが初期製品Javaの公開メソッドで、マニュアルには「このメソッド引数○○を□□を指定した場合戻り値Objectを△△にキャストしてください。××を指定場合は…」という「これ製品にして売ってたんだ…」と思うレベル。もちろんコレがダメだったってのは開発側も認識していて当時は既にリニューアル済みだったけど。リニューアル済みでも少し微妙だったけどね。

これは、ミドルウェアの開発をやってる人達って基本的C言語が主でJavaとかをやってる人がほぼ居なかったからだと思う。上司もそういうのは良くないってのは認識してた。対象OSWindowsLinuxSolarisだったけど、そんなにたいした事やってなかったからほぼ同じコードだったような。ソケットの一部だけ違ってたっけかな。

それでそのバージョンの開発が終わったあたりで、.NET Frameworkが出始めてきたので次バージョンでは.NET FrameworkAPIを作る事になりまして、自分が少し勉強していたのでそれの設計から担当する事に。当時は.NET Framework 1.1で今思えば少し時期が早かったと思う。2.0Genericが出てからやった方が良かったと思うんだけど、そういうの政治的判断だし結果論だしなー。それまでにRubyとかオブジェクト指向言語に触れてその辺の勉強もしていたので、.NET用のAPIに関しては設計実装結構良い感じに出来たと思う。ああ、そういえばRuby用のAPI効率化の開発ツールとかの名目仕事中に勝手に作ってたなあ。他にもC言語APIも内部実装がクソすぎ!とキレてユーザ公開関数インターフェースだけ同じで中身をフルスクラッチした事も。もちろん絶対LDしてるんで完全に趣味なんだけどな。これでAPIC言語Java.NETになった訳だけど、現場案件で使われたのってほぼ全てJavaだったと思う。(開発中のサーバテストアプリC言語だけど)。要するに自分が数年関わったコードが世の中ではほぼ使われてない訳でして、取りそろえとして必要だったとはいえ世の中の役に立ってないってのは嬉しくは無かったですね。まあ、大企業仕事なんてそういうもんです。.NETに関してはそのバージョンが出る頃はその製品があまり売れてなかったんだか使われたって話は聞かなかったですね。ほほほ。大企業に勤めるのならこういう覚悟必要かもね。

で、.NETAPIが出来たあたりに開発ネタがなくなって保守気味になってきたので、人員整理作業整理との事でインストーラと切りたいけど一度やったからには切れない補助製品担当が増える事に。インストーラWindowsがInstallShieldというクソみたいな言語上で作られたものLinuxSolarisシェルスクリプトのもので、InsallShieldの方のコードはあまりにクソなのでリファクタリングさせてもらった。この辺の開発は少なかったのだけど新OS対応(Vistaとか)とか保守作業が大変だった覚えある。

んで、これらの作業が終わったあたりでこの製品でやることが無くなってきたのと同時に、この製品派生製品の話が出てきてて、それは1機能1exeで提供されてて、それらを纏めるバッチ処理機能部分を担当することに。バッチ処理の内容・順番を記述するのにXMLを使う事になったのでXMLのパーサが必要なのだけど、色々調べたら富士通内部でパーサ作ってたのでそれをもらって使う事に。そのパーサはC++からじゃないと使えなかったのだけど、趣味C++勉強してたので何とかなった。あと、結構OSの知識(プロセスとか)が必要WindowsLinuxSolarisで動くコードを書く必要があってまあまあ大変でした(と言ってもifdefで切り分けるだけなんだけど)。けど、これらの開発は自分が一から設計してコードを書いていたので楽しかったですね。それでこれが完成するかしないかあたりで、このバッチ処理機能が他の開発中の製品バッチ処理に使えないかとか話が出てきたあたりで自分退職する事に。(退職の話は1年ぐらい前に話し合って決定済み)引き継ぎをして退職ということになりました。最後は溜まった有給を使う予定でまだ在籍中だけど部屋を引き払って実家に帰ってたのだけど、打ち合わせに来て欲しいって言われてしま実家から何日か通ったのは良い想い出。というかまさか実家から朝8時に間に合うとは思って無かった。

振り返ってみて残業時間は月40~60時間が多かったかな。100時間超えた時は上司に怒られた。あと退職前の1年ぐらいはうちの事業本部(だったかな?)単位残業禁止になってホント残業0時間になった時期があった。他の部署の人の話で、どう考えても狂ってる上司の話とかを聞いてると上司とかの運は良かったと思う。あと、やっぱり仕事でみっちりプログラミングが出来たのは運が良かったと思う。富士通ソフト開発で C C++ C# Java シェルスクリプト InstallShieldとか(そんなに深くはないけど)色々やれた人間はそうそう居ないんじゃないかな。同期とかの仕事は年上の人の派遣の人に指示出したり取り仕切ったりする仕事とか、保守サポートみたいな開発じゃない仕事の話も良く聞いていたので、ソフト開発のキモ体験出来たのは良かったです(こなみ)。

2016-05-25

http://anond.hatelabo.jp/20160525202812

否。ストリームに限らず、定数は引数で与えなくても純粋関数である、という見解はごく普通

定数って、プログラム中で更新不可能で、いつ読みだしても同じ値が出てくるからグローバルでも問題無いんだよ。

ストリームは定数だ、って言ってみたところで、プログラム全体から更新可能なんじゃ、グローバル変数と同じでしょ?

バグがあって、ストリームに変な値が入った時、どこがバグなのか、追跡するのが困難でしょ?

なんで伝わらないんだろ。

複数人プログラム開発したり、他人プログラムデバッグしたり、したこと無いんだろうか。

まりGUIになればもはや関数型では書けない、というのが推奨スタイルだ、って言ってるようなもの

純粋関数型」とは何か、という話と、とOCamlでそれが推奨スタイルか、って別の話だよね?

岡部氏との争いって「OCamlGUIアプリ純粋関数型(状態渡し)で簡潔に書けるか」ってところじゃないよね?

純粋関数型とは何かといった時にHaskellのように、IOも含めて引数戻り値表現する、関数のふるまいが関数の外の状態依存しない、関数副作用が伴わないとかの性質をいうと思うんだけど、岡部氏はFRP状態関数の外部に持ってても純粋関数型だ、と言ってて、そこで争ってるんだよね?

あと、OCamlGUI状態渡しで書いたら簡潔で無いのを「書けない」、「不可能」って言ってるのはわざと印象操作しようとしてるよね?

Haskellで書けて、OCaml冗長になっても、書けるなら「書ける」、「可能」だよね?

その発言事実か確かめる術はないし、ここで岡部攻撃しているのは君ひとりなのか?他の人間まで一連の誹謗中傷集団ではない、す駱駝、住井が含まれていないみたいに断言する根拠は何か?

俺の書き込み他人といきなり結び付けられたから、電波だな、と思ったの。

俺1人か、とか、らくだや住井が含まれてない根拠とか、関係無いよね。

http://anond.hatelabo.jp/20160524164501

関数型という枠組みの中にミュータブルな時間要素が純粋に収まるようにしているのがFRPだろ。

ストリーム関数の外部に持つFRP純粋関数型っていうのは少数派でしょ。

関数の結果が引数以外で決まるわけだからさ。

多分、純粋とかの定義もまた違うんだろうね。

関数型の拡張」で全部丸く収まると思うんだけど。

いやそもそも岡部氏が複雑なアプリになるとFRP必要

これはGUIアプリ(対話的なアプリ)ってことでいいのかな。

コンパイラだとかをFRPで書かないでしょ。

ユーザから入力リアルタイムに処理するプログラムにはFRP有効だよね。

事実、「駱駝」は「状態渡しはむしろ異常」って書いた上に、

OCamlでは」じゃないの?

全部純粋関数型(引数戻り値に収める、状態渡し)にするのを良しとするHaskellと違って、OCaml副作用部分的に使うのが普通で、IOモナドみたいな入出力までも純粋に書くための道具立てが揃ってない、それでちょっと冗長になる、ってことでしょ?

OCamlの元々の推奨スタイルならもっと短く書けるんでしょ?

俺はそう読んだけど。

それっぽい書き込みほどそうやって、事実誤認だ、と強調するから、なんで当事者でもないのに、そんなことが断言できて、電波だということになるんだ?

だって駱駝でも住井でもない面識も無い俺の書き込みが住井扱いされるんだもの

いやだから、どの関数で読み書きされようと、誰が書き換えようとも、時間にたいしてイミュータブルな定数なんだから、定数は定数なのよ。

いやだからグローバル変数使ってるプログラム欠点をそのまま持ってるじゃん

グローバル変数使ってるプログラム欠点説明する必要ある?

2016-05-24

http://anond.hatelabo.jp/20160524140005

この辺でさ、岡部氏のFRPは、時間軸を持つストリームとしての値っていうのを、特別扱いして外部に持ってるわけじゃん?

岡部氏のFRP」ではなくて、FRPっていうのはそういうもの

反対してる人は、状態を外部(関数引数でも戻り値でも無い所)に持つの関数型的でない、って言ってたわけじゃん?

俺も岡部氏のコード見ながら、この点考えてみたが、時間依存FRPの値を__TIMEVALUEのようなひとつオブジェクトにまとめて、逐一すべての関数引数に加えれば?と思ったが、全部の時間依存関数にそういうことをする意味はない、岡部氏のコードは、反対派ブログに書かれているコードよりも可読性が高く、コード量も半分とか圧倒しているし、「状態渡し」ではアプリは作れない、というのも岡部氏が正面切って批判するまで誰もはっきりと言わなかったことも反対派の信用性がない理由。それに「岡部氏のFRP」とか文句言う反対派の理解が怪しいと俺も思うようになった。

上で引用してるのは「状態渡し」推奨の立場じゃないの?

初心者からFRPのことまで考えてないんだろう。それだけFRPの「考え方」っていうのは難しいんだよ。

http://anond.hatelabo.jp/20160524133941

このように何か処理を実行した際に、入力として受けつけたデータ以外の物が変化することを"副作用がある"と表現するようです。

関数型言語はこの副作用のないプログラムを目指します。

引数データを受け取り、それ以外の情報を使わず戻り値を返す」関数を作ることを考えましょう

外部に依存しないよう関数の入出力を定める

この辺でさ、岡部氏のFRPは、時間軸を持つストリームとしての値っていうのを、特別扱いして外部に持ってるわけじゃん?

反対してる人は、状態を外部(関数引数でも戻り値でも無い所)に持つの関数型的でない、って言ってたわけじゃん?

岡部氏は時間グローバルなのが当たり前、引数戻り値で表す必要はない(全てを引数戻り値表現する「状態渡し」ではアプリは作れない)って立場じゃん?

上で引用してるのは「状態渡し」推奨の立場じゃないの?

なんで状態渡し否定派の岡部氏の路線になるの?

2015-10-15

C# LINQ ラムダ式デリゲート型ではないため...

var val = list.Aggregate((a,b) => {});

コードを書いた時点で発生。

var val = list.Aggregate((a,b) => { return a; });

のように、戻り値指定すれば、型を推論できるようになって、エラーは消える。

関連として、こちらのページ重宝しそうっす。

http://csharp30matome.seesaa.net/article/129993518.html

2015-09-06

Vim不思議なインデント

int
main()
{
printf("Hello Masuda!\n");
return 0;
}

コピペしたらインデント消えたわ…gg=Gでインデントなおさんと。

	int
main()
{
	printf("Hello Masuda!\n");
	return 0;
}

そうじゃない…そうじゃないんだ…。

BSDスタイルでは戻り値の型の前にインデント入れたら駄目なので困った。

" tN    Indent a function return type declaration N characters from the
"       margin.  (default 'shiftwidth').
" 
" 	cino=		    cino=t0		cino=t7 >
" 	      int	      int			 int
" 	  func()	      func()		  func()

cinoptionsでこれを設定すれば解決できるのは知ってる。

だけどデフォルトでインデント入れるのはどういう事情があってのことなんだろう。

2014-09-05

http://anond.hatelabo.jp/20140904234704

基本的に↓の情報が全てだね。


http://officetanaka.net/excel/vba/tips/

http://www.happy2-island.com/excelsmile/smile03/

http://msdn.microsoft.com/ja-jp/library/office/ff194068%28v=office.15%29.aspx


直接欲しい答えが載ってなけりゃ、クラス名/プロパティ名/メソッド名やメソッド引数戻り値の型から仮説を立てて、コード書いて、ブレークポイントオブジェクトの中身見て動作を確認して覚えていくしかないと思うよ。何やろうとしてるか分からないけど、Workbooks、Workbook、WorkSheets、WorkSheet、Range、Cells…等のクラス仕様を詳しく理解するのが一番だと思う。

VBAに関しては、詳しい人に聞いて理解しようと思うのはやめた方がいい。

そんな人いないから

2014-07-01

php 画像表示で文字化けというか文字の羅列が表示されるとき readfile 使

readfile:

説明「ファイルを読んで標準出力に書き出します」

返り値「ファイルから読み込んだバイト数を返します」

header('Content-Type: image/jpeg') とか header("Content-Length: ???"); とか、ちゃんと書いているのに、ブラウザでなんで画像で表示されないんだろ...もしくは " headers already sent by ... "とエラー表示されてる... readfile のあと、データ出力前にソッコーで header 出力させているのになぁ。。

こんなとき、そのPHPコード、readfile の戻り値が読みこまれたデータである勘違いしてつくられてていませんか?

この件に限りませんが、サンプルコードとか勘違いが多いので要注意です。「脳内でうまく動いた」ものを、検証せずにそのままWEBに載せている人って結構ますから

ほかには php.ini の output_bufferingを On にしたら直った、phpファイルBOM 付き <?php や ?> の前後に空白や改行などがある、などが原因の場合もありますね。

2014-06-20

http://anond.hatelabo.jp/20140620004545

多種多様フレームワークライブラリの使い方を覚えたりする必要ないから言語を使えるようになる」ってのははっきり言って簡単だと思うよ。

でもCOBOLは色々大変だぜ?

以下の条件でプログラム作ってみ?ウンCOBOLの片鱗は味わえるかもね。

要件

入力ファイルA及びBのレコードマッチングを行い、一致した場合はA又はBで持つコード対応した値をマスタC、D及びEから取得して集計結果をファイルFに出力し、マスタから値を取得出来なかったレコードファイルGに出力せよ。

ファイルA及びBはそれぞれカラム数200程度


作成上の制約

他にも色々あったけどもう忘れちった。思い出したくもねーけど。

2014-06-04

http://anond.hatelabo.jp/20140604161013

IsCheckedに限らずメソッド戻り値が指す意味がtrueかfalseかnullか、この3つにドンピシャに当てはまるならいいんじゃない

http://anond.hatelabo.jp/20140604115017

戻り値の受け側変数意味を持たせたいなら、変数名で示せばよいと思う。

2状態ならわかるんだけどさ、3状態を変数名で示すってどうするの?

http://anond.hatelabo.jp/20140604110604

関数戻り値の型には、現に頻繁にBOOL型が使われ...関数自体定義されている意味を持って返してくるのだから内容は自明戻り値の受け側変数意味を持たせたいなら、変数名で示せばよいと思う。

2014-05-20

malloc関数を覚えた

必然、manalloc関数必要とする。引数にはアナル拡張する直径mmを指定する。戻り値アナル拡張によって得られた快楽指数「ヘゲナ」を返す。「ヘゲナ」はfloatの拡張であり、double性奴隷である。decimalとは竿兄弟である。reanalloc関数必要であろう。というのも、アナル拡張は必ずしも1度ではない、否、むしろリピーターが多いのではないか?おれはそう思っていて、やはりreanallocは需要がある。引数は2つ必要だ。拡張対象アナルへのポインタ(どちらも表記は*だし実にちょうど良いと考える。C言語の創始者もそれを想定していたのではないか・・・?と思うほど、実に調和の取れていて、不気味に符合するのだ。閑話休題。2つ目の引数は再拡張するためのサイズを示す。ここではsize_tが型になる。tとは勿論ちんぽのことで、直径cm意味する。しかし考えてみると、各種アナルを開放するfree関数は実に意味深だ。何から開放するのだろうか?ちんぽだろう。おれは、そう考えている。C言語楽しいぞ。

2014-01-28

フェルミ推定面接についてそろそろ一言いっておく 1/29 23:29追記

黙っていようと思っていたが、フェルミ推定面接がまたもや話題になっているので、言及してみようと思う。

私の知る限り、この面接手法最初に広く世の中に紹介したのはウィリアムパウンドストーン書籍

ビル・ゲイツ面接試験』(2003)においてであり、マイクロソフト社の所在地になぞらえて

レドモンド面接と呼ばれていた。富士山をどうやって動かしますか、というやつだ。

当時既に、この手法に対して神経学者や教育学から懐疑の声があがっていたことにパウンドストーン

触れており、著者自身、手法のものにたいして中立の立場に立って紹介していたと記憶している。

この試験はその目新しさから多くの企業マイクロソフト躍進の秘密解釈され模倣されたのだが、

たまたまShallice & Evans の論文"The Involvement of the Frontal Lobes in Cognitive Estimation"(1978)を

読んでいた私が(ちなみに、論文存在アントニオ・ダマシオの書籍内での引用で知った)この面接を知って最初に考えたのは、

「なぜマイクロソフト面接者の前頭葉機能障害なんかを調べているのだろう」

というものだった。

上記論文で行われている実験は、被験者が知らないであろう数値を推測させる単純なものだ。

例えば、「男性の脊椎の長さは平均どれくらいですか」「オランダラクダは何頭いますか」等。

そして、前頭葉機能障害を持つ被験者は、異常な推測値を挙げる傾向にあることが示された。

前頭葉機能障害と聞いて、ピンとくる人もいるかもしれない。

アスペルガー症候群高機能自閉症、PDD)は、まさに先天的前頭葉機能障害により発症するものと考えられており、

また、優れたプログラマにはこの症候群者が多くみられることから俗にシリコンバレー症候群とも呼ばれている。

そこで、問題だ。どうやってアスペルガー症候群プログラマを見つけ出せばよいのだろうか?

面接者に精神科受診と診断書提出を求めるわけにはいかないだろうし、面接中に2時間近くかかる検査

行うわけにもいくまい(ちなみに、私自精神科アスペルガー検査を受けたことがあり、「PDDが強く

疑われる」という検査結果が出た。さら鬱病で、目下生活保護受給中の身である)。

しかし、逆に考えてみたらどうだろう。そもそもマイクロソフト面接にまで進める資質を持っているほど

優れたプログラマならば、すでにアスペルガー症候群である可能性が高い、と。

それならば、行う検査は最小限のものでよい。実際、フェルミ推定だけで面接合格者を決めるわけではないのだ。

さまざまな(より専門的な)質問のなかにさりげなく、「ニューヨークピアノ調律師は何人いますか」という

ような質問を挟む。上記論文内で紹介されている質問の多変数版だ。注意すべきは、フェルミ推定においては

正解が存在しないことだ。推測で変数を適当に選び計算するだけなので、実際の調律師の数に近いほど優秀な

推測だということにはならない。それは単なるまぐれ当たりだ。ちなみに、大勢人間フェルミ推定をさせて、

その平均値を取ると実際の数に近くなる。これを集合知という。フェルミ推定積極的な使い方を探すなら、

このような方向性になるだろう。選んだ変数の妥当性をみて思考力を測るのだという意見もあるが、残念ながら

その主張を支える実験結果は出ていない。それゆえ神経学者や教育学から懐疑の声が挙るのである

だが、実際には全く逆の発想でフェルミ推定クイズが課されていたとしたら、どうだろう。

まり、異常値検出のための質問だ。

おそらくこの面接を考えだした人はプログラマなので、プログラミング用語で例えてみよう。

フェルミ推定試験という関数は、戻り値としてブール値を要求し、Falseの場合のみテストを通過する。

それだけだ。筋道たった思考、適切な変数の選択、素早い計算、そんなものをこのテスト面接官は見ていない。

面接者はどんな質問にも答えてやろうと意気盛んな、高学歴で専門知識豊富な人物である

そんな人物が、より複雑なホワイトボード上でのコーディング試験で困難なスケーリングの問題を解決する

アルゴリズムを制限時間内に書き上げられるような人物が、よりによって簡単ないくつかの変数の推測問題において

すました顔で異常値を出したら。

これは、医学的な診断を下すには不十分であっても、マイクロソフト社の面接官にとっては十分な

アスペルガー症候群サイン」なのではないか。

こう考えると、なぜマイクロソフト社がフェルミ推定面接を行う理由に関して口を濁すのかも理解できる。

障碍者逆差別プログラマという職業への偏見助長、さまざまな倫理的問題が噴出しかねない地雷原が

広がっているのだ。勝手に世間想像させておくに越したことはない。そうだろ?

いや、それが違うのだ。

レドモンド面接就職面接での流行となり、多数の模倣者を生み出した。Google社はその筆頭だ。

昨年、Google社はこの手のクイズ面接(原文では"brainteasers")には効果がないことがビッグデータでの

検証により判明したので今後は行わないと発表して話題になった。

うん、実に面白いビッグデータ検証したって? 統計的検証を行うためにはまず仮説が必要なわけだが、

どんな仮説をもとに「Google社員面接応答とその後の実績」という「ビッグ」データ分析したのだろう。

つのケースを考えてみよう。その一、フェルミ推定面接で人物の思考力の優秀さが測れるという仮説が

ビッグデータにより棄却された。まあ、妥当な結論だ。そもそもフェルミ推定をさせてもそんなものは測れない

のだから、なんの相関もないという結論にたどり着くに決まっている。

その二、Google社はマイクロソフト社が同種のテストをする真意について、上記のような理由によると推測した。

この場合、仮説も検証もない。いかに地雷から撤退するかが問題だ。Evilだと思われるよりバカだと思われる方が

マシだろうし、適当にビッグデータとか言っておけば他の模倣者連中も納得するだろう。

どちらにしても、フェルミ推定面接の正しい運用は出来ていなかったわけで、無駄だったことには変わりがない。

しかし、この面接手法が大流行してしまったことは問題だ。

日本では、たしか2007年から地頭力」という言葉とともに流行ったと記憶しているが、異常値検出に

使わないのであれば、フェルミ推定面接は多少お上品な圧迫面接としてしか機能しない。

それだけならば問題は小さいが、この手法の「仕様」を理解せずに行われる面接ではアスペルガー症候群者が

常識の無い人」として切り捨てられる可能性が高い。知らず知らずのうちに障碍者排除に加担することに

なるのだ。

そろそろまとめに入る。

フェルミ推定面接は、異常値検出のための手法として用い、アスペルガー症候群の可能性が高い候補者を選びだす

という目的で使わない限り、その効果理論的根拠はない。

そして、この目的で使う場合アスペルガー症候群であることが有利であると報告されている類の職種でなければ

意味がなく、また、この手法を使う以前にある程度の候補者スクリーニングができていなければ、圧迫面接

亜種としてしか機能しない。さらに、たとえアスペルガー症候群者が高いパフォーマンスを示す傾向のある職種

だとしても、アスペルガー症候群者の方がそうでない候補者より優れているとは限らないし、単に常識に欠ける人を

誤検知してしまう可能性も残る。

また、この手法の濫用が無自覚アスペルガー症候群者を就職市場から排除する圧力として働きかねないという

問題がある(いや、別に私が現在無職なのは世の中が悪いと言っているわけではない。そもそもフェルミ推定面接

を課されたことがないので)。

というわけで、現在就活中の皆さんにアドバイスしよう。もしも面接中にフェルミ推定クイズを出されたら、

上記の内容を簡潔に説明したうえで、逆に質問してみよう。

御社では高機能自閉症を職務上重要な資質だとお考えですか」

障碍者枠での雇用を広げた方が御社にとってメリットが大きいのでは?」

などなど。

なお、このような質問をして不採用通知を受け取っても、当方では責任を取りかねますので、あしからず


P.S. 推敲大事。いや、残しておくけどさ<戻り値


追記

一日で400ブクマ超えてて驚いた。

なんかいろいろと申し訳ないので、少し反応してみる。

はてな記法がちゃんと反映されてるか心配

id:fb001870

>>市井にも知識人はいると感じさせられる例 大学教授とかかもしれんけど<<

いえいえ、ただの30過ぎの高卒ニートです。一応短大には行ったんですけど、中退しました。

失業してからそろそろ二年、早くなんとかしたいところです。

id:houyhnhm

>>陰謀論楽しいです。<<

すてきなお名前ですね。楽しんでいただけて嬉しいです。

他の人が思いつかなさそうな突飛なアイデアが湧いてくる瞬間が気持ちよく、

今回はそれを多くの人と共有してみたくてエントリを書き上げました。

はてなブックマークはほぼ毎日見ていますが、ログインするのは数年ぶり、

増田利用は初めてです。去年のGoogle社の発表の頃は、鬱が酷くて文章を

書ける精神状態ではありませんでしたが、今回また話題にのぼったので書いてみました。

id:sippo_des

>>おもしろーい。はやく病が消えますよう。<<

ありがとうございます鬱病で怖いのは、自殺願望自体は持っていないにも関わらず、

論理的に考えると自分死ぬべきという思考の袋小路に突き当たってしまい、自分の理性を

信頼できなくなることです。

去年から飲み始めた薬のおかげで、いまは快方に向かっているようです。

id:Dy66

>>面白かった。採用担当に対する攻撃方法まで書いてあって素晴らしい。<<


いやいや、採用担当も大変な業務なので、どうか労ってあげてください。

人間、出会ってしまった相手とは結婚から殺人まで、何でも起こりますから、物腰は柔らかに。

仮に、アスペルガー症候群プログラマ能力相関性が囁かれた頃にマイクロソフト社が

実験的に本エントリのような意図テストを行っていたとしても、有名になりすぎてしまったので

すぐにアイスブレイカーとしてしか機能しなくなったでしょうね。ですから面接でも

それくらいのつもりで望めばよいのではないでしょうか。

id:ooblog

>>実際にはフェルミ推定そっちのけで・・・<<

日本ではフェルミ推定問題ばかりにスポットライトが当たっていますが、

アメリカでのいわゆる"brainteasers"面接では厳密な思考が要求される

論理パズルの類が出題されることのほうが一般的なようです。

論理パズル専門のクラスが開講されている大学もあるようです。

オーム社から出ている「プログラマのための論理パズル」で実例が見られます

私はプログラマではありませんが、趣味読書ですので本なら何でも読みます

SICPCTMCPから始まって、今は横内寛文さんの「プログラム意味論」を読んでいます

ところで、なぜ「趣味読書」というと、文学ばかり想起されてしまうのでしょうね。

私はナボコフジョイス海外文学も好みますが、セシルやハリソンも同じくらい

興味深く読みますし、OEDや円周率百万桁表(暗黒通信団通読にも挑戦したいです。

id:kanan5100

>>元論文見たけど・・・<<

論文の内容にちゃんと言及する人が現れるまでに400ブクマもかかるとは、

はてな村英語力ならびにメディアリテラシー心配です(村人ほとんど来てないけど)。

ちなみに、さらに言うと元論文では被験者後天的な外傷による前頭葉機能不全の

ケースですので、これと先天的であるアスペルガー症候群を結びつけるのは、

なおさら暴論です(無関係だという立証は、別途必要でしょうけれど)。逆に言えば、

フェルミ推定面接有効性に理論的根拠を与えるのはそれだけ困難だということで、

オカルトに付き合わされる就活中の皆さんに同情します。

現場フェルミ推定を使う」派の人には、フェルミ推定専門家としての推定の区別

きちんとついているのかどうか、胸に手を当ててよく考えてみてほしいものです。

ついでに言うと、ダマシオの書籍とは"Descartes' Error"です。なかなか面白いですよ。

西尾泰和さん

id:nishiohirokazu

http://d.hatena.ne.jp/nishiohirokazu/20140129/1390932575:titile=フェルミ推定アスペルガー症候群の関連を主張する人がいるがかなり酷い]

つい先日、ご著書を拝読したところです。

もし第二版を出す機会がありましたら、メモリ管理手法の変遷についても一章を割いていただけると、

ハードウェア方面への橋渡しにもなり、新人プログラマにとってより興味深くなるのではと思いました。

>>まず、ここが嘘<<

はい、おっしゃる通り、確かに現在でも因子は確定されていません。

ものが"The most complex structure in the universe"なだけに、

どの部位がどのように発症のメカニズム寄与しているのか、解明されるのは

しばらく先のことでしょう。

エントリの文章は、10年前にレドモンド面接を知ったときに二分ほどで

こしらえた仮説とGoogleの去年の発表に対する感想をそのまま書いただけですので、

前頭葉(あるいは前頭前野)の機能不全がすべて」と主張する意図はありませんでした。

「まさに」という部分を「一説によると」くらいにトーンダウンさせるべきでしたね。

「異常な推測値」に関して言えば、被験者が知らないと予想される数値ということなので、

論文内の「後天的機能障害を負ったグループ」はともかく、アスペルガー症候群場合

専門分野での推測能力にまで欠陥が及んでいるとは、自分の経験から照らしても考えがたいところです。

そもそも、推測能力一般について欠陥を抱えているという状態はアスペルガー症候群どころではない

重篤状態かと思います。そのように読み取られてしまう余地を作った自分文章力不足を改善して

いきたいところですが、つい断定的な言葉遣いを使ってしまう過ちは誰にも少なからずあるものかと思います

例えば、西尾さんのブログの追記の段落で、突然人称代名詞として「彼」と使われていますが、

エントリには私の性別を明示するような言辞は含まれていません。アスペルガー症候群

男女比において男性の方が症例が多い傾向が報告されていますが、それだけで私が男性だと

断定してしまうのは、アスペルガー症候群に関わる脳の部位について、前頭葉コインを全部

賭けるようなものではないでしょうか。人間には他の性別もありますよ。例えば、ええと、ほら、女性とか。

もっとも、Forensic Linguisticsの専門家ならば、文章から人種、性別、年齢、学歴

体格、病歴、居住エリア等を正しく推測できるのでしょうが西尾さんは違いますよね?


その他・・・

セルクマしたら一発でMidasさん辺りにアカウントばれしそうだったので、あえてしませんでした。

今後もはてなログアウト状態のROM専で楽しんでいこうと思います

デジタルアナログわず住所氏名年齢生年月日IDパスワード以外の文字列アウトプットするのは

何年かぶりですが、これも鬱が快方に向かっているサインと思って、また何か書ければいいなとは思います

2013-08-05

1週間ぐらいHaskellの独習してみたんだが、

関数型言語ってよく知らんから、かなり頭が混乱した。

しかし、なんで入門書とか、入門サイトっては、ああも説明がわかりにくいんだろう。

難しいというより、簡単に見せようとして自滅してる感と言うか。

例えば、先にラムダ式で (\ x -> x*2) みたいなのやって、次に複数引数がある場合として (\ x -> (\y-> x*y))

とかやってから、これは (\ x -> \ y-> x*y) と同じで、さらに簡易的な書式として (\ x y -> x*y) と書けるって順で

教えてくれれば、引数1の型 -> 引数2の型 -> 戻り値の型 みたいな表現も、すぐ理解できるし、

case of の文法見た後で、関数の説明してくれれは、関数マッチングcase ofによる表現を簡易的に書けるようにした

ものしかないってわかると思うんだが、なんでラムダ式より先にマッチングパターン付きの関数から説明しちゃうかねぇ。

カリー化もラムダ式を理解すれば、それが自然な展開であることはよく分かるし。

モナドも、左式の出力を右式の入力パイプ的に渡す演算子定義して、左式の出力の結果を確認してから

右式の入力に渡すようにしておけば、前の処理が先に実行されるから、IOみたいな順序性があるもの

この仕組で対応できる、という説明が欲しかった。

人は一度理解してしまうと、何が解らなかったのか忘れてしまうからしょうが無いのかな。

2013-06-30

プログラミングの授業ついていけてるのかわかんない

JavaiPhoneアプリの授業受けてる。

今のとこ課題は全部出せてる。

授業で先生が書くコードを一緒に書いていって

forとかwhileとか配列とかスレッドとかそういう技?みたいなのはなるほどってなる。

けど、書いたコードの説明に入って

プリミティブ型?とかキャストとかわけわかんない単語使いながら

クラスとかメソッドが~~とか言われるとわけわかんなくなる。

用語解説必死に読んでも日本語と思えないことが書いてあって辛い。

iPhoneアプリの授業はインターフェスビルダーとXcode関係を結ぶところとか、

アクションメソッドでどういう動きさせるかはJavaの授業とリンクしててよくわかって楽しいんだけど

インスタンス解放とかアウトレット?とか戻り値とかデリゲートとか

アクションメソッドでどういう動きさせるか書いた下の方にあるコーナーに

先生がこの文入れといてください これはリリースしますとかわけわかんないこと言ってるのにしたがって文を写してて

これで本当に大丈夫か??ってなる。

どちらも同じ先生で、質問してもそのうちわかってくる!って言われるからそうか…ってほっといてるけど、

言語の詳しい説明はいつになったら理解できるようになるか不安になる。

自習の仕方もわからないし。

どうすればいいですか?

日本語でOKですいません。

2013-04-01

PHP13.4.1の新機能

PHP最新版がようやく正式に発表されましたね。新機能等について調べてみたので流行に敏感な人はぜひ今のうちから勉強しておきましょう。

下位互換性のない変更点

  • 「?>」の廃止

「?>」を積極的に使うことにより、余計なホワイトスペースを混入させてしまう問題がありました。

これは厄介で非常に根が深い問題でしたが、ようやく根本解決として廃止されました。素晴らしいですね。

今後「?>」を使うとコンパイルエラーとなるので注意が必要です。

機能

abstract文で囲うとそのコード自動抽象化します。

昨今抽象化抽象化特に意味もわから言葉だけ連呼する人間が増えてきました。しかし新PHP時代における抽象化はもはや人間が理解しなくてもできるようになります

$class = abstract {
    $人間 = array('name' => 'yamada', 'age' => 20);
    $佐藤 = array('age' => 20);
    $動物->name = '花子';
    $動物->type = '犬';
    
    function move ($a) {
        $a->position++;
    }
};

$class->move();

このような処理が、自動抽象化され再利用できるようになります。もちろんクラス抽象化だけでなく、手続きやデータ構造であっても適切に自動抽象化されます

またcatch文を繋げる事で抽象化に失敗した場合を検出することが可能です。

  • 強力な型チェック

php実行時オプションに強力な型チェックオプション(-compile)が追加されました。

$ php -compile example.php

そのスクリプトにおける全ての処理パターンを実行し、全ての型のチェックを自動で行います。その際、外部に影響を与えるような処理(ファイルへの保存等)は型チェックのみを行い無視されます

この強力な機能のおかげでもはや静的言語の利点といわれていたコンパイル時の型チェックを軽く超えました。

動的言語でありながら、考えられる全ての型の引数、例外系を全ての関数の組み合わせで網羅的にチェックします(しかもチェック時間は長くても0.数秒という驚異的なチェック能力です!)

これが今回の目玉機能でしょう。

theworld文で囲うとその間の時間が止まります

theworld {
    // 止まった時間の中を動けるのは$dioだけ
    $dio->foo();
    $dio->bar();
};

$dioという特殊変数が用意されているのでその変数を使って処理をすることができます

用途としては非常に重たい処理をさせるのがいいでしょう。実時間0秒で実行することが可能となります

ただし9秒までしか止められないので注意が必要です。ですが回避策として以下のようにすれば追加で5秒止めることも可能です。

theworld {
    $dio->foo();
    $dio->bar();
}
starplatinum {
    // 9秒過ぎた時点でこちらへ
    $jotaro->foo();
};


PHP 13.4.x で推奨されなくなる機能

名前空間(namespace)が非推奨になりました。これを使用するとE_NAMESPACE_YEN_ARIEHENという警告が発生します。

非推奨となった理由ですが明確にはされていません。大人の事情ってやつでしょう。

ただ噂レベルでは、やはりというか区切り文字の「\」がありえへんという声が多かったからではないか?と一部囁かれています

mandomキーワードが非推奨になりました。mandomはきっかり6秒戻すという機能ですが、逆に言うと6秒きっかしか戻せないので扱いづらいという問題がありました。

また以下のような処理を書いた場合に$flagバグ等で常に真になるケースにおいて無限ループとなり、非常に危険だという問題もあります

// 何かしらの処理・・・

if ( $flag ) {
    mandom;
}

このようにPHP初心者がmandom使って無限ループをさせてしまう事案が後を絶たず、なかなか現実時間が進まないという問題が発生したため、廃止予定となります

新しい関数

Google検索したコード小片取得し、実行させる関数

$mail = google_search_exec("メール送信するやつ",2);
$mail("user@example.com");

例えばこれだけでメール送信できるようになります

第一引数検索ワード。PHPというワードは自動で含まれるので指定する必要はありません。

第二引数検索結果一覧の指定位置。2だと上から二つ目検索結果のURLコード小片を使うという意味になります

また第三引数にはコールバック関数を指定することによりコード小片にフィルターをかけることも可能です。

このような処理がたった2行で書けるというのがPHPの利点ですね。

日本語名の関数が新たに追加されました。これは非常に便利な関数です。

$code = 写経("
$a = 1 + 2;
print $a;
");

引数に与えられたコード片を写経します。戻り値写経結果が返ってくるのでそれを利用するだけです。簡単ですね。

サッケード発生中における自動補完のための関数です。

この関数が呼ばれると一瞬処理が止まったように見えますが、実際には自動補完で動作が完了している状態になります

for($i=0;$i<10000;$i++) {
    if ( $i % 2 == 0 ) {
        chronostasis();
    }
    
    // 何かしらの処理・・・
}

素晴らしい機能ですね。今後はこれ無しじゃプログラムできなさそうです。

PCが爆発します。

用途ですが、言わずもがな流行の真契約プログラミング用ですね。アサートの代わりに使うとよいです。

function foo ($a) {
    pc_explosion(!is_null($a),'$aはNULLはダメー!');
    
    // 何かしらの処理・・・
}

テストコードを実行する場合PCの周囲に人が居ないか気をつけてから実行させましょう。




というわけで新しい機能てんこ盛りでしたね。

個人的に良いなと思ったのはpc_explosion関数ですかね。約束事を守らないプログラマーなんぞ爆死しちゃえばいいんです。僕を含めて(お

2013-03-08

[]開発の手順

1. そうなって欲しいこと・願望・コンセプトを得る。得ようと思っても得られない。ここは偶然起こること。

2. 何をするか・What・思い付きを挙げる。ブレインストーミング

3. どうやるか・How・方法を考える。「できそう」という段階まで。

4. 必要もの・使える技術前例を集める。他人を説得できるようになる。

5. 機能クラスといった実装上の分割、役割分担など行動に移すための細分化と割り当てを行なう

6. 各機能・各クラスでやることを列挙する。

7. やること別に「そのためにやらなければならないこと」を実行順通りに書き下す。擬似言語擬似コード

8. 擬似言語設計→擬似言語フィードバック設計と擬似言語→実装

コラム ── アサーションについて】

擬似コードを書くならアサーションも一緒に書く。不要な用語や用語の重複があるとうまくアサーションを書けない(かみ合わない)。用語の最適化変数コード最適化でもある。

事前条件→事後条件をアサーションで表明、事後条件→他の事前条件へ連鎖契約によるプログラミング契約プログラミング

擬似言語でのアサーションはそのままプログラムコードでもアサーションになるか、テストコードになるか、メソッド|関数|手続きのパラメーター・戻り値コメントになる。アサーションは「実行可能なコメント」(Executable Comments)とも呼ばれている。

9. あとはセンス

RIGHT:[[:t/Prog]]

----

CC0

2012-08-13

C#基礎文法最速マスター

1. 基礎
classの作成

プログラムclass記述します。たとえばSampleという名前classを作る場合、Sample.csファイル内に次のように書きます。(C#場合ファイル名とクラス名は同一でなくても良い。複数のクラスを書いても良い)

public class Sample {

}
Mainメソッドの作成

プログラムclass内のMainメソッドの先頭から実行されます。Mainメソッドは次のように書きます

public class Sample {

    public static void Main( String[] args ) {
         // 処理を書く
     }

}
Console.WriteLineメソッド

文字列を表字するメソッドです。

Console.WriteLine( "Hello world" );
コメント

コメントです。

// 一行コメント

/*
   複数行コメント
 */
変数の宣言

変数の宣言です。変数の宣言時にはデータ型を指定します。

// 変数
int num;
データ型

データ型です。C#データ型には値型と参照型とがあります。以下は値型のデータ型です。

// int(整数)型
int num;
// char(文字)型
char c;
// float(単精度浮動小数点)型
float val;
// double(倍精度浮動小数点)型
double val;
// bool(論理)型
bool flag;
// DateTime(日付)型
DateTime date;

以下は参照型のデータ型です。

// StringString s;
// 配列String[] array;
プログラムのコンパイル

プログラムコンパイルするには、コマンドラインで以下のようにします。

csc Sample.cs
プログラムの実行

プログラムを実行するには、コマンドラインで以下のようにします。

.net framework on Windows場合

Sample.exe

Mono.frameworkの場合

mono ./Sample.exe
2. 数値
数値の表現

int、float、double型の変数に数値を代入できます。int型には整数だけ代入できます。float、double型には整数でも小数でも代入できます

int i = 2;
int i = 100000000;

float num = 1.234f;

double num = 1.234;
四則演算

四則演算です。

num = 1 + 1;
num = 1 - 1;
num = 1 * 2;
num = 1 / 2;

商の求め方です。割る数と割られる数が両方とも整数場合計算結果の小数点以下が切り捨てられます

num = 1 / 2;  // 0

割る数と割られる数のどちらかが小数場合計算結果の小数点以下が切り捨てられません。

num = 1.0 / 2;    // 0.5
num = 1 / 2.0;    // 0.5
num = 1.0 / 2.0;  // 0.5

余りの求め方です。

// 余り
mod = 4 % 2
インクリメントとデクリメント

インクリメントとデクリメントです。

// インクリメント
 ++i;

// デクリメント
 --i;
3. 文字列
文字列の表現

文字列ダブルクォートで囲みます

String str = "abc";
文字列操作

各種文字列操作です。

// 結合
String join = "aaa" + "bbb";

// 分割
String[] record = "aaa,bbb,ccc".Split( "," );

// 長さ
int length = "abcdef".Length();

// 切り出し
"abcd".Substring( 0, 2 )   // abc

// 検索
int result = "abcd".IndexOf( "cd" ) // 見つかった場合はその位置、見つからなかった場合は-1が返る
4. 配列
配列変数の宣言

配列です。

// 配列の宣言
int[] array;
配列の生成

配列の生成です。配列の生成時には要素数を指定するか、初期データを指定します。

int[] array;

// 要素数を指定して配列を生成
array = new int[5];

// 初期データを指定して配列を生成
array = new int[] { 1, 2, 3 };

// 宣言と同時に配列を生成
int[] array2 = new int[5];
配列の要素の参照と代入

配列の要素の参照と代入です。

// 要素の参照
array[0]
array[1]

// 要素の代入
array[0] = 1;
array[1] = 2;
配列の要素数

配列の要素数を取得するには以下のようにします。

array_num = array.Length;
配列のコピー

配列の要素を別の配列コピーするには以下のようにします。

int[] from = new int[] { 1, 2, 3 };
int[] to = new int[5];

from.CopyTo(to, 0);
5. 制御文
if文

if文です。

if ( 条件 )
{

}
if ~ else文

if ~ else文です。

if ( 条件 )
{

}
else
{

}
if ~ else if 文

if ~ else if文です。

if ( 条件 )
{

}
else if ( 条件 )
{

}
while文

while文です。

int i = 0;
while ( i &lt; 5 )
{
    
    // 処理
    
    ++i;
}
for文

for文です。

for ( int i = 0; i &lt; 5; ++i )
{
    // 処理
}
for-each文

for-each文です。配列の各要素を処理できます

int[] fields = new int[] { 1, 2, 3 };

foreach (int field in fields)
{
    // 処理
}
6. メソッド

C#では関数メソッドと言いますメソッドを作るには次のようにします。戻り値を返却するにはreturn文を使います

static int sum( int num1, int num2 )
{
    int total;

    total = num1 + num2;

    return total;
}
9. ファイル入出力

ファイル入出力です。ファイル入出力を行うには、プログラムの先頭に以下を記述します。

using System.IO;

以下がファイル入力の雛形になりますファイルオープンや読み込みに失敗した場合catch節に処理が移ります

String filename = "text.txt";
StreamReader reader = null;
try
{
    reader = new StreamReader(filename);

    String line;
    while ((line = reader.ReadLine()) != null)
    {

    }

}
catch (IOException e)
{
    // エラー処理:

}
finally
{
    if (reader != null)
    {
        try
        {
            reader.Close();
        }
        catch (IOException e) { }
    }
}

またはC#ではusing ステートメントと言うものがあり、この様にも書ける

String filename = "text.txt";
using (StreamReader reader = new StreamReader(filename))
{
    try
    {

        String line;
        while ((line = reader.ReadLine()) != null)
        {
            // 読み込んだ行を処理
        }

    }
    catch (IOException e)
    {
        // エラー処理:

    }
}

usingをつかうとCloseがなくなったことからわかるようにusing(){}を抜けるとき自動的にDisposeメソッドを呼び出し、オブジェクトを廃棄する。その分コードスッキリするが、使いにくい場面もあるので考えて使うこと。

以下がファイル出力の雛形になりますファイルオープンや書き込みに失敗した場合catch節に処理が移ります

String filename = "text.txt";
StreamWriter writer = null;

try
{
    writer = new StreamWriter(filename));

    writer.WriteLine("abc");
    writer.WriteLine("def");
    writer.WriteLine("fgh");

}
catch (IOException e)
{
    // エラー処理:

}
finally
{
    if (writer != null)
    {
        writer.Close();
    }
}

こちらもusingを使って書ける。が、割愛する。

知っておいたほうがよい文法

C#でよく出てくる知っておいたほうがよい文法の一覧です。

繰り返し文の途中で抜ける

繰り返し文の途中で抜けるにはbreak文を使用します。

for ( i = 0; i &lt; 5; ++i ) {

    if ( 条件 ) {
        break;    // 条件を満たす場合、for文を抜ける。
    }

}
繰り返しの残り部分の処理をスキップする

残りの部分処理をスキップし、次の繰り返しに進むにはcontinue文を使用します。

for ( i = 0; i &lt; 5; ++i ) {

    if ( 条件 ) {
        continue;    // 条件を満たす場合、残りの部分処理をスキップし、次の繰り返しに進む。
    }

}
例外処理

例外を投げるにはthrow文を使用します。

throw new Exception( "Error messsage" );

例外処理をするにはtrycatch文を使用します。

try {

    // 例外が発生する可能性のある処理

} catch ( Exception e ) {

    // 例外発生時の処理

}

2012-06-15

http://anond.hatelabo.jp/20120614121920

ポインタ、参照(リファレンス)、束縛(バインディング)、それぞれ似てるけど同様に語ると混乱の元ではないかと。

 

ポインタメモリアドレスに型情報をくっつけたもの。加減算できる点が特徴で、それはメモリアドレス概念由来だろう。

変数というメモリ上の記憶域を指すフィジカルに近い概念で、配列運用(*p++で回すとか)、引数の参照渡し(コピー抑止、複数戻り値の実現)、メモリのもの管理malloc)あたりで、基本手作業による最適化のための仕組みという側面が近いと思う。

 

perlだと、変数はやっぱり記憶域ではあるけれど概念として一段抽象化されていて、メモリという連続した領域じゃなく独立した領域の集合となっているから、リファレンスの加減算はなし。

また、配列も単なるメモリの並びからより抽象化してリストもできたから、配列運用や複数戻り値リストがあるのでリファレンスに頼ることはなくなる。

ただ、オブジェクト概念があって、オブジェクトオブジェクトとして入れる変数は用意せずリファレンスとすることで、文法上の変数の型を増やさない、コピー時のコンストラクタの問題を回避するなどのほか、オブジェクト概念を援用して無名関数無名変数ファイルハンドルなども変数引数として扱えるようにした。

 

で、pythonはもう一段推し進めて、今までの数値や文字、配列オブジェクトとみなし、変数はすべてオブジェクトを指し示すもので、記憶域は変数としてあるのではなくオブジェクトとしてあり、変数リファレンスという特別なものがあるのではなくなり、変数記憶域をもっていて値が代入されるものではなく、既にあるオブジェクト変数名という名前(ラベル)を付けて束縛する行為とされる。

見方を変えると変数はすべてにおいてリファレンスで、代入とは値そのものの代入でなく値へのリファレンスの代入で、引数も参照渡しであるが、引数に代入したところでリファレンスが変わるだけで元の値が変わるわけではなく、しかし他の演算などでは自動的にデリファレンスされており、単純な数値や文字列など、自身を変更する機構を持たない(できない)ものにとっては実質的に今までとの違いはないに等しい。隠ぺいといえば隠ぺいか

java, javascript, rubyもおおむねこの考え方でよかったと思う。

ただ、phpは若干両者が混じったところがあって微妙なところがある。

 

参考

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