文系seの備忘録

Excelの改行でひたすらスペースを打っていた機械音痴の文系seが日々の備忘録を綴る。

HTMLファイルをjspに変換する

■ HTMLって?

HTML(Hyper Text Markup Language)
タグを使って作られてます。


阿部寛さんの公式ホームページが分かりやすいので使用させてもらいます。
阿部寛のホームページ


このページ上で F12 もしくはオプションから「開発者ツール」「デベロッパー ツール」(ブラウザにより名前が違います)
をクリックしてコードを見てみます。

f:id:ron623:20160725193116p:plain
※ なんだか懐かしい造りですが公式HPですよ!


下になんか出てきました。これがこのホームページのソースコードです。

ここでダブルクリックすると編集できます。(chromeで実施。他のブラウザは出来ないかも)
ためしに「ドラマ出演」のページで、出演記録の内容を変えてみました。
f:id:ron623:20160725193300p:plain
※ 実際のホームページの内容は書きかわっておらず、あくまで自分のPCでの表示が変わっただけです



jspって?

java server page
サーバー上で動き、htmlページの中にjavaのコードを書けます。

jspの作り方

0.tomcatをダウンロードしておく
  jspはサーバー上で動きます。なのでTomcatを入れておきます。
Tomcat/ webapps/ arashi(任意のフォルダ名)/ jsp
  jspを入れる
Tomcat/ webapps/ arashi/ WEB-INF
  こっちにjavascriptとかライブラリとか入れとく

1.拡張子を「.jsp」にする
先ほどの阿部寛さんホームページもメモ帳に貼り付けて「.jsp」で保存すればjspになります。
・・ので、HTMLページに動作を加えたいってときにはjspファイルにしてスクリプトを埋め込めばOKです。

2.スクリプトを記述する
<%> ~ <%>のなかにjavaのコードを書きます。
例) 現在日時を取得
現在日時:<%= new java.util.Date() %>


今回は好きなアイドルグループのメンバーにメッセージを送るページを作ってみました。

<!-- このようにしてコメントをかけます -->
<!-- これは文字コードを指定するためのもの。なくても動く(環境による) -->
<%@ page contentType="text/html;charset=Shift_JIS" %>

<html>
<head>
<title></title>
</head>
<body>
<font color = " dimgray">
<p align="left">&nbsp;</p>
<fieldset class="black_bokashi" style="HEIGHT: 614px; WIDTH: 515px">
<br>
<p align="left"><strong><font size="7" color="darkgray">message for member<br></font></strong>
<br><br>

<!-- javaコード記述で現在日時を取得 -->
<strong>現在日時:<%= new java.util.Date() %></strong>
<br><br>
<strong>アーティスト区分</strong>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
<select style="WIDTH: 174px"><option selected>アーティスト区分選択</option><option value="1">1</option><option value="2">2</option><option value="3">3</option><option value="4">4</option><option value="5">5</option><option value="6">6</option><option value="7">7</option><option value="8">8</option><option value="9">9</option></select><br>
・
・
・
(以下省略)


jspは以下においたので
f:id:ron623:20160725195520p:plain

URLはこうなります。
http://localhost:8080/arashi/jsp/message.jsp


ブラウザから見てみます。
f:id:ron623:20160725202042p:plain

f:id:ron623:20160725201918p:plain

データベースからメンバー情報をとってきたり時刻を表示したり、javaのプログラムの処理が行えました。



これがhtmlだとどうなるかというと、、
f:id:ron623:20160725195241p:plain
当然ですがjavaプログラムと認識されずそのまま文字として表示されます。

java gold紫本の新版が3年越しでついに発売

java 紫本、ついに新版出ます。


・オラクル認定資格教科書 Javaプログラマ Gold SE 8 (EXAMPRESS)

オラクル認定資格教科書 Javaプログラマ Gold SE 8 (EXAMPRESS)

オラクル認定資格教科書 Javaプログラマ Gold SE 8 (EXAMPRESS)



2013年に発売した紫本から実に3年。

SE 8へのバージョンアップによって拡大した出題範囲を詳しく解説。
サンプルコードで動作を確認しながら学習できるとともに、試験対策として豊富な練習問題と模擬試験を掲載。

サンプルコード付きなのが良いです。
silverのときもテキストでの学習だけでなく、けっこうコーディングをして実際に動かして理解したので・・。



java se7と比較して

ラムダ式
・Stream API
・Date and Time API

などが追加になりました。


APIの使い方と、se8で新しく増えた機能を理解することがカギとなりそうです。




最近rubyばかりでjavaはご無沙汰なので、javaの基本文法と概念(オブジェクト指向など)を復習しなくては。
こういう試験は期間をあけずに取るべきだなぁ~と改めて感じました。
リハビリたいへん。

Encoding::CompatibilityError の対処方法と cannot load such file -- 2.2/gherkin_lexer_en

rubyのバージョンを上げて以来、Encoding::CompatibilityError というエラーが発生。

Encoding::CompatibilityError は互換性のない文字列連結などで発生するらしい。

けど、ソースいじってないし実行マシンの設定も変えてない。


実行時のログを見てみると
WARNING: cannot load such file -- 2.3/gherkin_lexer_en


"cannot load such file" 再び。
今度は「gherkin_lexer_en」ってのが見つからないよって言われた。

なんだこのファイルは。GENKINGと空目してしまう。
調べたらfeatureファイルの書式の1つに「Gherkin 書式」というものがあるそう。


このファイルが読めてないせいで、エンコーディングがうまくいかずにエラーになってるっぽい。




下記ページに対処方法が載っている
watir - cucumber Couldn't load 2.1/gherkin_lexer_en - Stack Overflow



対処方法

1.gherkin 2.12.2 をインストールする
2.c_lexer.rbのprefix = の部分を置き換える

  ・ファイルの場所
  例)version2.3.0の場合
  C:\Ruby23-x64\lib\ruby\gems\2.3.0\gems\gherkin-2.12.2-x86-mingw32\lib\gherkin

  ・元々書いてある以下をコメントアウトして、
  prefix = RbConfig::CONFIG['arch'] =~ /mswin|mingw/ ? "#{RbConfig::CONFIG['MAJOR']}.#{RbConfig::CONFIG['MINOR']}/" : ''

  ・以下を追記
  prefix = ''



注意点

※ 上記対応は動かしているrubyのバージョンのファイルに対して行います。

インストールしたrubyディレクトリ以下それぞれにファイルが作られているため。。

これは2.2系
f:id:ron623:20160714100959p:plain

これは2.3系
f:id:ron623:20160714101008p:plain

関連:rubyの最新バージョンをインストールするとろくなことがない (cannot load such file -- ffi_c (LoadError)) - 文系seの備忘録


ただし・・・
・バージョンアップするごとに毎回書き換えるのが面倒
・別の環境で実行したときにわざわざ書き換えなきゃいけないのは面倒
という問題があるかと思います。
その場合は実行時にcopyコマンドでファイルごと上書きするよう設定しておくと良いと思います。

例) バグ対応パッチをどこかにおいておいて、それを2.3系にコピーする
copy /Y xxx\c_lexer.rb C:\Ruby23-x64\lib\ruby\gems\2.3.0\gems\gherkin-2.12.2-x86-mingw32\lib\gherkin\c_lexer.rb
※ 別のrubyバージョンを使うときにはcopy先のフォルダを変更すればOKです




再度実行してみたところ、Encoding::CompatibilityError は消えました。

rubyの最新バージョンをインストールするとろくなことがない (cannot load such file -- ffi_c (LoadError))

7/5

Rubyの最新バージョンを入れて、jenkinsからジョブを実行したところこんなエラーがでました。
C:/Ruby23-x64/lib/ruby/gems/2.3.0/gems/ffi-1.9.13-x64-mingw32/lib/ffi.rb:6:in `require': cannot load such file -- ffi_c (LoadError)

ffiってのはForeign Function Interfaceという多言語を呼び出すためのIFらしい。
これが読み込めないよって言われてる。


ジョブを実行してるノードで以下コマンドを実行したところ、
gem list

ffi自体は入ってるっぽい。
ffi (1.9.10 x64-mingw32)


しかたなく実際にそのディレクトリを覗いてみました。
f:id:ron623:20160713195234p:plain
・・・ああ。確かに2.3系用のファイルがありません。



7/12

上記エラーが解消されてました。
LoadErrorと言われてたパスの場所を見に行くと
f:id:ron623:20160713195350p:plain

2.3系用のライブラリフォルダが作成されてました。


今回はほっといたら直ったので良かったけど、すぐに動かしたいってときにはgemを入れなおすとかする必要があるみたいです
can't find ffi_c with ruby 2.2.1 on Windows · Issue #432 · ffi/ffi · GitHub



最新版を適用するとこういうことがあるので厄介ですね。。

slackを3ヶ月間使ってみて (便利な機能やコマンドなどまとめ)

slackを個人的に使い始めて3か月ほど経ちました。
無課金でなかなか便利に使えているので、おすすめの機能や連携アプリなどを紹介したいと思います。

過去に書いたslackに関する記事はこちら


Botkitでslackのbotを作る(Windows環境)
Botkitでslackのbotを作る(Windows環境) - 文系seの備忘録

slackをプログラミングの勉強に生かす
slackをプログラミングの勉強に生かす - 文系seの備忘録


現在の用途としても、変わらず個人の学習がメインです。
チャンネルはこんなかんじ↓
f:id:ron623:20160712154953p:plain
ソースを貼ると言語に合わせていいかんじに色付け・インデントされるのでよいです。




・リマインダー
スマホならリマインダー機能がついていると思いますが
   - パソコンからでも確認できる
   - 他の人にリマインドを送れる
   - リマインダーのリストが確認できる
   - 投稿に対してリマインダー設定できる
などの理由で、最近はslackのリマインダーを使用してます。


設定方法は2種類。

  1. コマンドで入力
  /remind [me or @人 or #チャンネル] [内容] [at|in|on] [日時] (every day)
  例) /remind me 本屋寄る at 19:00
  夜7時に本屋寄るって予定です。順番は適当でも大丈夫そうです。
  
  2. slackの投稿からリマインダー設定
  slackの投稿にカーソルを当てて出てきた「…」みたいなボタンから、
  「Remind me about this」で設定できます。
  これは最近追加された機能ですが、便利です。
  
  例)jenkinsの機能について調べたいなーっていう投稿に対して、リマインド設定をします。

  f:id:ron623:20160712155021p:plain

  そうすると、忘れたころに通知が来て「あぁ、こんなこと気になってたっけな」というのが思い出せたりします。




・連携アプリ

・IFTTT(イフト)
   - Twitterの特定ユーザーやワードのツイート
   - 今日の天気
   - グーグルカレンダーの予定やtodo
  などを、自動でslackに投稿してくれる便利なツールです。


  これは英語のフレーズbotです。
  f:id:ron623:20160712154936p:plain

  これは現在勉強中のFPに関するbot
  f:id:ron623:20160712154942p:plain

  別の作業をしていても、ポップアップで確認できて便利です。
  f:id:ron623:20160712155013p:plain



使い方

1. 画面上部の検索ボックスに「slack」と入れて検索すると、slackに対して可能な操作が表示されます。
  f:id:ron623:20160712154956p:plain


2. やりたいことを選んで色々設定します。
  ・Trigger
   例) ツイッターの特定ユーザーからのツイートをslackに通知する
   - 「Trigger」の「Search for」というところに取得したいユーザー名を記載します。

     f:id:ron623:20160712154958p:plain

     from:@ユーザー名 とすると、特定のユーザーからのツイートのみが通知されるようになります
     他にも、
       「#パンケーキ」で ハッシュタグを含むツイート、
       「櫻井翔 filter:videos」で櫻井翔さんの動画つきツイート
       「東急 見合わせ -RT」でリツイート以外のツイート
     などなど、「twitterの高度な検索」にて使える条件ならここに設定することができます。
  
  ・Action
   - 特に設定しなくてもOKです
   - 表示内容のカスタマイズ
     MessageとかTitleとかのテキストボックスにカーソルをあてると右側に三角フラスコみたいなのが出るのでクリック

     f:id:ron623:20160712155016p:plain

     「Select an Ingredient」でslackで何を表示したいか選ぶことが出来ます
     
     以下は天気の通知ですが、初期設定だと上のように表示されます。
     ツイートのリンクなど要らなかったので外したものが下の画像になります。
     f:id:ron623:20160712155019p:plain





・グーグルカレンダー
グーグルカレンダーで予定を入れたときにslackに通知が飛びます。
一週間の予定など確認でき、便利。
f:id:ron623:20160712155024p:plain

欲を言えばslackからグーグルカレンダーに予定が登録できればいいんだけど・・
それは自分で作れって話ですね。





・その他

・ユーザーの表示名を日本語化する

     1. 左上のProfile&Accountで自分の名前を日本語名にしとく

     2. 左上の「preferences」をクリック
     f:id:ron623:20160712161349p:plain

     3. 「Display real names instead of usernames (team default)」にチェック
     f:id:ron623:20160712154949p:plain






slackのAPIはどんどん出来ることが増えてます。
SlackのAPIがアップデート、メッセージボタンでのタスク実行が可能に | TechCrunch Japan


・・・が、便利そうなツールを取り入れては消してを繰り返した結果、
結局残ったのはIFTTTとグーグルカレンダーくらいです。
私的に使うことが多く、誰かと共有することが少ないというのもあるかもしれません。

自分の使用目的としては、色んな学習を平行して行っていてその内容を書き込んだり管理することなので、
その目的を果たすのには十分です。



もし職場などで導入する場合は業務に適した機能を取り入れることで効率化を図れそうです。

Windows環境でJenkinsのコンソール出力が文字化けした

実行したジョブはUTF-8で、Windowsの出力はMS932。
文字コードがずれてたので文字化けが発生したようす。

1.Windowsマシンに、文字コード出力設定を追加
2.Jenkinsのスレーブ設定に文字コード出力設定を追加
3.実行するジョブの先頭に、表示する文字コードを明記

で解決。



1.Windowsマシンに、文字コード出力設定を追加

システム環境変数に以下を追加
JAVA_TOOL_OPTIONS=-Dfile.encoding=UTF-8 -Dsun.jnu.encoding=UTF-8



2.Jenkinsのスレーブ設定に文字コード出力設定を追加

起動方法 > JVMオプション に以下を追加

3.実行するジョブの先頭に、表示する文字コードを明記
Windowsバッチコマンドの実行 先頭に以下を追加
chcp 65001
文字コードは以下を参考に設定した
文字コードの設定(CHCP) - ウィンドウの操作 - コマンドプロンプトの使い方




以上を行ったうえでスレーブを再起動。
切断して再度起動すればOKです。



※ jenkinsサーバー自体を再起動する場合は
http://{JENKNS_HOST}/safeRestart
で行えます。

undefined method `hoge' for nil:NilClass (ruby)

こんなソースを書いたらおこられた。

for arr_i in 0...header.size do
header_str += header[arr_i].to_s
    ・
    ・
    ・


"+" がない?とかなんとか。。。。

NoMethodError:
undefined method `+' for nil:NilClass


んんんん?どういうこと?
rubyはプラスをつかえないの?


header_str = header_str + header[arr_i].to_s

って書き直したりしてみたりしても変わらず(当たり前)。。。


これ、javaでいうところのぬるぽなんですね・・・。
初期化してやったらうまくいきました。


for arr_i in 0...header.size do
header_str = ""
header_str += header[arr_i].to_s
    ・
    ・
    ・

javaとは出るエラーメッセージの内容が異なるので手こずりますね。