Javaでハッシュテーブルを実装する

基本情報技術者試験に向けてアルゴリズムを勉強しています。今回はハッシュテーブルについてまとめます。 ハッシュテーブルとは ハッシュテーブルはキーと値の組を記録したテーブル(表)です。以下のような表を想像してください。 Index キー 値 0 1 456 def 2 3 123 abc 4 789 ghi ハッシュテーブルはキーに対する値の格納位置(Index)を工夫することにより、高速に検索が行えるようになっています。キー「123」であれば、Index3にあるとすぐに判断でき、値の取得が行えます。ハッシュテーブルは検索を高速化したい場合に用いられます。 上記の例ではIndex1にキー456、値defが、

Javaでキューを実装する

基本情報技術者試験に向けてアルゴリズムを勉強しています。今回はJavaでキューを実装してみます。 キューとは キューでは最初に格納した要素が最初に取り出されます。このような仕組みをFIFO(First In First Out、先入れ先出し)と言います。 キューにデータを格納することをエンキュー(enqueue)と言います。エンキューしたデータは列の一番後ろに追加されます。 キューからデータを取り出すことをデキュー(dequeue)と言います。データを取り出す際には先頭から取り出されます。 実装する 今回はjava.utilパッケージのArrayDequeクラスを参考にして実装します。 まずは、キューのデータ構造を作ります。以下の内容を記述したQueueクラスを作成しましょう。 public class Queue { private Object[] data; private int

Javaでスタックを実装する

基本情報技術者試験に向けて、アルゴリズムを勉強しています。今回はスタックとキューをJavaで実装してみました。 スタックとは スタックでは最後に格納した要素が最初に取り出されます。このような仕組みをLIFO(Last In First Out、後入れ先出し)と言います。 まずは以下の用語について確認してください。 プッシュ(push):スタックにデータを積むこと ポップ(pop):スタックからデータを取り出すこと スタックにプッシュが行われることにより、データが積まれていきます。その際、「ひとつ前にプッシュしたデータ」は「今プッシュしたデータ」の下に置かれます。 スタックからポップを行うと、スタックの一番上にあるデータが取り出されます。一番上にあるデータ以外は取り出せません。 実装する 今回はjava.utilパッケージのStackクラスを参考にして実装します。 まずは、

Javaで標準入力

AtCoderの問題をJavaで解いてみようとしたところ、標準入力の使い方が分からなかったので調べました。 標準入力 Javaでは入力を受け取る際にはScannerにSystem.inを渡して使います。また、受け取るデータの型によっていくつかのメソッドを使い分けます。 単語の場合はnext() 整数の場合はnextInt() 文字列(1行)の場合はnextLine() 使用例1 以下は、標準入力から2つの数を与え、2つの数の積(掛け算)した結果が偶数(Even)か奇数(Odd)かを判定するプログラムです。 ABC086 A. Product public class ABC086_A_Product { public static void

Javaでリストを実装する

基本情報記述者試験に向けて、Javaで基本的なアルゴリズムを再勉強しています。この記事ではリストを実装していきながらデータ構造とアルゴリズムについてまとめます。 連結リスト Javaのリストといえば、ArrayListが有名ですが、今回はリストとしてのシンプルな機能を持つLinkedListクラスを参考にして実装してみます。 連結リストは、ノード(オブジェクト)を連結させることでリストとしての機能を提供します。 ノードは以下の2つのフィールドを持ちます。 データフィールド:データそのものを持ちます。 リンクフィールド:次のノードへの参照を持ちます。 また、リストの先頭にノードを追加するためには、ノードの先頭を管理するためのフィールドが必要です。 実際にコードを書くと以下のようになります。 class SNode { Object data; SNode next; } public class SLinkedList { private SNode first; public

Ghostを1.21から2.16へアップデートする

当ブログではブログシステムにGhostを使用しています。今回はghost1.21から2.16.4へアップデートしてみました。OSはUbuntuです。 アップデート前の準備として、記事のバックアップは取っておきましょう。 アップデート 初めに、Nodeをアップデートします。apt-getを使用します。 # パッケージ取得 $apt-get update # アップデート適用 $apt-get upgrade 続いて、ghost-cliのバージョンが古いとアップデートできないので、ghost-cliをアップデートします。 $npm update -g ghost-cli@latest ghost-cliがyarnを使うようになったので、yarnをインストールします。 $curl -sS https://dl.yarnpkg.

LANの仕組み

ネットワークのLANについて勉強したのでメモしておきます。画像を作るのが面倒だったので参考にさせていただいた各サイト様から引用させていただきました。 LANとWAN ネットワークは大きくLANとWANの2つに大別されています。 LAN Local Area Network(ローカル・エリア・ネットワーク)とは、広くても一施設内程度の規模で用いられるコンピュータネットワークのことです。その頭文字をつづったLANと書かれる場合も多く、一般家庭、企業のオフィスや研究所、工場等で広く使用されています。LANでは、イーサネットという技術規格によって通信を実現しています。 WAN Wide Area Network(ワイド・エリア・ネットワーク)は、LANと比較して広い範囲(市街地を越え郊外、県外や国際の範囲)におよぶネットワークのことです。広義には、非常に広大な面的広がりを持つインターネットとほぼ同義の言葉として使われます。

Javaの例外処理におけるthrowとthrowsの違い

例外処理はあまり触る機会が無く、throwとthrowsの違いを知らなかったのでメモしておきます。 throw throwは一番単純な例外処理の方法です。以下の例を見てください。 package jp.doghouse.java.test; class SampleException extends Exception { } public class ThrowSample { public static void main(String[] args) { ThrowsA a = new ThrowsA(); try { SampleException e = new SampleException(); throw

WANの仕組み

ネットワークのWANについて勉強したのでメモしておきます。画像を作るのが面倒だったので参考にさせていただいた各サイト様から引用させていただきました。 LANとWAN ネットワークは大きくLANとWANの2つに大別されています。 LAN Local Area Network(ローカル・エリア・ネットワーク)とは、広くても一施設内程度の規模で用いられるコンピュータネットワークのことです。その頭文字をつづったLANと書かれる場合も多く、一般家庭、企業のオフィスや研究所、工場等で広く使用されています。 WAN Wide Area Network(ワイド・エリア・ネットワーク)は、LANと比較して広い範囲(市街地を越え郊外、県外や国際の範囲)におよぶネットワークのことです。広義には、非常に広大な面的広がりを持つインターネットとほぼ同義の言葉として使われます。一方、狭義には、

Photoshopのフィルター機能について

Photoshopのフィルター機能についての自分用メモです。 フィルター機能とは フィルターとは画像の変形や色調の変化などいろいろな特殊効果を加えることができる機能です。メニューバーの「フィルター」から各種フィルターを選択することで使用することができます。よく使うフィルターとしては「ぼかし」や「シャープ」などがあります。 また、選択範囲を作ることで、その範囲にのみフィルターを適用することもできます。 ぼかし系 ぼかし系のフィルターでは、画像にぼかしをかけてぼやけた感じにすることができます。「ぼかし(ガウス)」と「ぼかし(放射状)」の使用頻度が高いので、今回はこの2つについて説明します。上記とは別に「ぼかし」というフィルターもあるのですが、こちらはぼかしに強弱を付けることができないため、非常に限られた用途でのみ使用されます。このぼかしは、画像をJPEGで保存するときに、データサイズを小さくできる効果と、画像のノイズを除去してくれる2つの効果があります。

Photoshopによる写真の色調補正

Photoshopの写真の明るさやコントラストを変えたり、写真の色味を整える機能についての自分用メモです。 ※本記事の一部の画像はアドビ システムズ 株式会社のhelpページから引用させていただきました。 色調補正を行う意味 例えば、時間帯や天候、照明などのさまざまな条件により、思い描いていたような写真が撮影できないことがあります。 あるいは、1枚のポスターに複数の写真を貼り付けて作成する際に、それぞれの写真の明るさや色合いがバラバラだった場合、統一感のないポスターに仕上がってしまいます。 色調補正を行うことで、写真の明るさや色合いを整えて、思い通りの仕上がりにすることができます。 色の仕組み 色は「色相」「彩度」「明度」の3つの要素から作られています。これらの要素を知っておくことで色調補正で頻出する言葉の意味が分かるようになります。 色の三要素 説明 色相 色合いを指します。赤、青、緑といった私たちがイメージする「色」に最も近い要素です。

Photoshopによる写真の修正と修復

Photoshopの人物写真をより綺麗に見せるためにシミやホクロを消したり、風景写真に写り込んだ人や電線などを最初から何も無かったかのように綺麗に消して周囲の色と馴染ませるなどの修正を行うことができるツールについての自分用メモです。 基本的な修正と修復ツールの使い方 修正や修復をするための基本的なツールの使い方を表にまとめました。 ツール名(操作名) 説明(利用場面) 操作方法 コピースタンプツール ・画像の一部分をサンプルポイントとしてコピーし、他の箇所へペーストして適用することができる。・人物写真からシミやホクロを消したいときや、風景写真から電線などを消したいとき。 ・Altキーを押しながらクリックするとサンプルポイントをコピーする。・ドラッグ(クリック)するとサンプルポイントをペーストする。・「調整あり」のチェックボックスをオンにするとサンプルポイントとドラッグ箇所との距離関係が常に一定を保つ。・コピーソースパネルを使うとサンプルポイントを最大5つまで保存することができる。 パターンスタンプツール ・パターンとして登録した画像をスタンプのように貼り付けて描画することができる。・オブジェクトや背景に一定の模様の繰り返し(パターン)を描画したいとき。 ・メニューバーの「編集」から「パターンを定義...」をクリックすると現在の画像をパターンとして登録する。・コントロールパネルのパターンピッカーから使用したいパターンを選択し、ブラシの直径、

Photoshopの選択範囲作成方法と便利な応用操作

Photoshopには長方形選択ツールや楕円形選択ツールの他にも複雑な形状のオブジェクトを選択するための様々な方法が用意されています。今回は基本的な選択範囲の作成方法と合わせて覚えると便利な応用操作についてまとめます。 基本的な選択範囲の作成方法 選択範囲を作成するための基本的なツールの使い方を表にまとめました。 ツール名(操作名) 操作方法 利用場面 長方形選択ツール ・好きな範囲をドラッグする。・Shiftキーを押しながらドラッグすると正方形になる。・Altキーを押しながらドラッグすると中心を軸にして範囲を作成する。・Spaceキーを押しながらドラッグすると範囲自体を移動することができる。・コントロールパネルのスタイルを「標準」から「固定」に変更するとサイズを指定して選択範囲を作成することができる。 ・四角形の選択範囲を作成したいとき。 楕円形選択ツール ・好きな範囲をドラッグする。・Shiftキーを押しながらドラッグすると正円になる。・Altキーを押しながらドラッグすると中心を軸にして範囲を作成する。・Spaceキーを押しながらドラッグすると範囲自体を移動することができる。・コントロールパネルのスタイルを「標準」から「固定」に変更するとサイズを指定して選択範囲を作成することができる。 ・円形の選択範囲を作成したいとき。 なげなわツール ・好きな範囲をドラッグする。・Altを押しながらクリックを繰り返すことで直線を引く要領で選択範囲を作成する。

ビットマップデータとベクターデータの違い

「ビットマップデータ」と「ベクターデータ」とは、コンピュータのモニター上で表現することができる静止画像データのことです。 ビットマップデータ ベクターデータ 英語 Bitmap Data Vector Data 別名 ラスタデータ(Raster Data) ドローデータ(Draw Data) 利点 ・無圧縮のままファイルを生成するので画質の劣化がない。 ・通常、ビットマップデータよりも容量が小さくなる。・拡大・縮小しても画質が損なわれない。・変形処理が自由自在。 欠点 ・無圧縮につきデータ容量が膨大になる。・拡大・縮小等の編集を行うと画質の劣化が生じる。 ・写真のような複雑な輪郭線や配色を持つ図形には再編処理が追いつかない。 相互変換 ビットマップデータからベクターデータへの変換はできない。

Adobe Illustratorのペンツールで思い通りに曲線を描くコツ

Adobe Illustratorを学習する上で学習者が必ず躓いてしまうのがペンツールによる曲線の描き方です。Illustratorの機能の中でも特に難解な部分ですが、逆にここさえ抑えれば他に躓くポイントは無いかと思います。 まず、曲線を描く方法として「ペンツール」と「曲線ツール」の2つがあります。ペンツールは曲線を描くための基本的なツールで、曲線ツールはペンツールの機能拡張版のような位置付けです。今回はペンツールについて解説します。 ペンツールは、手書き風の自然な曲線を描くのに向いています。逆に、正円やハートマークのような数学的な正しさや綿密な対称性が求められる図形を描くのは得意ではありません。 ※リフレクトツールとパスの連結を駆使することでペンツールでも対称な図形を描くことは可能です。 基本知識 Illustratorの基本知識をつらつらと書きます。何となく目を通しておくとペンツールについて理解が深まると思います。 アンカーポイントとパス Illustratorで描かれるオブジェクト(図形)は、点と線で構成されています。点をアンカーポイント、線をパスと呼びます。 選択ツールとダイレクト選択ツール オブジェクト単位での選択を行う場合は、選択ツールを使用します。アンカーポイントやパスを選択する場合は、ダイレクト選択ツールを使用します。

Excelの基礎知識や機能のメモ

改めてExcelについて勉強したのでよく使いそうな知識や機能をメモ。 3つの編集モードを使い分ける Excelには、「標準」「ページレイアウト」「改ページプレビュー」の3つの編集モードがある。これらの編集モードは画面の右下(ズームバーの左側)にある3つのアイコンをクリックすることで行き来することができる。 標準 基本的にExcelで何かを作るときはこのモードで行う。 ページレイアウト 印刷イメージを確認しながら編集ができるモード。ヘッダーとフッターの追加はこのモードから行う。 ヘッダーとフッターにはタイトルやページ番号を設定することができる。 改ページプレビュー 印刷範囲を設定することができるモード。印刷したくない行や列を印刷範囲から除外したり、2ページに渡って印刷されてしまうものを1ページに収めて印刷するような設定をすることができる。 ページ設定 上記で触れた「ページレイアウト」や「改ページプレビュー」だけでは思ったような印刷結果が得られない場合がある。そんなときはページレイアウトタブ(ページレイアウトモードではなく、Excel上部にあるページレイアウトのタブ)をクリックし、ページ設定グループから任意の設定を行うことができる。 例えば、ページの余白、

Expressで複数サイトのRSSを取得するプログラムを作る

node.jsのExpressで複数サイトのRSSを取得するプログラムを作ってみる。今回は複数サイトのRSSを非同期で読み込み、全てのRSSの取得が完了したときに画面に出力するという仕様で作成する。 express-generatorでプログラムの雛形を作る まずはexpress-generatorをインストールし、Expressを使用したプログラムの雛形を作る。 npmでexpress-generatorをグローバルインストールする。 npm install express-generator -g プログラムの雛形を作る。今回作成するプログラムのコードではテンプレートエンジンは使用しないので、テンプレートエンジンは何を選択しても良い。今回は適当にejsを選択する。 express --view=ejs myapp 依存関係のモジュールをインストールする。 cd myapp npm install expressを起動する。 DEBUG=myapp:* npm start ブラウザからhttp://localhost:3000/

ヒアドキュメントとテンプレートを使用してソースの可読性を向上させる

PHPのヒアドキュメントとHTMLのテンプレートの使い方を覚えたのでメモ。この2つを上手く使うことでJavascript側でDOMをゴリゴリ生成せずに済みます。 ヒアドキュメントとは ヒアドキュメント(別の呼び方としてヒア文字列、heredocなど)は、文字列リテラルをシェルスクリプトやプログラミング言語の中に埋め込むための1つの方法です。 PHPでのヒアドキュメントの使い方 ヒアドキュメントは以下のような書式で使用することができます。「EOD」の部分はアルファベットの大文字3文字なら何でも使用することができます。EODはEnd Of Documentの略です。 <<< EOD ここに内容 EOD; これができるとechoを何度も書かずに済むという利点があります。 以下のPHPは悪い例です。echoを書きすぎて見通しが悪くなっています。 echo "<ul>"; echo "<

Atomについてのメモ

自分用メモ。Atomの便利な機能やインストールしたパッケージをメモしておく。 エディタの設定 Preferences->Editorから以下の設定を有効にする。 Show Indent Guide :インデントガイドを表示する。 Show Invisibles :スペースやタブを視認できるようにする。 Soft Wrap :画面外にある文字を折り返して表示する。 Soft Wrap Hanging Indent :80字で折り返して表示する。 パッケージのインストール方法 Preferences->Installからパッケージを検索してインストールする。 インストールしたパッケージ 操作をVimライクにするvim-mode-plusとex-modeに加えて、構文解析してくれるlinter系のパッケージをインストールした。 Vim化系 vim-mode-plus ex-mode Linter系 linter

頻出するCSSセレクタのまとめ

頻出するCSSセレクタの使い方をまとめる。 対象読者 HTMLとCSSを初めて触る人。 CSSのセレクタ周りの理解を有耶無耶にしていた人。 CSSの注意点 CSSの文法に全角文字および、全角スペースを使用することはできない。 セレクタ(id、class)の頭文字に数字を使用することはできない(例:2linesなど)。 スタイルの適用順位はポイント制となっており、より獲得ポイントが高いセレクタを持つスタイルが優先される(see CSSのスタイル適用の優先順位について)。 セレクタの基本的な使い方 CSSにはHTMLの構造から要素を選択するために「要素」、「属性」、「id」、「class」の4つの選択方法が用意されている。 html <div id="foo"><

Nginxについてのメモ

ブログのWebサーバとしてNginxを使っている。Nginxについて勉強したことをメモしておく。 インストール Ubuntuの場合は以下のコマンドでインストールすることができる。 sudo apt-get update sudo apt-get upgrade sudo apt-get install nginx Ubuntuにデフォルトでインストールされているufw(ファイアウォール)を設定するには以下のようにする。 # ssh(22)のポートを開放する sudo ufw allow ssh # ufwで利用可能なアプリケーションを確認 sudo ufw app list # Nginx Fullを指定してhttp(80)とhttps(

WordPressからGhost1.21に移行した

AWS EC2 t1.micro + WordPressでブログをやっていたが、AWSから*Abuse Reportが届いたのをきっかけにConoHa 1GB + Ghostに移行した。 *不正アクセスの兆候等が確認された場合に送られてくるレポート 構築した環境 移行前 EC2 t1.micro(Amazon Linux) + Wordpress + PHP + Nginx(Webサーバとリバースプロキシ) + MySQL 構築にはAmimoto AMI(インスタンスを作るためのイメージファイル)を使用した。 移行後 ConoHa 1GB(Ubuntu) + Ghost + node.

SEOとOGPについてのメモ

SEOとは何か SEOとは、Search Engine Optimization(検索エンジン最適化)の略称である。 検索結果において、ウェブページをより高い順位に表示させることを目的として行う取り組みのことである。 今回はSEOの基本であるtitle、description、keywords、h1タグを適切に設定する方法について解説する。 OGPとは何か OGPとは、Open Graph Protocol (オープン・グラフ・プロトコル)の略称である。 OGPはもともと、Facebookが策定した仕様である。今ではFacebookだけではなく、mixiなど、様々なSNSでも利用されるようになった。 OGPを利用すると、リンクの元となるコンテンツにどのような情報が含まれているか、効率良く伝えることができる。 例えば、FacebookなどのSNSで、URLを貼るだけで写真と説明文つきのリンクを出力するにはOGPを設定する必要がある。

ゼロからウェブサイトを作るための勘所

ウェブサイトを作るアルバイトを1年ちょいやったので、そこで必要だった知識をメモ。 はじめに この記事は、筆者がウェブサイト制作のアルバイトを1年ほど行った際にウェブサイトを制作するのに必要だった知識をまとめたものです。主にレスポンシブ対応のウェブサイトを作っていましたので、本記事もレスポンシブに対応する前提での説明になります。 今回は、htmlとcssをどのように書けば目的のレイアウトを作れるかということに重点を置いて解説します。ちなみに制作環境はMac + Google Chrome + Dreamweaver + Photoshop + Illustratorですが、今回はソフトウェアの使い方については解説しません。 対象読者 HTMLとCSSは触るが、レイアウトまでは作らないプログラマ寄りの人 ワイヤーフレームを作成する まず初めに、ウェブサイトの構成を決めます。どのようなコンテンツが必要か、コンテンツをどのように配置するか、ウェブサイトのページ数、バックエンド(サーバー、プログラム、データベース)はどんなものが必要か、などを洗い出します。 実際に図に起こしておくと分かり易いかもしれません。大まかな構成さえ把握できるなら簡単なメモでも構いません。