modest violet

modest violet

開発者としてのあれこれや、日々の雑記など

your future hasn't written yet. no one's has.
by Emmett Lathrop "Doc" Brown

好きな言葉「1 pixel line makes all the difference // 1ピクセルの線がすべてを変える」

f:id:shin21sk:20170125001147p:plain

私は、普段自分の好きな言葉を目の届くところに置いていたり、書いていたりします。

それは自分を鼓舞するためでもあり、戒めるためでもあり・・・。

そんな言葉が結構溜まってきたので、少しずつ書いていこうと思います。

今日は、「1 pixel line makes all the difference // 1ピクセルの線がすべてを変える」です。

そもそもの出典は不明ですが、数年ほど前に下記のサイトで見かけて、一発で気に入りました。

www.webcreatorbox.com

ピクセルとは

ピクセル(英: pixel)、または画素とは、コンピュータで画像を扱うときの、色情報(色調や階調)を持つ最小単位、最小要素。しばしばピクセルと同一の言葉として使われるドットとは、後者が単なる物理的な点情報であることで区別される。例えばディスプレイにおいて320×240ピクセルの画像を100%表示すれば320×240ドットとなるが、200%表示ならば640×480ドットとなる。

出典:Wikipedia

ここで言うと「ドット」の事ですね。ドットの線の事です。たった1ピクセルの横線や縦線で、ガラリと雰囲気が変わるのです。

魅せられた理由

大体の人に、1ピクセル単位であーだこーだ言うと、「細かい所にこだわって・・・」という顔をされます。

いやいやいや、大事ですよ!?

ピクセルの線を引くか引かないかで、印象というのは結構変わってきます。

微に入り細を穿つと言いますが、「普段から細かい箇所を注視しておく事により、大きなミスを防ぐことが出来る」訳です。

そんな精神を端的に表す言葉として、また職人っぽい響きも相重なって、この言葉に魅せられているわけです。

とことんこだわる

何でもそうですが、こだわりを持つことは大切です。

言われたままの仕事をして、何が楽しいのか私には分かりません。必ず自分のオリジナリティーを付け足す工夫をしています。

もちろん、そういったオリジナリティーを追加する事が出来る職種というのは限られているわけで、全てこの通りには行かないとは思います。

でも、スーパーで品出しをする際にも「こだわり」を持つことは可能ですし、工場で物を作る際も自分なりのこだわりを持つことも出来ると思います。

こだわって、こだわって、こだわる事が自分を高めていける術だと思うんですね。

こだわるためには、どうするか。

そう、「これでもか、これでもか」と飽くなき探究心と共に、細かい箇所を突き詰めていく訳です。

1ピクセルの線がすべてを変える

大げさな言葉かもしれません。でも、「小さな事からコツコツと」の精神なんです。

小さなことでも、全体として見たときに思いもよらないインパクトを与える。

そんな色々なエッセンスが詰まったこの言葉。

今日も私を勇気づけてくれます。

【雑記】何故日本ではAppleのCarPlayが普及しないのか

www.apple.com

Appleの「Car Play」がいまいち普及しないなーと。

2014年の3月に発表以来、もうじき3年近くたとうとしています。

日本人のiPhone所有率は約7割で圧倒的、アメリカよりもシェア率は良いわけです。

なのに、そのiPhoneを手軽に車とペアリングできるCar Playがいつまで経っても普及しない。

というか、メーカーから対応されない。

2017.01 時点の対応メーカー

www.apple.com

一部車種のみとか何故に!と言いたい。

そもそも車のナビって高すぎない?

画面も小さいし、TV機能やナビが付いていても20万オーバーって今の時代には高すぎる気がするんですよね。

何らかの圧力でもかかっているのか・・・。

とにかくCarPlayが普及して欲しい。

とめどない、雑記でした。

iOS 10.2 のバッテリーの減り方は尋常ではない

f:id:shin21sk:20170122000625p:plain

前々から気にはなっていたのですが、そのうち直るだろうと放置していたのです。

ただ、やはり我慢が出来なくなってきました。

iPhoneのバッテリーが1日持たない!!

ただでさえ、バッテリー持ちが悪いのに、iOS 10.2にアップデートしてからは顕著。

先程も、

「残り 20% です」

という表示が出て、画面ロックを解除し、ホーム画面へ

その時点で残量が「19%」に減り、

Safariを開いた瞬間に

「14%」に減り、

Safariを閉じると

「残り 10% です」と表示されました!

対処方法は?

色々と調べた結果、細々と対応方法を記載しているページもありました。

ただ、それは総当たり的な方法で、どれか一つでも当たればラッキー的な恒久的な解決方法ではなさそうでしたのでスルー。

やはり、ダウングレードを試みるか、改修バージョンが出来るのを待つほうが賢明なようです。

やはり今後に期待する事は

ガラケー時代は2、3日は充電しなくても使えていたので、スマホもそういう風になればいいんですけど。。。

カメラの性能や防水、おサイフケータイもいいですけど、「携帯」なんだからバッテリーの良さを最優先でなんとかして欲しいですね。

iPhone7では電源が切れるとおサイフケータイが使えないという問題もあるようなので、おサイフケータイや電話といった待機系の電源を別に内蔵するとかとか。

【ASP.NET MVC】【Azure】デプロイ後に「The system cannot find the file specified」エラーが表示される

f:id:shin21sk:20170119202327p:plain

Azureへデプロイ後、やたらと「The system cannot find the file specified」エラーが頻出して少々困ったのでメモ書きです。
原因が判ればたいした話では無かったんですが・・・。

環境

ASP.NET MVC5 + Azure Web Apps + Azure SQL Server + Entity Framework

エラーメッセージ

The system cannot find the file specified

原因

Entity Framework を利用すると、自動的にLocalDbが作成され、LocalDbに対してのDbContext設定が作成されます。

今回、このContextとは全く別のContextを使用していたので、デフォルトの自動生成されたContextは全く気にもしていませんでした。

ただ、この設定がAzureデプロイ後に「そんな接続先ないやんけ、コラァッ!」と怒っていたようです。

「誤った」対処法

Models > IdentityModels > ApplicationDbContext

こちらにおそらくDefaultConnection の指定があります。

public class ApplicationDbContext : IdentityDbContext<ApplicationUser>
{
    public ApplicationDbContext()
        : base("DefaultConnection") // ここの設定を替える
    {
    }
    // 略
}

上記の箇所を普段使いのDbContextに置き換えると、確かに「The system cannot find the file specified」は出力されなくなりました。

ただ替わりに、下記のエラーが発生します。


'/' アプリケーションでサーバー エラーが発生しました。
エンティティ型 ApplicationUser は、現在のコンテキストのモデルに含まれていません。


英語エラー

The entity type ApplicationUser is not part of the model for the current context

スタックトレース

   at System.Data.Entity.Internal.InternalContext.UpdateEntitySetMappingsForType(Type entityType)
   at System.Data.Entity.Internal.InternalContext.GetEntitySetAndBaseTypeForType(Type entityType)
   at System.Data.Entity.Internal.Linq.InternalSet`1.Initialize()
   at System.Data.Entity.Internal.Linq.InternalSet`1.get_InternalContext()
   at System.Data.Entity.Internal.Linq.InternalSet`1.FindAsync(CancellationToken cancellationToken, Object[] keyValues)
   at System.Data.Entity.DbSet`1.FindAsync(CancellationToken cancellationToken, Object[] keyValues)
   at System.Data.Entity.DbSet`1.FindAsync(Object[] keyValues)
   at Microsoft.AspNet.Identity.EntityFramework.UserStore`6.<GetUserAggregateAsync>d__6c.MoveNext()
--- End of stack trace from previous location where exception was thrown ---
   at System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(Task task)
   at System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task)
   at Microsoft.AspNet.Identity.TaskExtensions.CultureAwaiter`1.GetResult()
   at Microsoft.AspNet.Identity.Owin.SecurityStampValidator.<>c__DisplayClass2`3.<<OnValidateIdentity>b__1>d__4.MoveNext()
--- End of stack trace from previous location where exception was thrown ---
   at System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(Task task)
   at System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task)
   at Microsoft.Owin.Security.Cookies.CookieAuthenticationHandler.<AuthenticateCoreAsync>d__2.MoveNext()
--- End of stack trace from previous location where exception was thrown ---
   at System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(Task task)
   at System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task)
   at Microsoft.Owin.Security.Infrastructure.AuthenticationHandler.<BaseInitializeAsync>d__0.MoveNext()
--- End of stack trace from previous location where exception was thrown ---
   at System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(Task task)
   at System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task)
   at Microsoft.Owin.Security.Infrastructure.AuthenticationMiddleware`1.<Invoke>d__0.MoveNext()
--- End of stack trace from previous location where exception was thrown ---
   at System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(Task task)
   at System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task)
   at Microsoft.AspNet.Identity.Owin.IdentityFactoryMiddleware`2.<Invoke>d__0.MoveNext()
--- End of stack trace from previous location where exception was thrown ---
   at System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(Task task)
   at System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task)
   at Microsoft.AspNet.Identity.Owin.IdentityFactoryMiddleware`2.<Invoke>d__0.MoveNext()
--- End of stack trace from previous location where exception was thrown ---
   at System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(Task task)
   at System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task)
   at Microsoft.AspNet.Identity.Owin.IdentityFactoryMiddleware`2.<Invoke>d__0.MoveNext()
--- End of stack trace from previous location where exception was thrown ---
   at System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(Task task)
   at System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task)
   at Microsoft.Owin.Host.SystemWeb.IntegratedPipeline.IntegratedPipelineContextStage.<RunApp>d__5.MoveNext()
--- End of stack trace from previous location where exception was thrown ---
   at System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(Task task)
   at System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task)
   at Microsoft.Owin.Host.SystemWeb.IntegratedPipeline.IntegratedPipelineContext.<DoFinalWork>d__2.MoveNext()
--- End of stack trace from previous location where exception was thrown ---
   at Microsoft.Owin.Host.SystemWeb.IntegratedPipeline.StageAsyncResult.End(IAsyncResult ar)
   at System.Web.HttpApplication.AsyncEventExecutionStep.System.Web.HttpApplication.IExecutionStep.Execute()
   at System.Web.HttpApplication.ExecuteStep(IExecutionStep step, Boolean& completedSynchronously)


「正しい」対処法

web.config 内の「DefaultConnection」パスを、LocalDbから本番サーバーの設定に変更する。

但し、EntityFrameworkの記述ではなく、従来通りのConnectionStringの記載方法で書く。

今の音楽にはニオイがない

https://www.amazon.co.jp/b/ref=sv_dmusic_0?ie=UTF8&node=3589137051www.amazon.co.jp

Amazon Prime ミュージックがヤバい。プライム会員になれば、膨大な数の音楽が聴き放題なんです。

今の時代の子供達が羨ましいと思う反面、少し物悲しさも覚えました。

学生時代の音楽は一生モノ

f:id:shin21sk:20170121012308p:plain

流行りの曲というものがあります。学生時代に聴いていた曲というのは、何歳になっても「昔を思い出すタイムマシン」の役割を果たしてくれます。思春期に聴いた曲ってなかなか忘れないものです。

もちろん、プライムやLINEミュージックで一生モノの曲に出会う事もあります。何万曲もある曲の中から出会えた奇跡という楽しみ方もあるかもしれませんね。

音楽のニオイ

学生時代は一部の人を除き、お金を自由に使える訳ではありません。そんなお小遣いをやりくりする中で、三千円近くするアルバムCDはなかなかの出費なわけです。

今みたいにアルバムの中の好きな曲を1曲だけ買うという選択は出来ません。

そして、買ったCDの封を開け、CDディスクをトレイに載せ、再生されるまでの数秒間の気持ちの高揚感。

新しいCDには紙ジャケットのニオイがあります。

ダウンロード音楽に慣れきったこの頃、ふと思い出し懐かしくなります。

ジャケットや歌詞カードを目で触れ、新しい紙ジャケットやCDのニオイ、ケースに触れ、耳で音楽を聴く。

音楽を聞くということは、五感のうち、4つを使っていたハズなのに。

今は「聴く」という感覚しか使っていない事に気づきました。

とはいえ、便利な世の中

ダウンロード一つで好きな曲をいつでも、どこでも楽しめるというのは素晴らしいことだと思います。

ただ、数が多すぎる・・・。先程もプライムで何か聴きたい曲がないか探していましたが、数が多すぎて1曲毎にじっくり吟味する事が出来ませんでした。

手軽さは良いことです。私も最近はほとんどiTunesで購入します。

便利になることで、音楽が無味無乾燥な代物になりつつあるのかな、と。

そう思った時、今の時代の子達は便利な反面、楽しみを1つ失っているなー、と思うのです。

さらにもう1つ前のレコード世代は、CDでも寂しさを感じる傾向にあるようです。
やはり、あのでかくて管理が大変で面倒なレコードですが、独特のにおいがあります。

1枚のアルバムを愛おしく何回も何回も、そして傷がいかないように丁寧に大切に聴く。

そういったCDへの敬意というのを、忘れずにいきたいものだと、溢れかえるプライムミュージックの曲たちを眺めながら思い直したのでした。