かまてく ブログ

今日の努力は、明日の経験! - Kamakura Shinsho Engineer Blog

悪貨は良貨を駆逐する

ファイルシステムの話

古いMacOSでは、ファイルシステムに大きな特徴がありました。

その1つが、データフォークとリソースフォークというものです。 一般的なファイルはデータフォークにその内容が格納されるようになっていました。 では、リソースフォークとはその名の通りリソースを格納するようになっています。 その方法が特徴的で、リソースはリソースタイプとリソースIDで管理されています。 リソースタイプはAppleによって管理されているユニークな4バイトの文字列です。 たとえば'JPEG','MENU','ICON','TEXT'などです。 このリソースフォークはAppleが提供するResEditというプログラムで編集するのが一般的でした。 ローカライズする場合などは、このリソースを編集することで簡単に対応できました。 プログラマーである必要はありませんでした。

同時期のWindows(MS-DOS)やUnix系のプログラムの場合は、 文字列をハードコーディングしていたり、 文字コードがASCIIのみの対応だったりしていたので、 ローカライズの作業はとても大掛かりだったのを記憶しています。

また、ファイルのMETA情報をFinder情報として別に管理しています。 これには、該当するファイルがアイコンんで表示される位置情報などや その他のOSでは、拡張子で管理されている、ファイルの種別情報(ファイルタイプ)やファイルのhidden 属性なども含まれていました。

当時、MS-DOSの8+3問題に嫌気がさしていたのもあり、 ファイルシステムとしては、MacOSの方法が非常に秀逸であると感じていました。 いずれ、windowsでもこういう風になる・・・・と考えていました。

残念ながら、表題の結果に終わっています。

Human Interface Guideline

Appleの技術資料にInsideMacintoshというものがありました。 PDFはこちらで参照できます。 http://interface.free.fr/Archives/Apple_HIGuidelines.pdf

最新のものはこちら developer.apple.com

その中でも「Human Interface Guideline」は全ての技術者が一読しておいた方が良いと思えるものです。 1980年代から発行されています。 windows(MS-DOS)の世界ではプロ・アマ問わず、自分たちの思う通りにプログラムを作成していた時代に デザイン原則、インターフェース原則を突きつけた内容になっています。 例えば、 メニューに「ファイル」「編集」メニューを左から並べる。 オープンのショートカットキーはコマンド+o、コピーはコマンド+c ダイアログ、アラートの使い方、 ローカライズの方法。。。。 などなど、です。

現在のMacOSでもその考え方は受け継がれています。 iPhoneなど向けには、 developer.apple.com

こちらが、駆逐されないことを祈っています。

テストコードを書くメリット/デメリットを再考する

きっかけ

社内でテストコード書きましょ的な気運が高まってるけど、そもそもなんでやるか理解しきれてない感があった。

なのでテストコードを書くメリット/デメリットを考えてみる。

メリット(想像)

  • ①品質上がる
  • ②テストしなくて済む?もしくはテスト工数が減る

デメリット(想像)

  • ①時間かかりそう
  • ②めんどくさそう(時間かかりそう

以下は実際にテストを書いた感想

Laravel×DDDで実装する機会があったのでついでにテストを書いた

メリット(実体験)

  • ①品質上がる
  • ②テストしなくて済む?もしくはテスト工数が減る

①⇒◎:バグは確実に減る。テストコードが溜まっていけば依存関係への影響もわかるようになる。

②⇒△:テスト完全自動化はやっぱ難しい、実際に動かしてみないと不安は消えない。 ただ、テストコードでカバーできる部分は多いので確認が必要な箇所は減る。

+α:テストを書いている最中にバグだったり考慮漏れに気づくことが結構ある。 あとそもそも結合度高すぎてユニット書きづらすぎ!ってパターンもあって実装の見直しの結果ソースがキレイになる。

デメリット(実体験)

  • ①時間かかりそう
  • ②めんどくさそう(時間かかりそう

①、②⇒○:やっぱめんどくさいっす。慣れてないと2倍くらい実装コストが増えそう。

まとめ

テスト書いた方がよさげ

テスト書くのはめんどくさいしコストは増すけどそれは短期的に見たとき。

長期的に見れば毎回手で行っている検証作業が一部自動化されるようなものなので、増えた分のコストは取り返せそう。 +αで品質は良くなるので割といいことづくし。

cssの遅延読み込み

今回ページリニューアルで速度改善の一貫としてcssの遅延読み込みを導入してみました。 cssの遅延読み込み方法はいくつかありますので、いくつかご紹介させていただきます。

『 rel="preload"』を使って非同期に読み込ませる方法

タグの rel という属性に preload という値を指定することによって、href属性で指定したファイルを先読みさせることができます。

ファイルが読み込み終わった時点で(onload属性値に記述したJavaScriptが実行されるので、そこでrel属性値が「stylesheet」に変わり)CSSとして読み込まれる。

PreloadでCSSを取得して、読み込みが終わったらstylesheetを適用させるみたいな感じになる。Preloadはレンダリングをブロックしないので、非同期にCSSを読み込みつつ、読み込み終わったら適用させるみたいなことができる。シンプルで導入しやすい。

平均寿命のこと

平均寿命って?

平均寿命と言う言葉を耳にすることがあります。 平成30年度(厚生省の発表)では、男性が81.25 才、女性が87.32才となっています。 ここから、例えば 自分は40歳だからおよそ41年(男性の場合)生きられるというような話をしたりします。

しかし、これは間違いです。 所謂、平均寿命とは0歳児平均余命のことをさしています。 頭に?が浮かんだ人もいるのではないでしょうか。 つまり、その年に生まれた人達がおよそ生きられるであろう年数を示しています。 また、平均余命とは、 「ある年齢の人があと何年生きることができるのか」であり、 死亡年齢の平均値ではありません。 これから、何年生きられるかの期待値になっています。 *1

0才の平均余命があるということは、当然その他の年齢の平均余命も計算されています。 例えば、40才の平均余命は42.20年(平成30年男性)となっており、 40(才) + 42.20(年) = 82.20 で0才より1年長くなっています。 40才まで生きた人の残りの時間を計算しているので、長くなるのは当然です。 *2

続きを読む

【Laravel】route web.php 分ける

URLがいくつもあってroutes/web.phpが膨れてきました。

ひたすら書き続けて何千行にもするのは読みにくい。

ファイルを分けれたらいいなぁ…。

ルーティング用ファイル複製

今回は試しに管理画面用のファイルを用意

  • 通常ページ routes/web.php
  • 管理画面ページ routes/webAdmin.php

プロバイダに管理画面用ルーティングファイルの記述を追加

app/Providers/RouteServiceProvider.php に以下を追加

    protected function mapWebAdminRoutes()
    {
        Route::middleware('web')
             ->namespace($this->namespace)
             ->group(base_path('routes/webAdmin.php'));

    }

同じくapp/Providers/RouteServiceProvider.php のpublic function map()に以下を追加

$this->mapWebAdminRoutes();

おまけ

ひたすら404になったときにやったこと

$ php artisan route:list

でrouteの一覧が出ない。controllerやrepositoryをとりあえず仮で作った。

route:listで表示されるのも404なんだが!!!

try_files $uri $uri/ /index.php$is_args$args;

追記してnginxを再起動したら動いた。そっちかい。

Amazon SES(Simple Email Service)で始めるメールサーバー 激闘! メール受信編

有明は楽しかったですね、土屋です。

この記事書いてるときにEC2の障害起きてもう嫌になりました。

SESでメール受信

SESでは、現在のところ、POP3IMAPなどを利用したメールクライアントでの受信はできないようです。 その代わり、S3への保存やLambdaの起動などができます。 まあLambdaに飛ばせればええやろ的なところがあるんでしょうね!!!

続きを読む

鎌倉新書では正社員を積極採用しています!

(WEBデザイナー)デザインからコンセプト設計まで■賞与実績4ヶ月分■

仕事内容 【仕事内容】 ■ポータルサイト(お墓・葬儀・仏壇)のWebサイト構築のためのWebデザインの設計からコーディング業務まで担って頂きます。 特に事業側のコンセプトを理解しながら、LPやサイトのデザイン設計を提案できる方を求めています。 【提供できる価値・経験】 ■細かく数字を見て、サービスをグロースさせていく経験 1週間単位でスプリントを組んで、数多くの機能をリリースさせていく開発プロセスを導入しています。 数多くのトライ&エラーを行い、きっちり効果を分析していくことで、サービスを着実に成長させるプロセスが身につきます。 また、事業側のWebディレクターとも密にコミュニケーションを取りながら、事業会社ならではの一体感を持ったクリエイティブワークを実践しています。 ■今後大きく成長するマーケットにおけるサービス開発に携わることができる経験 世界一の高齢化社会である日本においてライフエンディング業界は大きなポテンシャルを持っています。 その業界に必要なサービスを提供することで、大きなユーザーの需要を満たすサービスを提供するやりがいと経験を得ることができます。 また、今の日本社会で必要とされているサービスを提供しているという社会貢献も大きなやりがいとして持つことができます。 【デザインの特徴】 ■企画構想段階から関わり、ユーザー視点に立ったUIの設計、ビジュアルデザイン ■色彩学、構成学、視覚生理学などの知識を生かしたデザイン ■プロジェクトの成功に貢献するデザイン(目的を本質的に達成するデザイン) ■問題点や課題、目的をしっかり理解し、解決するデザイン 応募資格 【必須(MUST)】 ■Webサービスのデザイン・コーディング経験 ■WebサービスやスマートフォンアプリのUI・情報設計の経験 ■Photoshop、Illustratorなどの画像処理ソフトを使用したビジュアルデザイン業務 【歓迎(WANT)】 ■情報の可視化 ■部分遷移、画面遷移を含むプロトタイプ構築経験 ■デザインコンセプトの言語化 ■ユーザー体験の設計業務 ■デザインのトーン&マナー設計 ■プロダクト改善経験 ▼求める人物像 ・自発的に施策を立案・実行できるマインドを持つ方 ・成長環境の中で自分を試してみたい方 ・数字の分析に強い方 ・コミュニケーション能力 ・課題発見力、解決力 続きを見る