<!--親の顔より見た光景-->

日々の発見を残していきます。

【LaTeX】アンケート用紙を作る

 図のようなアンケート用紙をLaTeXで作った。

f:id:akagi13213:20161207190021p:plain

 以下にアンケートを構成する要素の詳細を記す。

タイトルと名前

 今までは名前を中央寄せにしていたが、右詰めにしてみた。下記サイト様を参考にした。

とりぷる ぷぅ 技術メモ: [TeX]タイトル、著者表記を自前で用意する

\maketitleだと著者や日付が中央に寄ってしまうので自前で記述する必要があるらしい。

 

\begin{center}

  {\Large \underline{卒業研究に関するアンケート}}

\end{center}

\begin{flushright}

  {\normalsize 所属 名前}

\end{flushright}

 

文字サイズは\Largeで14.4pt、\largeで12pt、\normalsizeで10pt。

\underline{文字列}で下線を引ける。

 

チェックボックス

 下記サイト様を参考にした。

TeXで図形:四角を出したい時 - なぜにぽえむ

 

 \usepackage{amssymb}

    ・

    ・

2.麻雀の点数計算は出来ますか?

\begin{itemize}

  \item $\Box$ はい

  \item $\Box$ いいえ

\end{itemize}

 

数直線

 よくある5段階評価を数直線で表してみた。下記サイト様を参考にした。

天地有情 [LaTeX] signchart --- 数直線グラフ上にサインを置く

\usepackage{signchart}

    ・

    ・

3.入力画面はわかりやすかったですか?

\signchart[width=15, height=0.7]{1,2,3,4,5}{悪い,,           普通,,               良い }

ウォーターフォールモデルでマインスイーパーアプリを作ってみる

経緯

 卒研も大方終わり、丁度マインスイーパーアプリを作りたいと思っていたのでその開発をすることに決めた。 今まで行き当たりばったりなコーディングでソフトウェア開発をしていたので、この機会にしっかり準備をした上での開発をしたいと思う。

具体的には最低限以下の3つをコーディング前に決めてから開発に移りたい。

1.変数命名規則

2.わかりやすいデータ構造(後から自分で読んでも理解出来る)

3.処理の流れ(フローチャート、状態遷移図等)

 これらを踏まえて、ウォーターフォールモデルで開発をしたいと思う。ウォーターフォール型を選んだ理由は開発手法の主流であること、知っていて損は無いはず、という二点から。

 

ウォーターフォールモデルとは?

 ウォーターフォールモデルとは、古くからあるソフトウェア開発の手法。

メリット:

・計画を立てやすい

 上流工程から要求機能を詳細に落とし込む手順を踏んでゆくため、事前に今後必要となる事項を想定しながら開発できる。

進捗管理がしやすい

 全体を把握した上で工程別・タスク別に管理可能なことから、プロジェクト全体や各開発要員の進捗管理を行いやすい。

・成果物ベースでの開発

 ドキュメントなどの成果物がある状態で開発を行うため、どのような開発者でも仕様書を読めば開発する事が出来る。

デメリット:

・上流工程でしか要件定義できない

 後から変更点が合っても対応出来ない。

・仕様変更時の影響

 前工程での成果物をベースに開発を進めるので、設計ミス・仕様変更があればテストのやり直しやプログラムの修正にコストがかかる。

 ※参考

 「要求定義段階で誤りを修正するコストを1とすると、コーディング段階で要求定義の誤りを修正するコストは5倍から10倍かかる。保守段階に誤りを修正するコストは200倍となる。」(Davis, Alan M. Software Requirements: Objects, Functions, and States, Englewood Cliffs, NJ:Prentice-Hall, 1993)

 

以上、メリットとデメリットは下記サイト様より引用。

開発手法の基礎、ウォーターフォールモデルの特徴とは | エンジニアへの道|リナックスアカデミー公式ブログ

 

ウォーターフォールモデルの流れ

(1) 要件定義

・システム要件定義

 ユーザーとなる人たちにヒアリングを行い、システム化する範囲や対象業務を明確にし、新システムに必要な機能を検討する。

・ソフトウェア要件定義

 業務の手順を整理して、システムで扱うデータや処理の流れ、ソフトウェアの内容を決める。インターフェース部分の仕様、セキュリティ対策やシステムの保守方法などについてもこの段階で決めておく。

(2) 基本設計

 要件定義で決定された事項を具体化する。主な設計内容として、

・ハードウェア、データベース、ソフトウェアの選定

・データベース設計、テーブル設計

・システム・サブシステムの機能概要の設計

・入出力内容の決定

等が挙げられる。

(3) 詳細設計

 基本設計で決定された事項を画面単位、プログラム単位など、より詳細に機能分割して設計する。具体的には、

・画面、帳票のレイアウト及び機能設計

・自動実行処理の設計

・メッセージ(画面に表示する内容)仕様の設計

・クラス設計などのプログラム設計

・システムで使用するコード設計

・開発規約、コーディング規約などの検討

単体テスト仕様書の設計

(4) 製造(プログラミング)

 詳細設計書を元にプログラムをコーディングしていく。

(5) 単体テスト

 作成されたプログラムに対し、単体テスト仕様書を元にテストを行う。全てのテスト項目が完了したら結合テストに移る。

(6) 結合テスト

 各プログラムを結合し、画面遷移やデータの受け渡し等、画面・プログラム・サブシステム間の連携が正しく行われているかを確認する。具体的には、実際の業務を想定したテストケースを作成し、最初のインプットから想定される正しいアウトプットが得られるかを確認する。

(7) 結合テストシステムテスト

 実際にユーザーと同じ環境か、それと同等の環境で行うテスト。

(8) 運用テスト

 実際にユーザーに使用してもらい、要求機能を満たしているか、操作感はどうかなどを確認してもらう。

(9) リリース・保守

 不具合の修正等。ウォーターフォール・モデルに限らず保守は開発の中で最も重要なフェーズ。

 

 以上の流れで開発をしていく。マインスイーパーアプリ開発における、一つ一つの工程の詳細を本ブログに書いていく予定。大半の工程がインターンシップで学んだことを流用出来るのでスムーズに進むはず。

バグ防止

ニコ生に現れた達人リスナーが言っていたこと

 

・コピペ前にコピペ元の動作を確認。

・関数呼び出しの前に関数の動作を確認。

・こまめにコンパイルでエラーチェック。長いプログラムを書いた後だとバグ部分が見つけにくい、時間がかかる。

【LaTeX】画像の挿入

\usepackage{dvipdfmx}[graphicx]

\begin{figure}[h]

  \begin{center}

    \includegraphics[clip, height=5.0cm]{test.png}

    \caption{テスト画像}

  \end{center}

\end{figure}

 

・\begin{figure}[位置指定]

 位置指定に使えるコマンドは、

 ①h 記述した場所に挿入

 ②t ページの上端に挿入

 ③b ページの下端に挿入

 ④p 専用ページを用意して出力

 

・\includegraphics[オプション]{ファイル名}

 オプションに指定出来るコマンドは、

 ①width 幅

 ②height 高さ

 ③scale 拡大・縮小率

 ④angle 回転角

 ⑤clip はみ出しを切り取る

 オプションはカンマ(,)で区切って複数指定できる。

ファイル名は.texが生成される場所に置くと相対パスで済む。

 

以下サイト様より参照

LaTeXコマンド集 - 図の基本

【LaTeX】長い改行を挿入する

現在LaTeXを勉強中である。レイアウトの都合上長い改行を入れたいときは以下のようにしている。

 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

りんごは赤い。

\verb| |

\verb| |

\verb| |

\verb| |

\verb| |

ループのミス

List<Integer> blue_coordinate = new ArrayList<Integer>();

blue_coordinateには座標が複数個入っている。この座標から一つだけを取り出したい。

naki_hora_infoに座標を格納したら座標探しは終了するので、break文を入れる。

break文を入れることを忘れて30分ほど悩んだ。

 

for ( int i = 0; i < blue_coordinate.size(); i++ ) {
  if ( blue_coordinate.get( i ) == horizontal_blue_coordinate ) {
    if ( i == 0 ) { // 左端が横向き
      naki_hora_info.naki_shape[naki_shape_count++] = 1;
      break;
    }
    else if ( i == ( blue_coordinate.size() - 1 ) ) { // 右端が横向き
      naki_hora_info.naki_shape[naki_shape_count++] = 2;
      break;
    }
    else if ( i == ( blue_coordinate.size() - 2 ) ) { // 真ん中が横向き
      naki_hora_info.naki_shape[naki_shape_count++] = 3;
      break;
    }

  }

}

ImageViewで動的にmarginを設定

xmlではなくJavaコードでImageViewの余白を動的に設定する方法。

android - How to set margin of ImageView using code, not xml - Stack Overflow

StackOverflowで解決。

 

ImageView image_view = ( ImageView )findViewById( R.id.test_image );

// ImageViewの大きさを設定
LinearLayout.LayoutParams layout_params = new LinearLayout.LayoutParams( width, height );
layout_params.setMargins( left, top, right, bottom );    // marginを設ける
image_view.setLayoutParams( layout_params );    // ImageViewのレイアウトを登録