【基本情報頻出】平均命令実行時間からMIPSの値を求める

MIPSは1秒間に実行可能な命令数を百万単位で表したものです。平均命令実行時間が与えられて、そこからそのコンピュータのMIPSを計算する問題が頻出しています。 平均命令実行時間が与えられた場合、1秒を平均命令実行時間で割り、1秒あたり処理可能な命令数(MIPS)を算出します。

【例題】

平均命令実行時間が40ナノ秒のコンピュータのMIPSを算出しなさい。

続きを読む

ブログ収益化プロジェクト〜(プロジェクト名検討中)〜を発足した

少しずつですが毎日ブログを更新できるようになってきました。このブログを開設した目的は、確か技術スキル向上のためのアウトプット先の一つとしてでしたが、読者になってくれる人がいたり、はてなスターをつけてくれる人がいたり、だれかに読んでもらえることが嬉しくなり、最近では食べ物系の記事を上げることが多くなりました。苦なく書けるのもそっちです。(だから毎日続いてるんですが)

そこで、どこまでできるかわからないですが、ブログを収益化するための活動をやっていこうと思います。プロジェクト名は検討中です。プロジェクトの進捗は、このブログで報告していこうと思います。このブログは引き続き技術やWeb関連の記事を書いてきます。

プロジェクト発足にともない、なる早でやることです。

  • 食べ物系ジャンルの記事に絞って投稿する新ブログの作成をする

これは昨日対応しました。26歳OL@食べるというブログを作成しました。よかったら見に来てください。

  • 新ブログの記事を10記事作成する

現時点で1記事投稿しており、予約投稿は2つの状態です。

Googleアドセンスに登録するにははてなブログの無料版だと難しいので、有料化を行います。新ブログ(26歳OL@食べる)の記事が10記事上がり次第対応します。

はてなProを始める時に対応します。

いくつかやっておいたほうがいいことがあるようなので、申請前に対応します。

見に来てくれる人を増やしたいので、よく見るブログ村に登録します。

  • 自己紹介欄を豊かにする

  • 自分のアイコンを作る

  • 収益の目標、PV数、期間を明確にする

  • プロジェクト化に伴いプロジェクト管理ツールを使えるようにする

Backlogくらいしか思い浮かばないんですけど他にもツール探してみます。

今パッと思いつくやることはこのくらいです。今週末は忙しいので、8/20(月)くらいまでに上のやることは終えてようと思います。しっかりやってみて「やっぱり収益化は難しい」ってなるのもアリだし、少なくとも酒の肴にはなるし、ネットに漂う情報を眺めてばかりいるよりはいいかと思うのでがんばってみます。

特定の文字をWebページ上で安全に使用する

静的webページだろうと動的webページだろうと、ページ内で使用する場合に見たままの文字では意図通りの出力がされないもの(エンティティ文字)や、悪意のあるユーザの攻撃による被害を防ぐための処理(エスケープ処理)は、どんな言語だろうとどんなサーバを使っていようと対応する必要があるので、まとめておくことにしました。なお、フレームワークによっては、そのような設定を有効にすると勝手にやってくれるものもあるみたいです。安心ですね。

エンティティ文字を扱う時は記述方法に注意する

ブラウザがHTMLを解析してブラウザ上に表示する際に使用される記号は、Webページ内の例えば記事などに使用する場合に、単純に入力しただけでは表示が出なかったり意図しない挙動をすることがあります。それを回避するために、特定の文字は記事内でそのままの文字で書くのではなく、&から始まる文字参照を示す文字列を書く必要があります。やり方は、例えば半角大なり文字を二つ並べたい場合は、記事上で&lt;&lt;と記述すれば、<<のように表示されます。対象の文字は複数あるので、「この記号はHTMLで使われている記号だな」と思ったら、エンティティ文字かどうか調査して、もしそれなら文字参照で書くことが必要です。

エンティティ文字について PHPとJavaScriptでHTMLエンティティを扱う時のおさらい

特定の文字をエスケープ処理する

そもそもエスケープ処理を行わなければならない理由は、クロスサイトスクリプティング攻撃を防ぐためです。例えばページ内のフォームに入力した文字列がなんらかのイベントでページ内に埋め込まれる場合などに、エスケープ処理を行わず入力された内容がそのまま反映される場合に、文字列<や>、/などのエスケープ処理を行っていないと、<script></script>と言うJavaScriptを定義する記述がそのままJavaScriptとして読み込まれてしまい、Webページの管理者が意図しないJavaScriptが実行されてしまう可能性があります。それにより悪意のあるユーザにより、ページの内容を書き換えられたり、別のページに飛ばされてしまう等の被害が出ます。

クロスサイトスクリプティングの説明はWikipediaが詳しいです。

【初心者向け】HTMLを使ったエスケープ処理について詳しく解説! | CodeCampus

会員登録機能を設計する(誰でも自由に会員登録できるケース)

これといって作りたいものがないので、一般的なWebアプリケーションにあるあるな機能を考えて、頭の体操をしたいと思います。前回ログイン機能の設計をしたので、会員登録のための機能を設計です。

会員登録機能

ログイン機能が利用できるユーザを増やすために、会員機能を実装するのが目的です。そのため、会員脱退機能は今回は検討しません。

会員登録機能にもいくつか種類があり、

  • すでに会員であるユーザしか新規会員登録できないケース(業務アプリケーション系)
  • 会員のうち特別な権限をもつユーザしか新規会員登録できないケース(業務アプリケーション系)
  • 誰でも自由に会員登録できるケース(ECサイトWebサービス系)」

がパッと思いつきますが、今回は3番目のケースで作ろうと思います。

また、「よくある」ものを考えたいので、会員登録後は入力したメールアドレス宛に「会員登録完了」メールを送信しその時点では仮登録、メールに記載されたURLにアクセスされたら本登録が完了することにします。

本登録を終えたユーザは、ログイン機能を利用できることとします。

会員の状態管理

本登録が済んでいる状態なのか、仮登録の状態なのかを判別するため、DBのユーザマスタテーブルにUserStateカラムをもたせます。UserStateカラムには数値型で下記のようにデータを格納させます。なお、このように状態管理をするのがベストプラクティスなのかは不明です。一般にはどうやって扱われているのでしょうか。この状態のもたせ方なら、有料会員という概念が増えたら状態値を増やせばいいし柔軟に見えるんですけど。今度teratailで聞いてみます。

格納値 意味
0 脱退状態
1 仮登録状態
2 本登録状態

また、仮登録状態のデータを保持するのは無駄なので、毎日0時にバッチを走らせて「仮登録の状態で30分が経過したデータ」を削除したいと思います。

会員登録に必要な内容

ユーザには、会員登録に必要な情報を入力してもらいますが、必要な情報・フォームへの入力ルール等を下記とし、すべて必須項目とします。なお、今回は個人情報に関する取り扱いについての同意内容は検討しません。

項目 入力
ユーザID 半角英数4文字以上8文字以下
パスワード 半角英数4文字以上8文字以下、英数混合必須
ニックネーム 全角20文字以下
メールアドレス 半角50文字以下
メールアドレス(2回目) 半角50文字以下
個人情報に関する取り扱いについての同意/非同意 ラジオボタン

仮登録完了時に生成されるページ

仮登録完了後、入力したメールアドレス宛に本登録完了メールが送信されますが、そのページの生成方法は・・・調べたんですけどちょっと迷っているので今度書くことにします。書いたらリンク貼ります。今日はとりあえず参考にできそうなページへのリンクを貼って忘れないようにしたいと思います。

rails.takayukikoyama.com

hombre-nuevo.com

ユーザマスタテーブル

基本的な情報のテーブルがよくマスタって言われてますけど、なんでマスタなんですかね。それはおいておいて、ログイン機能の設計時に考えたユーザマスタテーブルのカラムに追加する必要があるカラムがあるので、あらためてユーザマスタは下記のようにします。

論理名 物理名
ID Id
ユーザID UserId
パスワード Hash
メールアドレス MailAddress
ユーザ名 UserName
ユーザの状態 UserState
備考 Remarks
削除フラグ IsDeleted
作成日時 CreatedAt
作成者 CreatedBy
更新日時 UpdatedAt
更新者 UpdatedBy

終わりです。執筆時間は1h30min程度でした。お疲れさまでした。

ログイン機能を設計する

技術系の記事を書くよりも食べ物の記事を書く方が楽なので逃げていましたが、Javaを忘れてしまいそうなので初心に戻ってログイン機能を作ろうと思います。

目次です。

ログイン機能

ユーザIDとパスワードをそれぞれフォームに入力し、送信ボタンを押下、ユーザIDがユーザ管理テーブルに存在し一意に定まったユーザIDにひもづくパスワード値が一致したらログイン成功としセッションを開始します。それ以外はログイン失敗としセッションは開始しません。ログインの失敗回数は気にしないことにします。

セッション管理

Webブラウザからのリクエスト、Webサーバからのレスポンスの通信により、ホームページが見れたりWebアプリケーションを利用することができます。このリクエスト、レスポンスと、それらの接続・切断の流れをまとめてセッションといいます。セッションにはユーザに依存する情報が乗ることが多いので、Webサーバから見たときにユーザを一意に識別することが必要です。そこで必要になるのがセッション管理です。今回実装する機能では、ログイン時にセッションを開始し、ログアウト時・ログイン後何かしらのサーバへのリクエストから15分経過しその間リクエストを出していない状態の時にセッションを閉じようと思います。

セッション管理の方法

JavaEEで使用できるセッションオブジェクトで管理する方法や、DBにセッション管理用のテーブルを用意して行う方法などがあります。今回は前者を使用しようと思います。

ユーザ管理

通常のWebアプリケーションで、会員登録やユーザ登録が必要な場合、ユーザの新規登録機能が必要ですが、今回はあくまでログインAPIの実装を目的していますので、用意したユーザ管理テーブルにはすでにユーザ情報が登録されていることが前提とします。

Webブラウザから送信されるパスワードの管理

WebブラウザからWebサーバ間の通信を盗聴されパスワードを盗まれてしまう可能性があるので、WebブラウザからWebサーバに送信するパスワード情報はSHA256で暗号化す流ことにします。

DB内でのパスワード情報の管理

ユーザ管理テーブルには、ユーザが指定した特定のパスワード情報が記録されますが、そのままのパスワードの文字列で記録すると、管理者にダダ漏れになってしまいますので、パスワード情報をDBに記録する場合はSHA256で暗号化し記録させることにします。

ユーザ管理テーブル

ユーザ管理テーブルの論理名と物理名はこうします。

論理名 物理名
ID Id
ユーザID UserId
パスワード Hash
備考 Remarks
削除フラグ IsDeleted
作成日時 CreatedAt
作成者 CreatedBy
更新日時 UpdatedAt
更新者 UpdatedBy

作ったらまた記事をあげたいと思います。あらためて考えるの楽しいですね。

【おすすめYoutube動画】第1000回を迎えたSUSURU TV.、埼玉のオランダ軒で長岡生姜醤油ラーメンをすする

SUSURU TV.はYoutubeのチャンネルです。一つの動画は平均して5分程度で、SUSURUという二十代男性がラーメンをすすりながらラーメンを紹介します。紹介の音声が後付けで実況風、テレビのグルメリポーターにも劣らないくらい上手にレポートします。現在のチャンネル登録者数は44万人と表示されていました。キャッチフレーズは「毎日ラーメン健康生活」、つまり毎日ラーメンを食べながら毎日動画をあげることを目的としています。動画の仕上がりにも丁寧さを感じています。(動画の編集の主担当は別のノビーという人のようです)

そのSUSURU TV.が第1000回を迎え、その動画を見ながらこの記事を書いています。1000日、毎日ラーメンを食べて、毎日動画を上げるってすごいですよね。わたしは一年くらい視聴を続けているのですが、回を増すごとに少しずつ丸くなっていく顔と悪くなっていく顔色にヒヤヒヤしていました。

記念すべき第1000回で紹介されているラーメン屋は、埼玉の東岩槻にあるオランダ軒です。食べログの点数は3.60です。動画ではしょうゆチャーシューメンとチャーシュー丼が食べられているのですが、お肉がとろっとろで厚く、生姜醤油味のラーメンに合いそうです。炙ってあるチャーシューが乗ったチャーシュー丼も美味しそう・・・。


1000日ラーメンをすすり続けた男が選ぶ一杯をすする オランダ軒【飯テロ】SUSURU TV.第1000回

下は食べログへのリンクです。写真を見ると、昔ながらのラーメンに見えます。色が結構濃いですね。

https://tabelog.com/saitama/A1101/A110103/11043376/tabelog.com

ラーメンデータベース(ラーメンに特化した食べログのようなwebサイト)へのリンクです。

ramendb.supleks.jp

長岡生姜醤油ラーメンがどんなものかわからないのですが、東京だと秋葉原にある青島食堂というお店が人気のようです。こちらも、食べログの点数は3.60です。

https://tabelog.com/tokyo/A1310/A131001/13094776/tabelog.com

同じく東京の代々木駅から徒歩4分の我武者羅も人気のようです。食べログの点数は3.62です。

https://tabelog.com/tokyo/A1304/A130403/13212237/tabelog.com

いろんなラーメンを食べてきたYoutuberが勧め、記念すべき回で紹介されているラーメンがどのくらい美味しいのか気になります。なお、ここまで書いたところあれなんですが、第1000回で毎日ラーメン健康生活は終わりだそうです。お疲れ様でした。

追記

1001回目の動画が公開されました。引退宣言は、何十回かに一回やっている恒例の「山ちゃんはやめへんで」ケースでした。引退はしないようです。


【こってり禁止】ハワイの天一で洗礼を受ける!をすする 天下一品ホノルル店【飯テロ】SUSURU TV.第1001回

基本情報レベルの小テストを作りました:ハードウェア編1

ハードウェア編1

 次のカッコ内に単語を埋めてください。「続きを読む」を押すと回答が見れます。印刷して使用する分にはご自由にどうぞ。コピペによるWeb上での転載はご遠慮ください。 

【1】コンピュータの5大装置は(  )装置、(  )装置、(  )装置、(  )装置、(  )装置です。

【2】中央処理装置は、(   )とも呼ばれます。(  )装置と(  )装置を合わせてこう呼ばれます。

【3】CPUで実行する命令を解読する装置を(    )といいます。

【4】レジスタは、(  )装置です。データや命令を格納します。

【5】実行する命令が格納されている主記憶装置のアドレスを保持するレジスタのことを(         )といいます。命令アドレスレジスタとも呼ばれます。

【6】主記憶装置から取得した命令を格納するレジスタを(      )といいます。

【7】操作の対象となるアドレスを格納するレジスタを(           )といいます。

【8】演算に使用するデータを格納するレジスタを(      )といいます。

【9】命令実行は、命令を(  )し、命令を(  )し、(      )を計算し、データを取り出し、命令を(  )し、結果を(  )するという流れで行われます。

【10】(  )アドレスは、処理対象のデータが格納されているアドレスの番地のことです。

【11】プログラムカウンタから命令を取り出すことを(      )といいます。

【12】命令は(  )部と(     )部で構成されています。

続きを読む