Android LogCatの見方 ・強制終了したとき ”時刻” W/ActivityManager(”プロセスID”): Activity pause timeout for ActivityRecord{”プロセスID” ”アプリ名”} ・ANRになったとき ”時刻” E/ActivityManager(”プロセスID”): ANR in ”アプリ名” (”アプリ名”) W:warning E:Error その他 ・MD5のクラッキング方法 ・ビックデータを活用した問題解決 リアルタイムで、同じ問題にあたっている人をログで 解析 先に解決したほうを参考にできる。 ・リンクでスタンプを遅れるようにして コミュニケーションの活性化 アプリ案 □音楽検索機能! 現状:CMや歌、鼻歌検索はある。 高周波で検索できるようにする。 ラジオ番組との連携がスムーズ。 スマホだからできること。 よりイージーに検索できるようにする。 googleよりも簡単に検索。モジュール提供。 このアイディアは電子透かし横シフトして考え出した。 スマホに人間ではできないことをさせる。 そのほか、スマホに○○させる。 テレビのものを即検索、ラジオのものを即検索 簡単に検索。見たもの、聞いたものを即検索。 音声の見えるか、矯正 「スタンプファン」 QooPo http://www.konure.com/it/2013/06/sonic-system.html □縄張り調査アプリ 猫の縄張りを見るケル →似たようなことで自分が好きなことをアプリにすることはないだろうか? □サービスでデバック用のツールを開発して見る。 ログ出力 □ライフサイクルの図を分析することから ActivityまたはFragmentのそれぞれの状態のときのイベントハンドラメソッドでログをはくようにすれば、 そのログをPCで分析して、色をつける。 サービスの実験には何を使う? サービスでライフサイクルの監視をし続けるようにする? サービスでPCにデータを送り続けるようにする? それか、画面を半分に切り分ける。 □スプラッシュ画面から、メイン画面に遷移するようにする。 アプリ名:l●●k life!! Androidにおけるダブルクリック制御 ①フラグ制御 クリックを受付けるかどうかをフラグを使って管理する方法 Fragmentのライフサイクルの理解が必要。 onAttach()でクリックを受付けるように制御 ②時刻制御 システム時刻である時間が過ぎたら受付するようにする。 fragmentでもMainActivityでもいける。 システム時刻が変更された際も、復帰時に取り直せばいける。 システム時刻を取得し時間間隔を判定するメソッド 開発環境構築でハマったこと。 when:サーバでデバック実行しようとしたとき what:「tomcat 指定された JRE インストールが存在しません」エラーが出た why:JREの指定に誤りがある。 How:サーバビューでサーバを右クリック-右クリックメニューの中の「開く」を選択 「ランタイム環境」を選択-JREを正しく設定する。 ・Activity、Activityスタック <== 基礎 ・フラグメント <== UIの部品化 ・サービス、AIDL <== 常駐アプリが組める ↑を使ったサンプルを組んでみる ・ContentProvider/sqlite <== データ管理 ↑座学 ■Activity、Activityスタック <== 基礎 ActivityはユーザへのI/Oを備えたコンポーネント Activity ■アクティビティとスタックの考えが学べる。 http://y-anz-m.blogspot.jp/2010/08/android_10.html http://techblog.qoncept.jp/?p=102 ■アプリには必ず始まり(エントリポイント)と終了がある。 AndroidManifest.xmlにおいてaction.MAINが設定されたActivityが エントリポイント(HOMEアプリから呼ばれる)となる。 ■フラグメント <== UIの部品化 Fragmentを使うことで,Activityのライフサイクルに依存するロジックをActivityから切り出すことができます?? ■フラグメントについて分かりやすくまとめられているサイト http://www.techdoctranslator.com/android/guide/activities/fragments ■フラブメント解説の定番ページ http://www.techdoctranslator.com/android/guide/activities/fragments ■サービス、AIDL <== 常駐アプリが組める ↑を使ったサンプルを組んでみる AIDLとは? IPC:Interprocess Communication, プロセス間通信) アクティビティは1つのプロセスとして実行される。 【サービスのプロセス】と【メインアクティビティのプロセス】で通信させる。 ■ContentProvider/sqlite <== データ管理 ↑座学 http://steavevaivai.hatenablog.com/entry/2015/02/11/120214 http://seesaawiki.jp/w/moonlight_aska/d/%a5%b5%a1%bc%a5%d3%a5%b9%a4%cb%a5%a4%a5%f3%a5%bf%a5%d5%a5%a7%a1%bc%a5%b9%a4%f2%bc%c2%c1%f5%a4%b9%a4%eb http://xfutures.jp/2009/07/18/60/ http://www.atmarkit.co.jp/ait/articles/1206/15/news124_2.html ■サービスの起動方法がシンプルに解説されている。 http://seesaawiki.jp/w/moonlight_aska/d/%a5%d0%a5%a4%a5%f3%a5%c9%a4%c7%a5%b5%a1%bc%a5%d3%a5%b9%a4%f2%b5%af%c6%b0/%c4%e4%bb%df%a4%b9%a4%eb ■Androidアプリのプロセス間通信の基礎知識である AIDLファイルやコールバックが分かりやすい。 http://steavevaivai.hatenablog.com/entry/2015/02/11/120214 http://xfutures.jp/2009/07/20/92/ ■プロセス間通信や周辺知識を学べる http://www.atmarkit.co.jp/ait/articles/1206/15/news124.html ■アンドロイドアプリのサービス起動には startService()とbindService()の2種類がある。 それぞれの使い分けは、 startService()で実行するサービスは、指示を受けたと後に、自立的に動作(起動、停止)するようなケース bindService()で実行するサービスは、IPCで明確に指示されて動作するケースである。 ※自身では停止すべきではなくクライアントの接続がなくなってから、停止すべき。 参考 ■サービスの実行方法はContext#startServiceとContext#bindServiceの2種類を分かりやすく説明してくれてる ここ ここ ■サービス本体のaidlとcallback用のaidlの2つ一組が最低でも必要になる 参考 http://steavevaivai.hatenablog.com/entry/2015/02/11/120214 ■AIDLクラスはinterface名とファイル名が異なってもエラーが発生しないので、 リファクタリングでファイル名だけを変更したときは注意が必要。 プロセス通信間通信において、通信先プロセスのサービスでタイマー処理して、ハマったこと タイマー処理は処理は別スレッドで実施されているためか、 サービスとの通信が切断してサービスがonDestroyされて後も動作しつづける。 なので、接続をたつ前にタイマー処理を停止してあげる必要がある。 Android Studioの開発環境の構築においてハマったこと Gitをインストールする必要があったが、Git Hubが必要だと勘違いして、インストール手順を調査したり、インストール作業をした。 【まとめ】 Git:バージョン管理システム Git Hub:Gitを利用したWebサービス 【対策】 どちらが必要なのか先に調べれば、無駄な作業を避けることができた。 ■Git上の既存プロジェクトの実行においてはまったこと。 既存のプロジェクトをGitからチェックアウトして、動作を確認する際にgradleの設定が 必要だと思い込み、調査などに時間を要した。 実際はプロジェクトのチェックアウト及び構成の仕方に問題があった。gradle知識が無くても動作確認できた。 【まとめ】 ■gradle:特定のIDEに依存せずに(つまり、IDEでの設定は不要)ビルドできるようにする設定群 →eclipseなどのIDEで作成していたプロジェクトを、Android Studioで引き続き開発したい場合は 現行のプロジェクトをエクスポートする際にビルド条件(プロジェクト間の依存関係など)をgradleとして作成する手順が必要になる。 ■Gitからgradleを持つプロジェクトをチェックアウトする手順 プロジェクトを開いて-「VCS」-「Checkout from Version Control」-[Git] ■参考にしたサイト http://stackoverflow.com/questions/16580873/android-studio-stuck-at-gradle-download-on-create-new-project 【対策】 煮詰まったら、サラの状態に戻してはじめからやり直す。 AndroidManifest.xmlとは? アプリケーションとして持つべき情報を明示しているファイル。 Activityとクラスを紐付けている Activityとレイアウトを紐付けるのは、クラス内。 フラグメント表示でハマったこと ★のところを、wrap_contentでなくmatch_parentを指定していたために、 その後に続くfragmentが表示されない現象がおきていた。 表示されなくても、エラーが出ないので原因の特定に時間を要した。 【対策】 安易にmatch_parentを使用しないようにする。 バックスタックの一番上のものを取り出す方法はpopBackStack() remove()で取り除く場合はidまたはtagまたはfragmentを指定する必要がある。 手っ取り早く取り出す方法は // フラグメントマネージャー FragmentManager fm = getFragmentManager(); // 一つだけ戻す fm.popBackStack(); FragmentTransaction ft = fm.beginTransaction(); ft.commit(); 参考: https://bkiwad.wordpress.com/2011/05/30/android-pop-transaction/ アプリの勉強するうえで大切なこと 意味のある処理とするようにする。 名簿管理→受付管理 ご名刺管理、 ○○管理 photo機能も付ける。 なんでそこに行き着いた? 処理に意味を持たせる PCにも意味をもたせたのはジョブス 違った価値を持たせる。 違う角度からみさせて価値を生ませる。 ガラクタを高く売るには?今までに無い角度で見させる。 中間報告する。 →中間報告できる形にまとめる 4つの課題に関してどのようなサンプルを作ったかを SQLITEについて調査する。 ゲームの画面を作成する。 シーケンス図を描いてみる registという風に命名しているけど、実際はカーソルを返す処理つまりselectのようなことをしている。 16:30 撤収開始 □報告内容をまとめる 21日(火)着工 22日 開発環境導入 23日、24日 アクティビティ、フラグメントのライフサイクル、スタックのサンプル実装、理解を深める 27日、28日、30日PM AIDLによるプロセス間通信のサンプル実装 7日、8日 SQLiteの技術調査および、サンプル実装 ■目標 □SQLiteを空で説明できるようになる。 □CRUDのメソッドをそれぞれ用意して、一回ずつ実行してみる create read update delete □openやクローズを管理するクラスを用意する必要はあるか? 一番最初はcreateだからその際はopenはしなくて良いけど、closeはする必要はある。 作成したテーブルに対してはDBをopenする必要が出てくる →そういうわけでもなさそう。 →というか、javaDriveではhelperは使用していないようだ・・・ 今一度ヘルパーを利用する意味を比較して実感すべし! javaDrive ヘルパークラスを利用するもの 途中前参考にしたページ なんか分かりやすそうなページ SQLiteOpenHelperクラスの使い方を簡単に解説してある □月曜日に着工する場所の明確化 bchのソースを見てみる。 □ステータスバーにサービスの状態を表示してみる。 goolge検索「android ダウンロード 通知エリア 実装」 ※古い!!Notificationの使ってステータスバーに情報を表示 端的に書かれていて分かりやすい。 →Activityを持たずにバックグラウンドで動作するサービスなどはNotificationを使うことでユーザに情報を通知することができます。 その他はまること APIレベルによる、メソッドの違い バイブレーション使用時は許可が必要 □pending とは? →保留の pend →未決[未決定・未解決]のままである □Contextって何やろ? →アプリに関する情報を保持するオブジェクト 通知を受けて通知をタップして、アクティビティを起動する ★ここでアクティビティを起動するときの条件の復習!! 起動モードと起動フラグ 表・図 →デフォルトだと起動モードがstandardになっているため、常に新規にアクティビティがつくられてしまうのじゃよ! 起動モードの解説 サービスでファイルダウンロードを実装してみる! Goolge検索:android ファイルダウンロード 実装 非同期で画像ファイルをDLする ダウンロード手段は複数ある見たい ★そもそも非同期処理とは? UIスレッドと内部処理を分離して行われる処理のこと ・頭の整理 サービスでダウンロード処理 ダウンロードするサーバのURL指定 ダウンロードするファイル名を指定 処理を開始するトリガーはメインのアクティビティに設置しておく、 ダウンロード完了はステータスバーで知らせる。 ステータスバーの詳細をタップすると、メインのActivityを起動する。 □ダウンロードするserviceはIntentServiceに限定されるのか? 普通のSeriviceとは異なるのか? Google検索:intentservice service 違い IntentServiceの特徴及びシンプルな実装例 IntentServiceはServiceをより使いやすくしたもの。 →上記のサイトでIntentServiceについて基礎を学び、以下を参考にして、画像ダウンロード処理を組み込んでみた!! 画像ダウンロード手段は複数あるみたい →今回はIntentService を用いた方法で実装してみた。 通知オブジェクトのNotificationの一部のメソッドがAPIレベルによって使用制限があった そもそもAPIレベルとは? Andoroidは常々改良されている →利用しているAPIレベルが常々変わっていっいる →APIレベルとはAPIの版数を表している。 →API レベルは、Android プラットフォームのバージョンで提供されるフレームワーク API リビジョンを一意に識別する数値 AndroidOSにはバージョンがあり、あるバージョンで使用できるAPIが決まっている。 OSとAPIレベルは1:1対応になっている。ただし、上位のOSは下位のバージョンのOSのAPIを包括している。 マニフェストファイルでエラーが出ないように、最小APIレベルを調整したが、エラーが消えない・・・原因は以下だった。 Android Studioでの開発ではAPIのバージョンはbuild.gradleファイルで決まる。 →マニフェストファイルでminSdkVersionやtargetSdkVersionを指定しても、build.gradleの内容で上書きされてしまう。 □そもそもHandlerとは? きたものをハンドリング(=処理)する人、プログラム? 例: ・キューにたまったタスクを処理する ・サービスで処理した結果をGUIに反映する ・GUIから受け取ったデータをサービスで処理する 受け渡しがあるときにハンドラってよぶのかも サービスに処理を任せる場合は処理を受け渡すプログラム(プロセス)と受け取って処理するプログラム(プロセス)が存在する。 受け取って処理する側が処理する内容(処理内容)がHandlerに記述されている。 受け取ったら何をどうするか。 今回はボタン押下されたら受け取ったらダウンロードする。 容量の大きい画像があるページ BITMAP画像作成時の注意点、rycycleが必要 □ProgressDialogの使い方 □この画像を解説せよ 非同期の分かりやすい説明 SQLiteを使用してみる SQLiteとはAndroid標準の軽量なDBライブラリ DB アダプターはSQLiteDBを簡単に扱うためのもの。 分かりやすくまとめられたサイト Andoridにはデータの保存方法として、以下の3つがある! 『Preferenceを利用する方法』 『ファイル出力する方法』 『SQLiteを利用する方法』 Androidアプリケーションで、データベース操作を行うには、「SQLiteDatabase」クラスを使用する。 そして、このSQLiteDatabaseクラスのインスタンスを取得するための手順を簡略化してくれるのが、「SQLiteOpenHelper」クラスだ。 データベースを使用するには、まずデータベースを保存するファイルを作成し、次にデータを格納するテーブルを定義し……といった準備が必要になる。 SQLiteOpenHelperクラスを使用することで、こうした煩わしい初期処理を自動化できる。 参考 SQLiteOpenHelperクラスの使い方を簡単に解説してある WindowsでのSQLiteの使用方法 DBを作る手順 ・DBのデータを保存するファイルを作成 ・データを格納するテーブルを定義 などなど SQLiteOpenHelperクラスを使用するとDBに初期処理を実行してくれる DB名(=DBを保持するファイル名) DBのバージョン テーブルの定義、初期データ投入処理の DBのバージョンアップ時の処理 DBのインスタンス自体はSQLiteDatabaseクラスで取得する。 DBへの操作はSQLiteDatabaseインスタンスのメソッドを使用する。 保存:insertメソッド 削除:deleteメソッド ※検索:検索結果のリスト化されたデータ:Cursorクラスのインスタンスを用いる sqlの基本機能 CRUD C:create R:read select(検索) U:update D:delete FFでSQLをGUIで使えるらしいけど、 androidとの連携はさすがにできないだろうから、 いったんandroidからのコピーを持ってきてそれを見るのだろう ContentProvider アプリ間でデータを共有したり利用する場合に使用する。 SQLiteは1つのアプリ内でのデータ管理。 連絡帳の情報の使い方 独自ContentProviderの作り方 androidでデバック中にdataフォルダの中身を見るのにハマる /data/data/アプリパッケージ名/ 以下がストレージなのですが、 ターミナルを使って cd で入ろうとすると、パーミッションでブロックされる。 "opendir failed, Permission denied" 参考 ファイルをローカルPCへpull取得する方法 結局下のようなエラーが出たまま解決に至らなかった・・・・ C:\pg\Development\Development\adt-bundle-windows-x86_64-20140702\sdk\platform-tools>adb -d shell shell@maguro:/ $ run-as com.example.matsuguma.myapplication run-as com.example.matsuguma.myapplication run-as: Package 'com.example.matsuguma.myapplication' is unknown コールバックメソッドの簡単例 onCreate()とか、その状態になったら呼び出されるメソッドをコールバックメソッドという。 あるきっかけ(イベントやトリガー、処理)があって呼び出されるメソッドのこと。 メソッドを定義しといたら、ある時に呼ばれるメソッドのこと。 プログラムが動かなくなったときの対処法 動いているときのソースがあれば、徹底的に差分を見てみる!! →事象:新しく配布されたソースファイルが動かなかった、バッチファイルの中身の差分を見てみるとプロキシの設定が異なっていた スピーチ 都構想の話 論点が見えていない。2重行政でも話が古い 笑:橋本がすきか嫌いかになりかけている。 現在の現場でも、要件定義の役割を担っているが、 ステークホルダー間での意見の食い違いが生じている。 話をまとめる難しさ nslookup DNSサーバへの問い合わせを行うコマンド nslookup IPアドレス →ドメイン名を返す nslookup ドメイン名 →IPアドレスを返す 問い合わせたサーバの domainとIPアドレスの対応票に存在しない場合は *** 「dnsサーバ名」 が a.b.c.co.jp を見つけられません: Non-existent domain と表示される。 範囲外のdomainの場合は、DNSサーバは他のDNSサーバに問い合わせて、その結果を返す。 look up:調べるの意味 コマンド出力内容の解説 参考: 経路探索 学 即効フィードバック法 →即効出力と訂正 頭だし芋づる法 クラスは処理を格納したツール箱 →あるクラスの××を使えば○○ができる 仕事とプライベートが一石二鳥になるように工夫する。 まずは相手をほめることからはじめる 「ありがとう」を探す。 ありがとうをためるゲーム すいませんといわせるゲーム。 バックスタックにつんでいるのはここのフラグメントではなく 処理の塊つまりトランザクション トランザクションの巻き戻しができる! 1つのトランザクション内で複数のフラグメントを出し入れ処理した場合、 その情報をバックスタックに入れておけば、バックボタンでそれらの処理を巻き戻すことが可能!! 積まれたときの状態 フラグメント説明定番 フラグメントからActivityにコールバックする方法 3つ目のメソッド ■where句で?とは ?はwhere句のカラム名に対応する値が変数(つまり動的)の場合に使用する。 書き方のイメージとしては、String.formatの%sの考え方に似ている。 ※あくまで書き方のイメージですけど 筋トレアプリ 筋トレさせて鍛える。 商品をうるのをアシストする W/OpenGLRenderer? Bitmap too large to be uploaded into a texture (4000x3000, max=2048x2048) □調査まだ 特定のファイル Unable to decode stream: java.io.FileNotFoundException: APKファイルの作成方法 作り方が端的にまとめられていて分かりやすい キーストアの意味とか 目的はストアに並んだアプリの証明するための保証書的な役割。証明書を保管するのにキーストアがあり、キーストアはキーで守られている。 作成したAPKファイルをインストールする方法は ・adb.exeを使用する方法 ・APKファイルを端末にコピペして、それをダブルクリックする方法 がある。 ■apkファイル作成時に登録した内容 keystorepass keypass ※masterパスワード 0290DZE Google検索:programaly install android Intentだけでよいのか、それともPackageManagerも使用するべきなのか? それとも、PackageManagerだけを使用すればよいのか →どうやらIntentだけでいけそうな予感。 →Intentのやり方はPackageManagerを包括的に使用している。 上記の検索結果のページからも実装できるが、下記のサイトも参考になる アプリからAPKをインストールする方法 ■ファイルのパス指定をまちがったら、”パッケージ解析中に問題が発生しました ”と怒こられたw □Android Studioの謎 今までエラーが出ていなかったところにエラーが表示されるようになった。 しかも、ビルドはfinishまでいける・・・・ なぜだろう・・・・とりあえず、後回し 15:39:40 Gradle build finished with 2 error(s) in 3 sec 野良アプリ自動インストール コマンドプロンプトからAPKファイルをインストール androidにおけるファイル階層が意味不明w □ファイル指定の仕方を学ぶ □ファイルとストリームの関係 intentでないやり方をするらしい!! 英語で検索するようにする!! サイエント、backGraundをキーワードに検索してみる ※ただし、英語検索は日本語検索で引っかからなかったときの場合でよい Google検索:android apk install from shell command install 有用な答え →ソース 答え? 自宅調べ Google検索:android silent install apk programmatically 結局は、コマンドラインをたたけばいけるのでしょ? 許可を与えて、コマンドラインをたたくのか? □確認画面を表示せずにインストール可能かどうか インストーラーの確認画面を出さずにインストールするためには、 >PackagetManagerのinstallPackage/deletePackageのAPIをリフレクションで呼ぶ必要があります。 □結局、誰なら.permission.INSTALL_PACKAGES.を使えるんだか? リフレクションとは? インストール確認のACTION_VIEWを自動選択することは出来なのか? インテントだが、一連の流れがキレイにまとまったサイト マーケット経由で自動更新できるか? コマンドから実行する権限を付与できない? ルート権限を与えてインストールする方法はかのう? □サンプルプログラムをインストールしたが、以下エラーが発生した。 下記エラーに関する調査 Caused by: java.lang.SecurityException: Neither user 10099 nor current process has android.permission.INSTALL_PACKAGES → →マニフェスト内のuses-permission android:name="android.permission.INSTALL_PACKAGES"の記述を確認。 マニフェストにエラーが出てたので、エラーを消す:「Permission is only granted to system app」で検索 Google検索:「java.lang.SecurityException android.permission.INSTALL_PACKAGE 」 解決に至らず permission treeを使用する? システムキーでアプリが証明されている必要がある??? アプリをadbでインストールする先 インストール完了したけど、/data/local/tmp/app-release.apkこれどこやねん!!! 出力内容: 1289 KB/s (988274 bytes in 0.748s) pkg: /data/local/tmp/app-release.apk Success 実行形式のファイルを置く場所? □疑問その2 system/app内に入っているapkファイルとかはなんなんだろう。。 結論としてはroot権限が必要、なので、 コマンドをたたくことにした でも、エラーが java.io.IOException: Error running exec(). Command: [su, -c, pm install -r /storage/emulated/0/matsuguma/app-release.apk] Working Directory: null Environment: null →とりあえず、をつけてみた。 日本語サイト システムアプリにする必要がある。 権限が 週末課題 □ActivityManagerでなにができると思います? □内線番号の下 8361に変更する メモまとめ □出口さんに打診メールを出す。 □リンクまとめ □アプリからコマンドプロンプトを使ってみる。 □システムアプリを作ってみる。 □そもそも権限とは?目的は? ■2015年5月15日金曜日 Android StudioのRunウインドウに表示されている内容の解析から。 Waiting for device. Target device: asus-nexus_7-015d49060838000f Uploading file local path: C:\Users\matsuguma\AndroidStudioProjects\UseCommandApp\app\build\outputs\apk\app-debug.apk →インストールファイルがある場所(PC) remote path: /data/local/tmp/com.example.matsuguma.usecommandapp →インストール先(アンドロイド端末)のファイルパス Installing com.example.matsuguma.usecommandapp DEVICE SHELL COMMAND: pm install -r "/data/local/tmp/com.example.matsuguma.usecommandapp" pkg: /data/local/tmp/com.example.matsuguma.usecommandapp Success Launching application: com.example.matsuguma.usecommandapp/com.example.matsuguma.usecommandapp.MainActivity. DEVICE SHELL COMMAND: am start -n "com.example.matsuguma.usecommandapp/com.example.matsuguma.usecommandapp.MainActivity" -a android.intent.action.MAIN -c android.intent.category.LAUNCHER Starting: Intent { act=android.intent.action.MAIN cat=[android.intent.category.LAUNCHER] cmp=com.example.matsuguma.usecommandapp/.MainActivity } 検索ワードを変更してみた Google検索:「android Runtime.getRuntime()」 ここのやり方でコマンドを実行できた!!! ポイントは/system/binのパスを記入することが必要だった!! 以前に発生していた次のエラーはコマンドのパスが通っていないことが原因だった。 エラー内容: java.io.IOException: Error running exec(). Command: [×××× ] Working Directory: null Environment: null しかし/system/bin内にはsuファイルは存在しないようだ・・・ Google検索:「android where is su located] 英語検索の威力すげえ!! 例: Google検索:「where is android logfile」 Google検索:「where is traces.txt android」 ログファイルの作成される場所を調べることから。 ■プログラムが例外を吐くこととコマンドを実行した結果が不正であることは別物! コマンドを実行したときの結果が不正でもlogcatには出力されない!! →当然といえば当然だわ・・・・馬鹿だわ・・・・ →process.getErrorStream()でエラー内容を見るようにしました。 PCとAndroid端末を接続して、pcからshellのpmコマンドでインストールを実行すると成功する・・・ しかし、アプリから実行したときは失敗してしまう。なぜだろうか? adb shell実行後にpm install -r /sdcard/matsuguma/app-release.apkを実行すると 下記のように成功する。 成功例: shell@grouper:/ $ pm install -r /sdcard/matsuguma/app-release.apk pm install -r /sdcard/matsuguma/app-release.apk pkg: /sdcard/matsuguma/app-release.apk Success ■Androidの体内は・・・ SHELLコマンドが使えるということは、Androidは内部ではLinux系です。 □そもそもAndroid端末でコマンドプロンプトを起動することは可能か? →ぱっと検索した結果ではなさそう。 →標準コマンドプロンプトは存在しないのでAndroid Terminal Emulatorをインストールしてみて、 pm install コマンドを実行したがkilledエラー?が発生してインストールされなかった。 現象 →root権限がないと実行できない模様・・・・でも、suになれないし・・・ 今回実行を実験したコマンド軍 commandArray = new String[]{"/system/bin/pm", "install", "-r"}; commandArray = new String[]{"/system/bin/adb", "shell", "pm", "install", "-r"}; commandArray = new String[]{"/system/bin/pm", "install", "-r"}; tcpip 5038 →5555に変更 ■PC側で adb tcpip 5555 → これは必ずUSB経由でないと実行できない ■端末側で adb connect 127.0.0.1:5555 adb devices ※再起動するとTCPを設定しなおす必要があり、実用的でない。 毎回、USBをさして設定しなおす必要がある。 保存することもできるがどうも危険、というかこのやり方自体危険? Google検索:「adb tcpip save restart」 調査に使用したサイト 自分自身をadb接続してlogcatを見てみる 内部から自身へのadb接続 Androidデバイスがunauthorizedで認識されない場合の対処法 ?? 2015年5月18日月曜日 Android GitHubの使い方をマスターする 定時退社 TOEICべんきょう 役員の方々の出席の可否を確認いただけますでしょうか? □オープン価格とは? PDFlib ■PDFlibとは? →PDFlib は、プログラムから PDF の生成を可能にするライブラリです。 →無償評価可能 → 上記の本家よりも、製品による違いやpdflibでできること分かりやすく解説されている → インストール手順 ■ダウンロードに関して ダウンロードページ 実際にダウンロードしたもの 言語バインディング(環境構築みないなもん)はマニュアルを見た。 PDFファイル作成の基本が学べるサイト ■pdflibを用いてHTMLからPDFに変換可能か調査 Google検索:「pdflib pdf html to pdf java」 →PDFlib で PDF ファイルを作成する場合、PDF に白紙の新規ページを追加し、その上に座標を指定しながら線や文字などを全て手動で書いていく必要があります。 →HTMLからPDFファイルに変換には不向き? 先に出た 上記の本家よりも、製品による違いやpdflibでできること分かりやすく解説されているを見る限りでは、できなさそう。 むしろ、それを行うのは他のソフトとの記載もあり。 ■その他: 代理店サイト・・・ではないけどまとまっている?インフォテック?どこの会社やら、まぁ、本質でないしいいとしますか。 日本の代理店はスタイルテックって会社 スタイルテック →代理店サイトはきれいにまとまっている!!こちらからもDLにたどりつける。けど、結局は本家のところにたどり着く。 ■初めて知った「へ~」なこと 印刷用にCSSを設けることができる □serialVersionUIDの意味 □PDF入門 □ 2015年5月19日火曜日 ひとみ休日 定時退社 ■BIPの復習 →データ定義においてBREAKを設定したデータに変化が生じた場合は伝票を切り替えることが可能のようだ。 例:これを利用すると伝票番号が変われば次のページの帳票を作成したりできる。 □PDFを作成する上でパスの変更を見たくてcの中に作成したフォルダとか 散らかしたファイルたちを整理整頓することから クラスパスとかもチェック →整理後、サンプルプログラムを動かしてみる。 ■ある観pushの仕方まとめる □PCの速度アップ □セキュチェック ■Gradleを作成している段階でエラーが 次のようなエラーが発生したら、プロキシの設定が不正であることが原因っぽい。 なので、[File]-[Settings]でプロキシの設定をした後に、 [Invlidate Caches / Restart]を実行して一度情報をクリアし再起動することで、 グラドルをつくり直す。 ※[Invlidate Caches / Restart]を実施しないとグラドルはつくり直されないみたい! 参考まで 【エラー内容】: Enable Gradle 'offline mode' and sync project. unknown host jcenter.binary.com →グラドルのオフラインモードを有効にした後に、プロジェクトと同期しろ!! jcenter.binary.com こんなホストしらんがな! 上記のエラーを解消したらsdkが存在しないと怒られた! →Instal missing platform(s) and sync project. →ないプラットフォーム入れてから同期しろ! □都道府県を返却するAPIを探す。 □学んだこと!!! 実現可能か不可能化はまずは、マニュアルやチュートリアルを見てから判断する。 次に、裏づけとしてコミュニティサイトや個人のサイトの意見を参考する。 当然といえば当然だが、できていなかった。 pdf ジェネレータ 何ができる? →サーバサイトで、Postscript (PS) からPDFを生成するソフトウェアである。 →PSファイル以外からでも変換できる →Acrobat Distiller Server(PSをPDFに変換するCUIツール。既に販売終了している)と Acrobat Elements Serverの後継製品で特に後者の色合いが強い製品である。 PSに関して面白い記事 □正式名称 Adobe LiveCycle PDF Generator livecycle LiveCycle trial downloads ■チュートリアル:LiveCycle ES2 PDF Generator Tutorial ・Generate PDF サービスはさまざまなファイルタイプをPDFドキュメントに変換します。との記述あり。 ・HTMLFIleToPDFを使うとHTMLファイルをPDFファイルに変換可能との記述あり。 ・HTMLFIleToPDFはHTMLファイルをPDFに変換します。との記述あり。 ・ユーザーまたはクライアントアプリケーションが、監視フォルダ内にPDF に変換するファイルを配置します。 サービスのAPI を使用して、監視フォルダにファイルを配置するクライアントアプリケーションを作成することもできます。との記述あり。 ・Adobe PDF プリンタがデフォルトとして設定されていない場合、PDF Generator ES2 ではファイルを正常に変換できません。との記述あり。 ■インストールチュートリアル □Acrobatとの違いは? →AcrobatはPDF Generatorを内包している。 Adobe検索サイトページより → PDF Generatorはサーバサイトで動くもの、Acrobatはデスクトップで動くものらしい。 サーバーで動くもののためか、サーバと抱き合わせて売られうコトも・・ □最新のバージョンはどれか? PDF Generatorが発表されたときの記事 htmlをpdfに変換、公式ページの見解 →眠い。CSSの記述は無いかも。 PDF Generator の設定が書かれている プロキシサーバに特定のポートを Generate PDF サービス 自習: ■Android StudioでGitHubを使う上での基本操作がまとまっているサイト、差分比較とか →サーバの更新した内容との差分を確認する方法は、いったんローカルを更新した後に、 下部のVersion ControlビューのUpdate Project Infoタブの内容でソース上で「Ctrl+D」で比較する。 または、GitHubのWeb上でみてみる。 □HTMLファイルをPDFファイルに変換できる、java組み込み系のソフトを探す。 →ライブラリを探してみました。 pdf generator.jar Google検索:「pdf generator.jar」 入門みたいなサイト TCPDF → 「Java」 html ファイルを pdf ファイルに変換する jtidyは構文チェッカー htmlからPDFに変換できるもの一覧 2015年5月20日水曜日 □定時退社 17:15退社 18:00帰宅、へやのそうじ、飯 19:00TOEIC勉強 20:00勉強会復習 22:00寝る □Android SDK Build-tools 22.0.1を導入した後にプロジェクトをビルドしてみて、 エラーが消えることを確認する ■プロキシ経由でもgithubを使えるようにする。 結論!意外に簡単だった!!プロキシを設定してあげればよいだけ!! gitのプロキシ設定はAndroid Studioのプロキシ設定とはべ別物と言うことなのね! $ git config --global http.proxy http://proxy.example.com:8080 $ git config --global https.proxy http://proxy.example.com:8080 Google検索:「git hub プロキシ経由」 □GitHubから落としてきただけでは imigrateエラーが発生していた。 以下で解決してた。 1 Close your project 2 Back up your project 3 Delete the .idea folder in the root directory of the project 4 Delete all the .iml files in your project 5 Import your project in Android Studio, and in the dialog that prompts you for a file, choose the build.gradle file. グラドルフォルダが作成されていないのが原因だった。しかし、何で作成されないのだろうか? GitHubにおいてあるのはAndroid Studioで作成しただろう物なのに・・・ エラーについてグーグルの見解 □そもそも.ideaファイルとは? □そもそも、.imlファイルとは? ■はまる!! AndroidManifest.xmlパッケージとjavaのパッケージは異なる!! エラー内容: android.content.ActivityNotFoundException: Unable to find explicit activity class {wt.walk_tourist.settings/TouristSpotActivity}; have you declared this activity in your AndroidManifest.xml? 実装例: Intent intent = new Intent(); // ここで設定するパッケージ名(wt.walk_tourist)はAvdroidManifest.xmlで設定しているアプリケーションのパッケージ名であることに注意!! intent.setClassName("wt.walk_tourist","wt.walk_tourist.settings.TouristSpotActivity"); startActivity(intent); 2015年5月21日 □定時退社 17:15退社 18:00帰宅、へやのそうじ、飯 19:00TOEIC勉強 22:00寝る 締め切りを設けて作業に取り組む 反省点:途中でおきてしまった。 眠る環境を整える、おなかをすかす 朝はマイナス思考になりやすい ■はまったこと 以下の【実装1】の場合は、 v.findViewById(R.id.settings_tourist_spot_fragment_main_layout).setVisibility(View.VISIBLE); として表示するように実装しても、リストビューが表示されなかった!! 【実装2】とした場合は表示される。 IDを割り当てるレイアウトが関係しているのかも知れない。 【実装1】 【実装2】 ■はまったこと 標準のバックキーを押下すると、アクティビティ自体が終了してしまう・・・・ →バックキーを押したときは現在表示中のフラグメントを閉じて、アクティビティは閉じないようにしたい。 →ActionBarActivityをActivityに変更すると正常に動作した!! ※上記の二つのハマリは正常に動いていたプロジェクトの比較をすることで解決に至った! 正常に動いていたものと比較することの大切さを改めて実感した! □場所詳細のフラグメントを作成するところから、 また、フラグメント間のデータの引き回しの実装方法を調べることから。 →簡単にできんのかな?いったんActivityを中継したりするのかな? バンドルとか使えんのかな? □メールの返信を返す 今までの市場反響よりも手ごたえがあったみたいです。 →なぜ反応に手ごたえがあったのか考える →または調べる 「勉強」っていう、必要性の高いコトに関する便利商品 だから、口コミしたくなるのかな。 →口コミしたくなる理由を考える。 口コミをしたくなるものは感情を揺さぶるもの 口コミというのは、「一言で言うと、サプライズ」 自分が体験して、感動した事や、驚いた事など人に話したくなる事を言います。 ちょっとむずかしいかな 人が感動する仕組みを考えよう。日常に取り入れよう。 ・まずはギャップかな!!意外性!! →では何で意外性で感動する? →いがいなつながりに脳が興奮する? > ■掲載メディア:5件 > > ・ITmedia PC USER > ぺんてる、スマホ対応蛍光ペン「アンキスナップ」がPFU製「SnapLite」に対 > 応 > > ・RBB TODAY > ぺんてるの暗記アプリ「アンキスナップ」、PFUのスキャナ照明「SnapLite」と > 連携 > ・カワコレメディア > 受験生に朗報!あの暗記アプリ「アンキスナップ」が「SnapLite」と連携! > ・PR Times > 蛍光ペンでマークしてスマホで覚えるアプリ「アンキスナップ」がPFU「SnapLite」 > と連携 > ・家電Watch > テキストをキレイに取り込んで効率的に暗記できるライトとペン 今どきのJavaのPDFライブラリ まとめ (2014年版) faceBook ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ 2015年5月 ジェスチャーアプリとの連携を図る ○○との連携 手話会話をできるようにする。 手話アプリ 手で会話 □Merge vs Rebase vs Branch Default 自分がコミットしていない、ローカルの変更をどのように取り扱うかが異なる。 おそらく以下の仕様である。 Mergeは上書き?または、手マージ? rebaseはまったく新しく作る branch defaultは変更したものはそのままにしておく →一度わざとコンフリクトを起こしてみて検証してみる必要がありそうだ。 池田さん田口さんのゆるきゃらを作る。 アプリでhtmlをpdfに変換する機会はないだろうか? □なぜcopperは違うものだと思ったのか、 ドライバの意味を取り間違っていた。 →くやしいぃ~!!ちゃんと査読すべきだった サーバをたてて、クライアントはその機能をドライバを経由して利用する。 →どうして違うものだと判断してしまったのか →資料を見ているうちにWEBサービスと勘違いしてしまった。 →う~くやしいけど、まぁ、候補に挙げれただけましだろ!!少なくとも焼くには立てた。 →使えると分かって読み解くと、理解できる不思議・・・そういうものなのか。。。 →次回は慎重に読むようにしよう。そもそも、参考にしたサイトではできるとしているのだから、それを信じて慎重に読み解くべきであった。 →真実を歪んで解釈してしまった。 →この調子だとPDFLibでも変換できたのではという、懸念を抱かれかねない。 →まぁ、他のことで穴埋めするか。 まずは手人形をつくることからかな。 改善を考えるとしたら。 ノートをペンだらけにしたくない。 単語帳を作る操作をカメラに覚えさせて、 アプリに実行させる。 5W1Hをシームレスにつなぐ。 5W2H ゾンビ写真 もしも写真 ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ Android リストビューのはまりポイント ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ // 撮影ポイントであれば、カメラアイコンを表示する if (item.isCameraImageFlag()) { viewholder.cameraImage.setImageResource(R.drawable.camera); viewholder.cameraImage.setVisibility(ImageView.VISIBLE); } else { // ★ここをちゃんと書く!!★ viewholder.cameraImage.setImageResource(R.drawable.doll); viewholder.cameraImage.setVisibility(ImageView.GONE); } 上記のソースにおいて、 elseで明示的に画像の取り扱いを指定してあげないと、 リストビューの仕様なのか、意図しない(画像が表示されたり)動作をしてしまう!!! →ちゃんとelseのときの動作も指定してやる!! →仕様だから原因の特定に時間を費やした(一時間ばっかし)。 →試行錯誤的にelseのときに画像を指定したら、なんとなく原因の特定にたどり着けた・・・ キオスクアプリに関して、 画像がちらついてしまうやつは エミュレータを再起動したら直った・・・・なぜだ・・・ 今週日曜日はスナップライトの使い方を研究する →土曜日、携帯電話を買い換える →少なくともお店に言って話だけでも聞く。 →または、検証用端末として購入を検討する →安ければの話だけど。 今週のご褒美を設定する。 →ランチ? □Windows virtual PCに関して、 起動時に統合環境の起動に失敗した場合は、 作業しているとブルー画面が表示されることがある。 →統合環境の構築失敗が原因なのかもしれない →対策として、Virtual PCをシャットダウンし、 起動しなおし、統合環境の起動を成功させる。 ■HTMLはまった! positon:relativeの基準となる点は指定をしなかったときに配置される位置である。 参考 ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ 2015年5月27日水曜日 □ブラウザ整理 □PC高速化 →デフラグ →無駄なサービス停止 →ガジェット利用 ■Gitのmaergeについて学習 Gitはバージョン管理ツール ソースに変更を加える →自分が →他の人が →両方が 変更した部分が重なる場合と重ならない場合がある。 →重ならないなら問題ないが、重なった場合、競合が発生する。 Rebaseと逆マージの違いが書かれている Rebaseはメインブランチをbaseになるように引きなおすこと。 引きなおすと、自分の変更した分だけマージすればよいようになる!! AdSense □地図アプリ使ってみる →eclipseプロジェクトをインポートしたらコメントが文字化けした。 不足しているAPIなどをインストールした後にインポートしなおしたら、 文字化けが消えた。 そもそもこれの仕様はどのようになっているのだろうか →テキストフィールドに目的地を入力して、検索ボタンをおすと、 目的地にピンが刺される ルート決定を押すとルートの編集ができなくなり、完了する □現在なぜか地図が一切表示されない □コマンドプロンプトをつかわなきゃならないのか? キーを確認するだけなのにばかばかしい。他のインタフェースはないのか? そもそも何でそこに保持されているのやら。 鍵は何単位であるのだろうか? プロジェクト? 統合環境? Android端末? 開発マシン? □集中力ゲーム 邪魔が入るけど 数を数えたり 足し算を行う ストップウォッチ このサイトとても見やすい これはどうやって作られているのか どうしてこういう考えにいたったのか 自分が作るとしたら 自分が行っていることがより効率的になるのでは? マーカ引くのがめんどくさい →指で識別 JSONの基礎 Android端末とサーバのデータのやり取りでJSONデータをやりとりするとしたら、 どのクラスを使い実装するのが効率的なのか? □Androidのadbの場所を見つけて、パスを通して、コマンドラインからすいすい使えるようにする 見てるだけですごいと感じるサイト □一気に重たいのきたら、困る・・・ □パッケージ名とはなんですか? エクスプローラとの対応は? どちらで確認できますか? 設定できますか? □とりあえず、エラーが出てきてわけが分からなくなったので、 まずはサンプルプログラムを動かすことから始まるほうが自分のためになりそうだ。 エラー内容: android またはボリューム ラベルの構文が間違ってます的な ファイルを探したが、そんなファイルは無かった。何で無いのw マニフェストの設定内容の意味が書いてある キーを発行する場所 ■ハッシュ関数とは keyを与えたら、その番地の中身を答えてくれるような関数中身のことをハッシュ値という。何か値を引数として渡したら、計算結果(ハッシュ値)を返す関数。key値 →ハッシュ関数 →ハッシュ値デジタル署名において、秘密鍵はハッシュ関数を指している? →違います!! →こちらをごらんあれ!! →これを見て面白いと感じたことは、秘密鍵(署名鍵)で暗号化したものを、公開鍵で復号するところである!! →最初は秘密鍵で暗号したものが、公開鍵で暗号化できることに、すごく違和感を感じたけど、そんなものなんだろう!! →なーんか、しっくりこないんだよね~~!! 【ぷちっとまとめ】 送信側が受信者の公開鍵を持っていて、暗号化されたものを送っても、 受信者はそれだけでは、完璧とは言えない!! なぜならば、送られてきたものが意図した人からかどうかわからないからだ。 そこで必要なのが、デジタル署名である □サイトを見ていて、証明書を登録することがあるが、 あれは何のためだろうか? 原文 →秘密鍵 →暗号文おそらくフィンガープリント=デジタル署名ということなんでしょう。→フィンガープリントとは原文をハッシュ関数に通して得た、ハッシュ値のこと。 なので実際、証明書のフィンガープリントといった言い方をする。 大疑問 このフィンガープリントを使ってgoogle API keyを作成しているけど, どういったことなのだろう? そもそも、この場合誰が送信者で誰が受信者で何をやり取りしているのだろう? 証明書は何に当たるのだろうか? 開発環境一つにつき、一つの秘密鍵がある 秘密鍵で捺印を作る その捺印は秘密鍵があれば作ることが可能。 →逆に、秘密鍵がなければ作ることが困難。 開発環境で作った署名を登録する。 【まとめ】フィンガープリントは秘密鍵で作られたもの。 これと同じものを作るには同じ秘密鍵を持つしかない。 つまり本人でないとつくれない。原文 →本人 →暗号 原文 →ハッシュ関数 →暗号 原文 →秘密鍵 →暗号 本人(ハッシュ関数、秘密鍵)でないと、その暗号は作れない。 ハッシュ関数は暗号化とは違うぞ!!! 秘密鍵と公開鍵の南京錠のたとえ、でも実は微妙かも □ここで言っている鍵とapkの鍵は別物か? →デバッグ用とリリースAPK作成用では作成方法が異なります。 □手順★ http://note.chiebukuro.yahoo.co.jp/detail/n237584 ★時間があったら、フィンガープリントやハッシュ関数、認証の仕組みについて勉強してください。 androidに関係する認証をべんきょうする どういうものがあるのか、何の目的でその認証があるのか ■windowsの環境変数のpathとPATHの違い →ないっす!! →実際にどちらに定義しても、パスが通ることを、コマンドプロンプトとかで試してみた!! □作成したAndroidアプリを公開する。 →作成手順を公開する □カレンダーアプリを作成するかな →案件でもカレンダー使いそうだし □ハウツー本をアプリ化してみよう!! □結局どのように使えばいいのやら、 javaプログラムが動くタイミングはどこか? どこから始まるのか? コマンドプロンプトだと、コマンドを入力してエンターを押したタイミング ブラウザであれば、ブラウザに入力して、エンターを押したタイミング JAVAプログラムであれば、 □デバイス登録はデバイスを同時に複数登録できるようにする ■コマンドプロンプトで学習したことはまったこと →javaファイルを実行しようとしてNoClassDefFoundErrorが発生した!! 原因は-cp(-classpath)の引数で渡しているクラスのパスに誤りがあったため。 今回はクラスのパスを変数として渡していた。 変数の設定は set 変数名=[文字列] パスの指定ミスは原因の特定に時間がかかる。 対策として、設定したら即座に以下のコマンドを実行して、パスが正しいかチェックする echo %変数名% ■コンパイル実行 F:\work\PDBS\CopperPDF\copper-pdf-3_1_1\CopperPDF>javac -cp ./;%LIB_DIR%\* DirectJava.java ■プログラム実行 F:\work\PDBS\CopperPDF\copper-pdf-3_1_1\CopperPDF>java -cp ./;%LIB_DIR%\*; -Djp .cssj.copper.config=%CONFIG_DIR% -Djp.cssj.driver.default=%DEFAULT_FILE% DirectJ ava ダウンロードしたフォルダ内のmanual.pdfの 「3.8.9 Copper PDFのライブラリに直接アクセスする」を元に実装を進めたが、 プロキシを経由するとエラーが発生した。 プロキシを経由しないとPDFファイルが作成される。 検証内容 ・外部の線につなぎ生成されることを確認。 ・プロキシが適応されない社内ページが生成されることを確認。 対策として行ったこと、 ・「3.16.2 プロクシの設定」の手順どおりにプロキシを設定。 ・「無料版の制約」にて、プロキシの条件を確認。 残りの対策 ・最新のドキュメントで確認する ・at org.apache.http.impl.conn.SystemDefaultDnsResolver.resolve(SystemDefaultDnsResolver.java:45)を調べてみる。 →Stackflowの見解 →プロキシの細かい設定 ・Windows環境ではDNSの設定よりもhostsファイルの設定が優先されるので、ここにIPアドレスとホスト名を明示的に記載してみる。 エラー内容: Caused by: java.net.UnknownHostException: www.yahoo.co.jp at java.net.Inet6AddressImpl.lookupAllHostAddr(Native Method) at java.net.InetAddress$2.lookupAllHostAddr(Unknown Source) at java.net.InetAddress.getAddressesFromNameService(Unknown Source) at java.net.InetAddress.getAllByName0(Unknown Source) at java.net.InetAddress.getAllByName(Unknown Source) at java.net.InetAddress.getAllByName(Unknown Source) at org.apache.http.impl.conn.SystemDefaultDnsResolver.resolve(SystemDefa ultDnsResolver.java:45) おまけ: F:\work\PDBS\CopperPDF\copper-pdf-3_1_1\CopperPDF>echo %COPPER_DIR% "F:\work\PDBS\CopperPDF\copper-pdf-3_1_1\CopperPDF" F:\work\PDBS\CopperPDF\copper-pdf-3_1_1\CopperPDF>echo %CONFIG_DIR% ""F:\work\PDBS\CopperPDF\copper-pdf-3_1_1\CopperPDF"\conf" F:\work\PDBS\CopperPDF\copper-pdf-3_1_1\CopperPDF>echo %DEFAULT_FILE% ""F:\work\PDBS\CopperPDF\copper-pdf-3_1_1\CopperPDF"\conf\profiles\default.prope rties" F:\work\PDBS\CopperPDF\copper-pdf-3_1_1\CopperPDF>echo %LIB_DIR% ""F:\work\PDBS\CopperPDF\copper-pdf-3_1_1\CopperPDF"\lib" Copper PDFは本来クラサバ構成で使用する ただ、クライアントとサーバは同一サーバ内にいても問題ない。 原因: 体験版ではプロキシサーバを経由した変換を不可能との返答を受け取りました。 ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ □hostsファイル hostsファイルのパス-WIN7 C:\Windows\System32\drivers\etc\hosts 実験してみよう!! hostsファイルに183.79.198.79 www.google.co.jpを追加してi ipconfig /flushdnsを実行して、以下の2つを確認しよう。 ①ipconfig /displaydnsで内容が反映されていること。 ②yahooのIPでgoogleにアクセスしてしまうこと。 フラッシュするの意味 サーバを立てる サクラサーバを検討 □サクラの上でjavaアプリケーションは動作可能か? Google検索:「サクラサーバ tomcat」 さくらのVPSならつかるかも サーバサイドの基本が学べそうなサイト 広告でお金もうけするならアドセンス アドセンス、セキュリティ関連へのリンク セキュリティ設定 鍵生成の手順 テーブル ユーザ情報テーブル ユーザーID、ニックネーム、パスワード、住所、更新日 ユーザポイントテーブル ユーザID、ポイント ユーザゲームテーブル ユーザ観光地テーブル ユーザID、観光地ID 観光地情報マスタテーブル 観光地ID、観光地名、観光地住所 観光地カメラテーブル 観光地ID、撮影フラグ ゲームテーブル ゲームID、ゲーム名 ユーザーID →ユーザ識別 ■技術調査の手順 例:システムを開発する際に、そのシステムを実現できそうな技術が 複数ある場合にどれを選ぶかを判断する手順は以下である。 ①システムの要件を洗い出す →表の行の項目とする!! ②実現できそうな技術を洗い出す →表の列の項目とする!! ③②の技術のドキュメントやWEBを参照しながら①の項目を埋めていく。 →その際に、実現可能・不可能と判断する際に参照したところを明記しておく。 →※つまり根拠となる部分を明記すること!!! →表の項目を埋める際は、何を埋めるべきかちょっと考える。 →可能・不可能を記述すべきであれば、○、×を記述し、 その理由は別途他の部分に注釈として記述するなどの工夫をする。 ■PHP入門 何ができるか? サーバサイト側で動くスクリプト言語 何の略か? PHPの正式名称はPHP: Hypertext Preprocessor php →Personal Home Page JAVAによるAPサーバとのちがいは? ソースの書き方は?言語の比較 サーバの選定 要件: ・DB使用可能 →MySQLで検討中 ・スペックの拡張性あり →自宅サーバでなくレンタルサーバを検討中 ・商用利用可能 ・プログラム実行可能 サーバ構成としては ①Apache+tomcatまたは②Apache+PHPを検討中 ①の場合root権限が必要 →②の方が構築が簡単、②で検討中 ■その他 保守性と拡張性から、有料サイトで検討中 ただ、最初は無償のもので環境構築の練習を行う予定 ■目星 ・検討中のサーバ サクラレンタルサーバ root権限 レンタルサーバ 価格.com ■皆さんの貴重なご意見よろしくお願いいたします どこのサーバがいいとか、 サーバの構築方法とか (´;ω;`) ■サーバ上のソース管理はMavenで行う →Mavenインストール →今回はPHPでの開発が主になる想定 →Mavenを使用しなくてもGitHubで管理できそう? 今回の開発の範囲 ①Androidアプリの開発 ②サーバ処理の開発 ①、②はそれぞれ別々に開発する。 ソース管理はどうするか? mavenでソース管理する場合 □ライブラリ使ってみる ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ ■Aspose.Pdf for Javaを使用してみる。 ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ Aspose日本サイト Aspose体験版 Com.aspose.pdf →DOMApi Aspose.Pdf Com.aspose.pdf.facades これら三種類のちがいは? Com.で始まるものもライブラリとして使用可能か? →なぜ別々に分けられているのか? ここを元に進めました。 HtmlLoadOptionsクラスを使用することでhtmlファイルのロード及びPDFとして保存ができる。 ダウンロードしたものの中は何か。 何が実行する上で必要か。 aspose-pdf-java\examples\ReadMe.txt 内の手順に沿ってサンプルコードをダウンロード ダウンロードはaspose-pdf-java\examples\Start.batから起動したダッシュボードアプリを利用して行う。 ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ ■GroupDocs.Conversion for Javaを使用してみる。 ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ GroupDocs体験版 GroupDocs 体験版ダウンロード 体験版では一部の機能に制限あり http://groupdocs.com/docs/display/conversionjava/Evaluation+Version+Limitations ・3ページまでしか処理できない。 ・トライアルバッチが表示される。 結局どういう形式で使用すればよいのか? トリガーは? 入力は? 出力は? UIは? サンプル動かしてみては? →サンプルのソースをエクリプスで動作させてみる ■■■■■■■■■■■■■■■■■■■■ HTMLからPDFに変換した手順 ■■■■■■■■■■■■■■■■■■■■ こちらのサイトの手順に沿って実施 補足して、ダウンロードしたサンプルプログラムの中のREADME.mdファイルの手順を参照 ①ライブラリをmavenのローカルリポジトリにインストールする □Mavenとは何か? ■Mavenインストール方法★ ■Mavenの背景・基礎が分かりやすいサイト サンプルプログラムの動作確認 内容 (1)ローカルサーバでのライブラリの使用方法 (2)いろんなファイルフォーマットのファイルをPDFファイルまたは画像ファイルに変換する方法 (3)複数のドキュメントを1つのPDFファイルにマージする方法 サンプルコードをダウンロードした後にeclipseと連携をさせるために、 Mavenの設定を行った。 設定時にMaven Configuration Problemエラーが発生した。 対応策 対処:次のように設定することで解決した。 ウインドウ-設定-Maven-ユーザ設定: 【変更前】 C:\Users\matsuguma\.m2\settings.xml 【変更後】 F:\work\PDBS\GroupDocs.Conversion_java\apache-maven-3.3.3-bin\apache-maven-3.3.3\conf\settings.xml おまけ:変なものをインストールしたら、これで削除するらしい F:\work\PDBS\GroupDocs.Conversion_java\repository>for /r %i in (*.lastUpdated) d o del %i サンプルコード実行 (1)ローカルサーバでのライブラリの使用方法 →OK (2)いろんなファイルフォーマットのファイルをPDFファイルまたは画像ファイルに変換する方法 →OK →一部画像やタブについてエラーが表示されているが。 →URL指定したHTMLファイルの変換確認 →プロキシを通してHTML変換 確認 →BASIC認証サイトのHTMLを変換 未確認 →プロパティが設定できるか不明 (3)複数のドキュメントを1つのPDFファイルにマージする方法 →OK mavenプロジェクトから普通のプロジェクトへ変換して配布 必要最小限の部分だけ抽出する。 JVMのSystemパラメータの使い方 ■System.getProperty("user.dir")でカレントディレクトリ(プロジェクトの位置)が取得できる ■プロキシの設定 System.setProperty("http.proxyHost", "proxy.bar.com"); System.setProperty("http.proxyPort", "8080"); System.setProperty("http.nonProxyHosts", "localhost|*.internal.com"); ■ベーシック認証 PDFファイルについて □賞、節、段落の違いは?セクションは? 章 chapter 節 section 段落 paragraph ■日本語フォントが扱えることと、日本語が扱えるのでは意味が違う? エンコードとフォントの違い言えますか? フォントは文字の見え方。 Google検索:「エンコード フォント」 フォントを埋め込む ■PDFのプロパティとは? プロパティとは?プロパティの確認方法 PDFファイルのプロパティ=PDFファイルのメタデータ=PDFファイル自体の情報=PDFファイルがもっている情報 □bookmarksとはどのような機能か? bookmark=しおりです。 「しおり」は、PDF文書内へのブックマークで、クリックすれば該当ページが表示される便利なリンク機能です。 HTMLファイルについて ■DOMとは? document Object Modeldの略でHTMLやXML文書を取り扱うための方法を提供する仕組み。 参考: POM(Project Object Mondel)はmavenで使われている、プロジェクトを取り扱うための仕組み。 LINUX環境について知ったこと □WASとは? WebSphere Application Server (ウェブスフィア・アプリケーション・サーバー、WAS、ワズ)は、 IBMが開発・販売する、Java EE対応のAPサーバ(ミドルウェア)であり、 IBMソフトウェアのWebSphereブランドの中核をなす製品でもある。 →JavaEE対応ってことは、サーバ上でjavaアプリを動かせってことだよね。 サーバとは サーバとは処理の依頼を受けて処理の結果を返すサービスまたはシステムのこと。 サービスもサーバとして考えられることが味噌。 →サーバ=1つの筐体を想像しているとそういう考えに至らない・・・ ある処理があるとすると、 その処理をサーバで処理するか、ライブラリ単体で処理するかは たとで処理が同一のマシン内で行われるとしても大きな違いとなる。 なぜなら、サーバとして処理する場合はサーバのプロセスが必要となる。 その分、資源を消費することになる。 ライブラリだと処理をするプロセスが一貫している。 サーバを同一のマシン内で起動するにしても、常駐させる必要などがあり、 単一のライブラリで処理することとは異なる。 ■catとviの使い分け →catはファイルの中身を一画面分表示するコマンド →viはテキストエディタのコマンド プロジェクト ■war デプロイとは warとはWeb Application Resourcesの略でWEBアプリケーションのプロジェクトを固めたもの。 deploy 配備するとか、展開するの意味。 つまり「warデプロイ」とは warファイルを配備、展開してwebアプケーションがつかる状態にすること。 デプロイとは使える状態にすること。 だから、その過程でビルドとかをすることもある。 ■mvn install:intall-fileの意味 →サードパーティのJarをインストールする □環境構築 実行環境はTomcat □サーバのエラーを日常に落とし込もう やったこと。 ■Apacheを再起動すれば直るんじゃね? →直らなかった。 pom.xmlファイルに新たに追加したライブラリの記述を追記した際に、 エクリプスの設定ファイルorg.eclipse.wst.common.componentが書き換えられて、 その影響で起動ができなくなっていた。 【書き変わった後の内容】結論:org.eclipse.wst.common.componentに変更が生じていた。 の内容に差分が出ていたので、サーバの値で上書きしたら正常動作するようになった。 なぜ書き換わったかまたこのファイルがどのような機能を果たすかは現在調査中。 作業していて、ミスして消してしまったのか? □org.eclipse.wst.common.componentの役割を調べる。 組織、エクリプス、WST??共通のコンポーネント Google検索:「maven jar 追加」 java.lang.ClassNotFoundException: org.springframework.web.context.ContextLoaderListenerの対処法 同様 ①プロジェクトクリア →古い情報を捨てる ②mvn eclipse:eclipse実行 pom.xmlを手で変更した場合は実行する必要ある 引用 このコマンドを実行すると、Eclipse のプロジェクトに必要な .classpath や .project ファイルが作成されます。この作業を行った後に、Eclipse からプロジェクトを (「Existing Projects into Workspace」として) インポートすることで、プロジェクトを Eclipse で扱うことができるようになります。 また、このコマンドは pom.xml を編集するごとに行い、Eclipse でプロジェクトのリフレッシュ (「Package Explorer」でプロジェクトを選択して [F5] キーを押す) を行ってください。 ③refresh実行 プロジェクトsクリーン ④デプロイアセンブリ設定 →ちょっとずつ足していく。エラー内容が変わることを確認。 →わざと、それを加えないでやってみることで差分を見る大切さ★ →もしそれが無かったら・・・・ プロジェクトビルド!! サーバクリア apache再起動 サーバ起動 □Build Projectとcleanの違いは? 直接原因でbeanのcreate時に失敗していた その根本原因として、つまりネストされた原因として、langのバージョンが古いことがあった。 commons-lang-1.0.jarを配備(デプロイ)する対象から除いたらうまくいった。 ログをしっかり読むことで、上記を除くことにたどり着いた。 もし読んでいなかったら・・・・・ 直接原因の表示が変わらないでも、根本が変わっていることがあることに注意!!! 根本まで見ること!!勝手にミスリードしない!! ログを根気強く読むこと!検索はその後 ■それが無かったら、大変なことをそれが 簡単にある、そういうモジュール、そういう言葉、そういう機能。 SLに応用できないか? 動画を軽量に見る方法 人間の焦点があうまでの時間を考慮して、そこを優先してダウンロードする。 ペンライトでライトを照らした部分だけが見えるようにするのに似ている。 SLを使用する。 手元を移して何ができるか。 宿題 COPPERのクライアントサーバ機能の使い方の検討だけをつける。 eclipseのDeploy Assemblyにあたる設定を Integrated Solutions Consoleでどこで設定するのか不明。情報が少ない。 アプリが実際にインストールされる場所 /AP/profiles/installedApps/prgrNode01Cell/配下 Integrated Solutions Consoleの環境-WebSphereからたどることができる。 こちらにマニュアルあり webアプリケーションの一般的なファイル構成 クラスパスは関係ないよな? 問題はjarがビルド時またはデプロイ時にWEB/INF配下に配備されないことなんだから。 □以下のファイルの役割は? .classpath →クラスパスに関する設定 .project →プロジェクトに関する設定 ■思考錯誤 warファイルを無理くりzipにして、 それに必要なjarファイルをいれてwarに戻すのではもんだあるのか? ありそう、pomで指定した、パスがどうなっているんだか PRMS の始動中にエラーが発生しました。詳細については、ノード ×× のサーバー ×× のログを調べてください。 ってかどこを見るんだよ →/AP/profiles/logs/server1配下のSystem××.logファイルのことかも。 ただ、内容がoutofmemoryとかだよ・・・・ □一時的には面倒かも知れないけど、COPPER関連のjarは ローカルリポジトリに登録してもらうしかないかな。 登録用のbatファイルを作成するかな。 □libディレクトリにはjarファイル格納されていることを確認する →パスの指定に誤りはないか。 ■ →自分で追加した、jarファイルがWEB-INF/libにデプロイされていない。 ビルド時にWEB/INFにコピーする方法1 ビルド時にWEB/INFにコピーする方法2 Google検索:「maven pom build jar web/inf」 springとtomcatの関係は? tomcatはWEBアプリケーションを動かすための入れ物(コンテナ)。 springはWEBアプリケーションを開発するうえでのフレームワーク(開発素材)。 つまり、springで作られたアプリをtomcat上にデプロイして動作させるっといった関係。 なので、IDEで開発したspring系のアプリを動かす際は、 デプロイ(ビルドしたものを実際に動かせる状態にすること)する際に、 spring系のものも配備してあげる必要がある。 ん?ビルドしたものはデプロイすれば使えるものではないのか 配置したものとそれを動かすための指定が必要なのか? じゃあ、ビルドしても、配置したものを動かすためのものがなければ動かせないっちゅーことか。 動かすためのものもプロジェクトに含めてしますのはタブーなのか? プロジェクトとして、本質の機能以外のものは外だしするのが決まりなのか? 同じソースが多くなり、冗長になるのを未然に防ぐことが可能になる。 【まとめ】 tomcat上にspringを乗っけてる springの記述で書かれたのものはその上で動作ができる!!! つまりspringはwebアプリケーションを作ることをサポートするフレームワーク! イメージ図 --------- WEBアプリ --------- spring --------- TOMCAT --------- --> コールバックとは? コールバックは呼び出しもとの処理を呼び出すことである。 どういうことかと言うと、 処理Aと処理Bがあったとする この時、 処理Aが処理Bを呼び出したとする。 そして処理Bが処理が完了したタイミングで、 処理Aに処理が完了したことを報告する。 これはコールバックである。 呼び出しもとに帰ってくる。【まとめ】 コールバックとはコールバックメソッドを呼ぶこと(=実行すること)!! コールバックメソッドってのは、あるトリガーをきっかけに呼び出される(=実行される)メソッド。 例: ボタンが押されたら処理(コールバックメソッドに書かれた処理)をする 処理Aが完了したら処理B(コールバックメソッドに書かれた処理)をする 画面が見えなくなったらonPause()(これがコールバックメソッドちゅうこと!)をする プロセスとスレッドの違いは?プロセスとは?スレッドとは? スレッドはプロセスじゃない! 抜粋: Windows ではワープロなどのアプリケーションが1つのプロセスとして実行され、 そのなかのウィンドウがそれぞれ1つのスレッドになっている場合が多いようです。 →なるほどね~、あと他によく聞くのが、重い処理とかは別スレッドでさせるとか聞くね。 プロセスがスレッドを生むってことね!!! Mavenとは? ソース管理およびビルドツール ソース管理はできるけど、コーディングのサポートは重きが置かれていないので、 通常はeclipceといったIDEと連携して使用される。 【mavenの利点】※Antよりも有利な点 プロジェクト作成時はスケルトンと呼ばれるひな形に基づいて 作成していくため、プロジェクトに左右されないビルド手順である。 決まったコマンドを実行すれば、ビルドが完了する。 mvn package 【pom.xml】 プロジェクトが依存しているライブラリとかはどこで管理するのって話が出てくるけど、 それはpom.xml(pom:Project Object Mondel)に記述してあげればオッケイ!! ビルドする際に、必要なものはpom.xmlファイルに記述しておく!! 課題★ □dependencyのscopeがsystem以外の、ものはscopeとして何が設定されているか確認してみよう!! ビルドとコンパイルの違いは? javaアプリケーションを実行するときはビルドする必要がある。 ■そもそも、ビルドとは? ソースコードファイルを独立したソフトウェア生成物に変換するコンピュータ上で実行されるプロセス、またはその結果を指す。 ビルドにおいて最も重要なのはコンパイルプロセスであり、ソースコードファイルを実行ファイルに変換する。 ビルドはコンパイルも含んだ概念。 ビルド=組立操作 組立操作にコンパイルは含まれるってこと!! コンパイルでソースを実行形式に変換してくっつける。 コンパイルしたものをくっつけたりする=組み立てるってことよ♪ --------- |コンパイル| ---------------- | ビルド | ----------------------------- デプロイ ----------------------------- コンパイルは通ったのに、ビルドに失敗ってことがあるのは、コンパイル以外の場所で失敗したっちゅーことだ。 宿題 □Android Studioをマックにインストールする □エクセル勉強会 □コミュニケーションスキル しゃべり方 □ハウツー本アプリ化計画 □何かに特化するようにする。 キオスクを海外で売る? →みんながやりたがらなくて、でも自分が好きなこととかないかな? mavenのタグの勉強 ★★ □includeをgroupIdで指定するように変更する →現段階で、includeしている奴に過不足がないか調べる →不足があれば、 多ければ、何かしら問題になるはず。でも、エラーが出てなかったから、多すぎるということはないかも。 →いあやあるかも、多いのもコピーしてるから問題になっているのかも。 コメントアウトしたものを記述していないか調べる。 □copperのライブラリがリモートライブラリにあるか検索してみて確かめる。 □処理を中断してから、エクリプスの調子が悪い。 ■COPPERでPDFの保存先のファイルを開いている状態で同じパス宛に保存しようとすると、■ 以下のような頓珍漢なエラーが返される。 jp.cssj.cti2.TranscoderException: サーバー側のドキュメント http://”ドメイン名”/ がありません。 at jp.cssj.homare.driver.DirectSession.transcode(DirectSession.java:561) □Copperのバージョンが気づいたら、3.1.1から3.1.2にバージョンアップしてるし・・・ →現状の実装方法で影響ないか、差分を比較する。 ターゲットパスとは? ★ 001031DZ test0602 PHPを使用してみる mysqlをphpから使用してみる。 たのしみ →生き残り anngurajs プロバイダ コントローラ 単語を単純に和訳してみる 暗礁してみる sts git ストアプレース 雑務 普通のアイテムでも良いですが、「この中で一番怖い人」や「一番モテそうな人」、「一番お金を持っていそうな人」など、先輩や上司、社長本人が連れてこられるお題にするのがおすすめです。 アプリ案 □宣伝したい人とキャラを使用したい人のwinwinの関係 □是非知ってもらいたい人と地域の色々を知りたい人のwinwin □○○したい人と××したい人 □目標管理シートを書く。 □恥の新記録を作る! □覗き見機能 ウィンドウショッピングのように覗き込む あたかも店に行っているかのように。 □amazonのリアルで人がいる感覚を楽しむ。 ■コンテキストルート(context root)とは、 Webアプリケーションの最上位のパスのことを言います。 ★エラー内容 [6/9/15 19:30:56:743 JST] 00000027 SystemErr R jp.cssj.cti2.TranscoderException: Unexpected error. org.w3c.dom.DOMException: wsjar:: Invalid CSS document. no protocol: Google検索:「wsjar」 クラスローダ TranscoderException http://dl.cssj.jp/docs/copper/3.1/manual.pdf ターゲットパスとは? パッケージ jp.cssj.cti2 WEBマニュアル ドライバの使い方 エラーの切り分け アプリ起動時にエラーが起こる アプリ実行時にエラーが起こる PDFへの変換時に例外が発生 デバッカーが無ければ、ログ出力でエラー位置を調べる Google検索:「Djava.awt.headless=true とは」 [Application Servers]-[<使用しているサーバーインスタンス>]-[Process Definition]-[Java Virtual Machine]-[Generic JVM arguments] を選択し、設定を追加します。 [Java Virtual Machine]-[Generic JVM arguments]の部分を読み飛ばしていた。 グラフィックが有効になっていないサーバーを java.awt.headless で設定する方法 マニュアル【2.1.4 Red Hat Enterprise Linux(RHEL) / CentOS】に沿ってインストール作業開始 sudo rpm -ivh copper-pdf-3.1.2-0.noarch.rpmを実行。 エラー出力。 エラー: 依存性の欠如: java >= 1.5.0 は copper-pdf-3.1.2-0.noarch に必要とされています そもそも-sunのものが入っているか確認する。 Google検索:「RHEL 5.6 alternatives」 RHELのjavaをSUNのjavaに変更する方法(alternativesコマンド) デフォルトの JDK を /usr/sbin/alternatives ユーティリティで設定 ※alternativesコマンドが使えなかった。 原因は/usr/sbin/alternativesの/usr/sbin/のパスを通していなかったため。 時間を要してしまった。次回から、パスを指定して実行するようにする。またはgrepで検索をかけて探してみる。 【実行手順】 Last login: Wed Jun 10 16:51:49 2015 from ○○.co.jp [user1@prgrooooooooo ~]$ rpm -qa | grep java sun-javadb-javadoc-10.6.2-1.1 sun-javadb-client-10.6.2-1.1 sun-javadb-demo-10.6.2-1.1 sun-javadb-common-10.6.2-1.1 sun-javadb-docs-10.6.2-1.1 sun-javadb-core-10.6.2-1.1 [user1@prgrooooooooo ~]$ rpm -qa | grep jre [user1@prgrooooooooo ~]$ rpm -qa | grep jdk jdk-1.6.0_26-fcs [user1@prgrooooooooo ~]$ rpm -q -l jre | grep \/bin\/java [user1@prgrooooooooo ~]$ rpm -q -l jdk | grep \/bin\/java /usr/java/jdk1.6.0_26/bin/java /usr/java/jdk1.6.0_26/bin/java-rmi.cgi /usr/java/jdk1.6.0_26/bin/javac /usr/java/jdk1.6.0_26/bin/javadoc /usr/java/jdk1.6.0_26/bin/javah /usr/java/jdk1.6.0_26/bin/javap /usr/java/jdk1.6.0_26/bin/javaws /usr/java/jdk1.6.0_26/jre/bin/java /usr/java/jdk1.6.0_26/jre/bin/java_vm /usr/java/jdk1.6.0_26/jre/bin/javaws [user1@prgrooooooooo ~]$ /usr/sbin/alternatives --display java [user1@prgrooooooooo ~]$ sudo /usr/sbin/alternatives --display java [user1@prgrooooooooo ~]$ sudo su [root@prgrooooooooo user1]# /usr/sbin/alternatives --display java [root@prgrooooooooo user1]# sudo /usr/sbin/alternatives --install /usr/bin/java java /usr/java/jdk1.6.0_26/bin/java 200 [root@prgrooooooooo user1]# /usr/sbin/alternatives --display java java -ステータスは自動です。 リンクは現在 /usr/java/jdk1.6.0_26/bin/java を指しています。 /usr/java/jdk1.6.0_26/bin/java - 優先項目 200 現在の「最適」バージョンは /usr/java/jdk1.6.0_26/bin/java です。 [root@prgrooooooooo user1]# /usr/sbin/alternatives --display config [root@prgrooooooooo user1]# /usr/sbin/alternatives --config java 1 プログラムがあり 'java' を提供します。 選択 コマンド ----------------------------------------------- *+ 1 /usr/java/jdk1.6.0_26/bin/java Enter を押して現在の選択 [+] を保持するか、選択番号を入力します: [root@prgrooooooooo user1]# java -version java version "1.6.0_26" Java(TM) SE Runtime Environment (build 1.6.0_26-b03) Java HotSpot(TM) Client VM (build 20.1-b02, mixed mode, sharing) [root@prgrooooooooo user1]# ■なおも以下のエラー [user1@prgrooooooooo matsuguman]$ sudo rpm -ivh copper-pdf-3.1.2-0.noarch.rpm エラー: 依存性の欠如: java >= 1.5.0 は copper-pdf-3.1.2-0.noarch に必要とされています ■CPUの確認. $ cat /proc/cpuinfo ■jdk-1_5_0_22-linux-i586-rpm.binをインストール [user1@prgrooooooooo matsuguman]$sudo sh jdk-1_5_0_22-linux-i586-rpm.bin Unpacking... Checksumming... 0 0 Extracting... UnZipSFX 5.50 of 17 February 2002, by Info-ZIP (Zip-Bugs@lists.wku.edu). replace jdk-1_5_0_22-linux-i586.rpm? [y]es, [n]o, [A]ll, [N]one, [r]ename: y inflating: jdk-1_5_0_22-linux-i586.rpm 準備中... ########################################### [100%] パッケージ jdk-1.6.0_26-fcs.i586 (jdk-1.5.0_22-fcs.i586 より新しいもの) は既にインストールされています。 Done. ■jdk-1.6.0_26-fcs.i586をアンインストール [user1@prgrooooooooo matsuguman]$ sudo rpm -e jdk-1.6.0_26-fcs.i586 ■アンインストールされたか確認 [user1@prgrooooooooo matsuguman]$ rpm -q -l jdk | grep jdk パッケージ jdk はインストールされていません。 [user1@prgrooooooooo matsuguman]$ java -version -bash: java: command not found ■あらためて、jdk-1_5_0_22-linux-i586-rpm.binをインストール [user1@prgrooooooooo matsuguman]$sudo sh jdk-1_5_0_22-linux-i586-rpm.bin ■[user1@prgrooooooooo matsuguman]$ sudo /usr/sbin/alternatives --install /usr/bin/java ja va /usr/java/jdk1.5.0_22/bin/java 300 ■優先順位変更 [user1@prgrooooooooo matsuguman]$ sudo /usr/sbin/alternatives --config java 2 プログラムがあり 'java' を提供します。 選択 コマンド ----------------------------------------------- + 1 /usr/java/jdk1.6.0_26/bin/java * 2 /usr/java/jdk1.5.0_22/bin/java Enter を押して現在の選択 [+] を保持するか、選択番号を入力します:2 ■優先順位確認 [user1@prgrooooooooo matsuguman]$ /usr/sbin/alternatives --display java java - ステータスは手動です。 リンクは現在 /usr/java/jdk1.5.0_22/bin/java を指しています。 /usr/java/jdk1.6.0_26/bin/java - 優先項目 200 /usr/java/jdk1.5.0_22/bin/java - 優先項目 300 現在の「最適」バージョンは /usr/java/jdk1.5.0_22/bin/java です。 ■java -versionが表示されるように環境変数設定する 環境変数の通し方 .bash_profileと .bashrcの設定 ■mavenの設定大丈夫だろうか・・・・ [user1@prgrooooooooo ~]$ cat .bash_profile # .bash_profile # Get the aliases and functions if [ -f ~/.bashrc ]; then . ~/.bashrc fi # User specific environment and startup programs export JAVA_HOME=/usr/java/default export M2_HOME=/home/user1/tool/maven/apache-maven-2.2.1 export ROO_HOME=/home/user1/tool/roo/spring-roo-1.1.5.RELEASE PATH=$JAVA_HOME/bin:$M2_HOME/bin:$ROO_HOME/bin:$PATH PATH=$PATH:$HOME/bin export PATH ■パスを設定しなおすところから。 [user1@prgrooooooooo matsuguman]$ cd /usr/java/ [user1@prgrooooooooo java]$ ls jdk1.5.0_22 [user1@prgrooooooooo java]$ □DNSサーバとADサーバの違いは? ADサーバはDNSサーバを必要とする。 内包しているのか? □クラスローダ -= ∧_∧ -=と(´・ω・`) -=/ と_ノ -=_//⌒ソ COPPER系のライブラリを使用するために、 アプリ実行時はクラスパスを押し上げてあげる必要がある。 webSphereのクラスのロード順番は java -cp .:$LIB_DIR/* にあたる部分をそのように設定するか。 設定した内容は、他のアプリに影響をあたえてはならない。 で、結局 クラスローダの仕組みを知る WebShpereにおけるクロスローダ □jarファイルの中身はどうなっているのか? クラスファイルなのか? jarファイル、クラスファイル違い jar正式名は? 土言うものか? wikiミロ! □javaで言うブートストラップ □システムプロパティと環境変数の違いは? "システムプロパティとは、Javaの動作環境についての情報である。" システムプロパティはプログラム中で設定可能 【エラー内容】 エラー・メッセージ: javax.servlet.ServletException: SRVE0207E: サーブレットによって作成された初期化例外がキャッチされませんでした。 エラー・コード: 500 ターゲット・サーブレット: PRGR エラー・スタック: java.lang.NoSuchMethodError: org/slf4j/spi/LocationAwareLogger.log(Lorg/slf4j/Marker;Ljava/lang/String;ILjava/lang/String;[Ljava/lang/Object;Ljava/lang/Throwable;)V 【対応内容】 Google検索:「webspere NoSuchMethodError SRVE0207E」 エラーコード 日本語なし エラー内容 下記では該当せず Google検索:「websphere jcl-over-slf4j java.lang.NoSuchMethodError: org/slf4j/spi/LocationAwareLogger.log」 ■web.xmlはトリガーとそのときの処理のマッピングが記載されている。 また、フィルターも クリアに考えるようにする。シンプルに考えるようにする。一気に複雑に考えない。 サーブレットフィルター使ってみろ ■環境パスの一覧の見方 setでエンター ■ Google検索:「xmlParserAPIs websphere」 通勤タイムアタッカー あかずの踏み切り 難易度化 □メール締め切りを記載する □ノート留め具 レルム それが無いとどうなるのか そのソースで最終的にしていることから 逆算する したいことから逆算する 以下に自分を納得させるか 差分を見て違いを見る 無いときの状態を見る 何かと何かを比較する ある時と無いとき 差分で認知 クラスローダとはクラスをロードする機能 実際に目で見てみる。 jarファイルのなかを見てみる。 以下に納得しながら楽しみながら進めるか。 違う側面からブログをつける、湾曲させたブログ 切り口を変えた、自分の本質でなく他人からの見え方を意識 ありのままをあえて他人向けのテーマやお題をつけて公開する 社内の誰がどこに行ったかがすぐに分かるようにするにはどのようにしたら良いか? デジタルサイネージで音を鳴らすウォンテッド サイネージされるスケジュールを管理してみる。 気軽にサイネージできるようにする。 分からんこととかも。 ■■プログラム改良■■ □systemプロパティ図を読み込むタイミングを調べる。または、ファイルから読み込む □ソースを改良して、URLを外だしする 実行時にURLを指定できるようにしたい。URLの一部に指定してGETで受けるようにする? □printStackTraceの内容は? cssj-font-policy ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ 依頼事項 ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ □プロパティが設定できるか確認する プロパティの内容はメールを確認する Copper PDFはHTMLのmeta要素から取得した情報を、PDFの文書情報として使用します ・文書情報は、入出力プロパティによっても設定することができます[2.0.3]。 ・入出力プロパティ一覧 □プレスリリースの適当なページをApacheに配置(URLでアクセスできるとこに配置)し、 ヘッダーとフッターを出さずに表示してみる @printで制御してみる →制御可能 →ページサイズが制御できていないためか、ずれてしまう。 印刷用のものを変更すると、印刷のレイアウトまでずれてしまうのではないだろうか? □後から@printとかでロゴの入った 会社ごとのCSSを当てることができるか確認する □日本語フォントを自分が指定したものにできるか、確認する Linuxのフォントの設定は出来るのか調査 □インストール手順書作成する ライセンスキーが原因であることに行き着いた経路を整理する 見つけられなかった原因 対策 差分を確認することで回避できたはず! 差分は必ず確認する! □プロキシを通した場合に変換できない。 →ライセンスキーが正しいか確認する。 □エラーが出ているので、差分を見る!! 元に戻してみる。 最小構成にする。 □エラーの本質はcause by をしたからたどっていってときに最初に org.jboss.resource.JBossResourceException: Could not create connection; - nested throwable: (java.sql.SQLException: Io exception: The Network Adapter could not establish the connection) →原因:デプロイするアプリケーション自体のパスを誤っていたのが原因でした・・・・ □エラーログの読み方べんきょうセロ!! エラーログを見てどこが問題の本質見極める。 ★報告内容 文書情報は以下の優先度で適応されます。 meta>プログラム タイトルに関しては、titleタグした場合は、 meta>titleタグ>プログラム 作成者とキーワードが設定できないのはcopperのバグでした。 6月22日にバージョンアップで対応いただけるとのことです。 □プロキシ経由してのWEBページ変換 現在、COPPER殿に質問中です。 試用ライセンスは全ての機能が利用可能ですが「すかし」が入ります。 →プロキシも設定可能か確認中。 tomcatの設定 -Dhttp.proxyHost="10.232.16.150" -Dhttp.proxyPort="8080" 最小構成で実行しても駄目。 他のソフト(APOSEだったか?)だとプロキシ経由でも変換できた。 ■学び マニュアルだけでなくFAQにもヒントあり。 ■プロキシtomcat設定 -Dhttp.proxyHost="10.232.16.150" -Dhttp.proxyPort="8080" □社内からPDFを作成したときに、エラーが表示され宇野はなんで? ■プロキシの設定で試したもの // System.setProperty("java.net.preferIPv4Stack", "true"); // System.setProperty("http.proxyHost", "プロキシのホスト名またはIPアドレス"); // System.setProperty("http.proxyPort", "8080"); // System.setProperty("http.proxySet", "true"); // System.setProperty("proxySet", "true"); // System.setProperty("ホスト名またはIPアドレス|ホスト名またはIPアドレス"); // SocketAddress addr = new InetSocketAddress("10.232.16.150", 8080); // Proxy proxy = new Proxy(Proxy.Type.HTTP, addr); // URL url = new URL("http://www.yahoo.co.jp"); // URLConnection conn = url.openConnection(proxy); // conn.connect(); // // プロキシ設定 // String proxyServer = System.getProperty("http.proxyHost"); // Integer proxyPort = 0; // if (proxyServer != null) { // proxyPort = Integer.parseInt(System.getProperty("http.proxyPort")); // // session.property("input.http.proxy.host", proxyServer); // session.property("input.http.proxy.port", proxyPort.toString()); // // log.info("Set Copper Proxy=" + proxyServer + ":" + proxyPort.toString()); // System.out.println("Set Copper Proxy=" + proxyServer + ":" + proxyPort.toString()); // } else { // // TODO // } ■DNSサーバの設定で試したもの // System.setProperty("sun.net.spi.nameservice.nameservers", "10.234.154.89,10.234.154.90,10.232.16.150,8.8.8.8"); // System.setProperty("sun.net.spi.nameservice.provider.1", "dns,sun"); // System.setProperty("sun.net.spi.nameservice.domain", "ドメイン名"); ■プロキシとDNSの設定状況確認 // System.out.println("■nameservers:" + System.getProperty("sun.net.spi.nameservice.nameservers")); // System.out.println("■proxyHost:" + System.getProperty("http.proxyHost")); // System.out.println("■proxyPort:" + System.getProperty("http.proxyPort")); □プロパティファイルのデータの読み込み方。 applicationContext_config.xmlファイルの使用方法 system.propertiesとの使い分けは? →system.propertiesで定義したものをapplicationContext_config.xmlで設定することで アプリ側で使用できるようにしている。 system.propertiesに記述してもビルドしなおす必要があるようだ。手間が省けない 今はボトルネックは、ビルドと実行 →手間 プロキシ設定をcopper標準のものを使用しないと 画面のレイアウトが崩れてしまう。 標準のものを使用すると社内にアクセスできない。 エラー分岐 プロキシの除外設定 ■保存するファイル名に/が入っているときのエラーは以下です。ファイル名をパスと思って混乱してるっぽい。 jp.cssj.cti2.TranscoderException: サーバー側のドキュメント http://home.test.co.jp がありません。 at jp.cssj.homare.driver.DirectSession.transcode(DirectSession.java:561) at jp.cssj.homare.driver.DirectSession.transcode(DirectSession.java:440) at com.panasonic.jp.prgr.web.announce.AnnounceController.listSchedule_aroundBody0(AnnounceController.java:289) at com.panasonic.jp.prgr.web.announce.AnnounceController$AjcClosure1.run(AnnounceController.java:1) at org.aspectj.runtime.reflect.JoinPointImpl.proceed(JoinPointImpl.java:149) at com.panasonic.jp.prgr.core.log.RequestMappingInterceptor.doRequestMappingIntercept(RequestMappingInterceptor.java:68) at com.panasonic.jp.prgr.web.announce.AnnounceController.listSchedule(AnnounceController.java:105) at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39) at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25) at java.lang.reflect.Method.invoke(Method.java:597) at org.springframework.web.bind.annotation.support.HandlerMethodInvoker.invokeHandlerMethod(HandlerMethodInvoker.java:176) at org.springframework.web.servlet.mvc.annotation.AnnotationMethodHandlerAdapter.invokeHandlerMethod(AnnotationMethodHandlerAdapter.java:436) at org.springframework.web.servlet.mvc.annotation.AnnotationMethodHandlerAdapter.handle(AnnotationMethodHandlerAdapter.java:424) at org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:790) at org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:719) at org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:669) at org.springframework.web.servlet.FrameworkServlet.doGet(FrameworkServlet.java:574) at javax.servlet.http.HttpServlet.service(HttpServlet.java:617) at javax.servlet.http.HttpServlet.service(HttpServlet.java:717) at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:290) at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206) at com.panasonic.jp.prgr.core.web.BackButtonFilter.doFilterInternal(BackButtonFilter.java:39) at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:76) at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:235) at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206) at com.panasonic.jp.prgr.core.log.ParameterLogFilter.doFilterInternal(ParameterLogFilter.java:48) at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:76) at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:235) at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206) at com.panasonic.jp.prgr.core.web.FlashScopeFilter.doFilterInternal(FlashScopeFilter.java:46) at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:76) at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:235) at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206) at org.springframework.orm.jpa.support.OpenEntityManagerInViewFilter.doFilterInternal(OpenEntityManagerInViewFilter.java:113) at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:76) at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:235) at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206) at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:368) at org.springframework.security.web.access.intercept.FilterSecurityInterceptor.invoke(FilterSecurityInterceptor.java:109) at org.springframework.security.web.access.intercept.FilterSecurityInterceptor.doFilter(FilterSecurityInterceptor.java:83) at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:380) at org.springframework.security.web.access.ExceptionTranslationFilter.doFilter(ExceptionTranslationFilter.java:97) at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:380) at org.springframework.security.web.session.SessionManagementFilter.doFilter(SessionManagementFilter.java:100) at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:380) at org.springframework.security.web.authentication.AnonymousAuthenticationFilter.doFilter(AnonymousAuthenticationFilter.java:78) at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:380) at org.springframework.security.web.servletapi.SecurityContextHolderAwareRequestFilter.doFilter(SecurityContextHolderAwareRequestFilter.java:54) at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:380) at org.springframework.security.web.savedrequest.RequestCacheAwareFilter.doFilter(RequestCacheAwareFilter.java:35) at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:380) at org.springframework.security.web.authentication.www.BasicAuthenticationFilter.doFilter(BasicAuthenticationFilter.java:177) at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:380) at org.springframework.security.web.authentication.AbstractAuthenticationProcessingFilter.doFilter(AbstractAuthenticationProcessingFilter.java:187) at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:380) at org.springframework.security.web.authentication.preauth.AbstractPreAuthenticatedProcessingFilter.doFilter(AbstractPreAuthenticatedProcessingFilter.java:89) at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:380) at org.springframework.security.web.authentication.logout.LogoutFilter.doFilter(LogoutFilter.java:105) at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:380) at org.springframework.security.web.context.SecurityContextPersistenceFilter.doFilter(SecurityContextPersistenceFilter.java:79) at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:380) at org.springframework.security.web.FilterChainProxy.doFilter(FilterChainProxy.java:169) at org.springframework.web.filter.DelegatingFilterProxy.invokeDelegate(DelegatingFilterProxy.java:237) at org.springframework.web.filter.DelegatingFilterProxy.doFilter(DelegatingFilterProxy.java:167) at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:235) at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206) at org.springframework.web.filter.HiddenHttpMethodFilter.doFilterInternal(HiddenHttpMethodFilter.java:77) at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:76) at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:235) at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206) at org.springframework.web.filter.CharacterEncodingFilter.doFilterInternal(CharacterEncodingFilter.java:88) at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:76) at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:235) at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206) at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:233) at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:191) at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:127) at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:102) at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:109) at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:298) at org.apache.jk.server.JkCoyoteHandler.invoke(JkCoyoteHandler.java:190) at org.apache.jk.common.HandlerRequest.invoke(HandlerRequest.java:291) at org.apache.jk.common.ChannelSocket.invoke(ChannelSocket.java:776) at org.apache.jk.common.ChannelSocket.processConnection(ChannelSocket.java:705) at org.apache.jk.common.ChannelSocket$SocketConnection.runIt(ChannelSocket.java:898) at org.apache.tomcat.util.threads.ThreadPool$ControlRunnable.run(ThreadPool.java:690) at java.lang.Thread.run(Thread.java:662) □出力するファイルの横幅をどのように決めるか。 systemrプロパティ図を読み込むタイミングを調べrう。 または、ファイルから読み込む □ 写真をイラストに変換するソフト一覧 □GIF画像を読み込めていない マニュアル内の「Copper PDFがサポートする画像」より、サポート自体はしている記述あるが、 マニュアル「画像を読み込めない場合」の動きになっている。 画像ファイルが存在しない、データの破損、Copper PDFがサポートしない画像形式と いった原因で画像を読み込めない場合は、通常はalt属性で指定された代替テキストが 表示されます。入出力プロパティoutput.broken-image [io] の設定により、画像の形 に×印を表示する(cross)か、空白を空ける(hidden)ことができます。 簡単にシンプルにわかりやすく 作るとしたらどうつくるか。 インプットをアウトプットと処理部だけにしてかんがえてみる。 なにがどうであればよいか □ページと用紙の違いどうして分かった? □サーバ環境での動作確認。 クライアント-サーバの使い方であれば、エラーで落ちないかも知れない。 →取り込むものが、ドライバ部分だけなので 開発環境では動作する ライセンスキーを適応するとエラーで変換に失敗する →結局、透かしを生成するときに落ちていた。WAS7とのライブラリの衝突が原因。 □Linux側でDirectJavaファイルを動作させてみる。 正常に動作する場合、webshereに原因がありそう。 【懸念事項】 □フォントが指定されていない場合は何を設定いたしましょうか? □プログラム上で指定するCSSはローカルのファイルにしか使えない? プロキシを経由する場合は使用できない? →□社内のやつにCSSが当たるか検証してみる →あたっているようでした。 →フォントがあたるかどうかは別問題のようだ。フォントが変わるのはデフォルトのフォントの指定が違うだけか? →差分のあるファイルを見つけて調査せよ 例:実際のプレスリリースサイトをPDF変換した際にCSSが当たってない。 →結論:CSSはプロキシ内に設定していたので、プロキシを経由した場合参照できなくて、CSSが当たらないということになっていた。 →なぜこんなに単純なことに気づかなかったんだwお疲れなんではないでしょうか? □GIF画像がPDF変換できない? 例:イントラのページをPDF変換するとgif画像が表示されていない 出力するPDFファイルのページの大きさについて 1pxは1コマ 1mmあたりの何pxあるかは 解像度(決めの細かさ)次第 @pageで指定できるのはmarginだけ ページ幅や高さは指定できない! □印刷ページのレイアウトに関して ■ページと用紙の違いは? 一枚の用紙にページは数ページ入れることも可能 ページはレイアウトの単位。★ つまり、ソフトで変更が可能! 用紙は物理的な一枚の単位。★ Copper PDFはデフォルトのページサイズはA4サイズ 高さ297mm,幅210mm ■フォントの指定が可能か →可能 現状の使用しているフォントはファイルcommon-font_jp.cssで定義されているもの。 →実はcommon.cssで定義されているのがほとんど。 ファイル内で以下が定義されている。 font-family:'Open Sans', "ヒラギノ角ゴ Pro W3", "Hiragino Kaku Gothic Pro", "メイリオ", Meiryo, sans-serif; 上記のフォントをCOPPERで変換したPDFでも使用したい。 マニュアルについて、 1.3.4 フォント関連機能 に概要 2.4.3 デフォルトのフォント に使い方の概要 webfontは使用しているのか? →htmlを検索したところ、@face-fontの設定がないので、使用してなさそう。 結局何を設定すれば使えるの? 必要なフォントを\conf\profiles\fonts配下に配備した後は何を設定すればよいのか? output.pdf.fonts.policyを設定すればよいのでは? とりあえず6つのフォントをダウンロードするとする ①Open Sans OK! ②"ヒラギノ角ゴ Pro W3",と "Hiragino Kaku Gothic Pro"は同一? Pro W3をDL! ③"メイリオ"はwinなら標準で持ってるということなのでOK ④sans-serifはたくさん種類がありそうなので置いておく。 自分が用意したフォントが指定できることをDLしてきたフォントfunwari-roundを適応して確認。 フォントフォルダに配備,CSSで指定すると反映される仕様です。 ■サービスの起動に失敗した エラーログの内容がwinとcopperサービスで食い違っている・・・・ 【イベントビューアのログ内容】 Copper PDF Server サービスは、サービス固有エラー ファンクションが間違っています。 で終了しました。 根本原因は下記の★印であった。 copperの64bit版サービスをアンインスールして、32bit版をインストールしたら起動に成功した。 インストールされているapacheが32bit版なのが原因なのかも知れない。 【copperサービスのログ内容】 [2015-06-22 12:01:36] [info] [ 2796] Commons Daemon procrun (1.0.15.0 64-bit) started [2015-06-22 12:01:36] [info] [ 2796] Running 'copperd' Service... [2015-06-22 12:01:36] [info] [ 3904] Starting service... [2015-06-22 12:01:36] [error] [ 3904] %1 は有効な Win32 アプリケーションではありません。 [2015-06-22 12:01:36] [error] [ 3904] Failed creating java C:\Program Files\Java\jdk1.6.0_26\jre\bin\server\jvm.dll★ [2015-06-22 12:01:36] [error] [ 3904] %1 は有効な Win32 アプリケーションではありません。 [2015-06-22 12:01:36] [error] [ 3904] ServiceStart returned 1 [2015-06-22 12:01:36] [error] [ 3904] %1 は有効な Win32 アプリケーションではありません。 [2015-06-22 12:01:36] [info] [ 2796] Run service finished. [2015-06-22 12:01:36] [info] [ 2796] Commons Daemon procrun finished 新歓会 新人 歓迎会 □記事を描く →内容を清水さんに確認 □写真のことをお知らせする □森川さんに謝礼を渡す □課費補助申請をする →領収書待ち グロコミ設定 水曜日飲み会 フォントの質問の返答待ち 清水さんに返答 →報告書(ホームページに載せる為のやつ)を 新歓会の敗因 □ファイルの置き場所を確定していなかったため、資料の連携がうまく行ってなかった。 □役割分担がはっきりとしていなかった。 □実施計画書を作成していなかった。 □印刷して見える化していなかった。 □領収書の宛名を紙に書いてなかったので2度手間になってしまった。 【問題】 HTMLがプロキシ内のローカルネットワークのファイル かつCSSがプロキシの外の場合、 プロキシの設定を行うとプロキシ内が見れない。 プロキシをはずすとCSSを参照できない。 □PRGRサーバを最初の状態にロールバックスするので その状態から復元できるようにインストール手順書を作成する。 インストールはPRMパッケージのインストール手順に沿って行う。 今回はインストールは行うがサービスとして起動しない前提で ライブラリを直接使用してPDFファイルを作成する。 ★★★★★★6月30日に行うこと □プログラムの要件を満たす 引数: ・■変換対象のファイルのフルパス※制約1:ローカルのファイルまたはネットワーク上のファイル。プロキシを経由するため社内のファイルは適応できない。 ・■出力先PDFファイルフルパス※制約1 ・■スタイルシートのファイルパス※制約1 ・PDFのプロパティ ※Fontは引数としなくてよい □COPPER3.1.2をアンインストールして3.1.3を導入する。 □引数チェックをどのように実装していくか。既存ソースをみる。”arg”あたりで検索する。 □PDF変換コマンド作成 ・作成いただいたTEST1のページは実際のページとはフォントが異なる。 また、検索フォームが表示されないなどの差がある。 →どこに差分が出ているか、winmergeでhtmlの比較する →この差分は動作検証に影響は無いか? □PDFの下部に移りこんでいるものがなんで背景色であるとわかったか? →背景色を変更して表示されないようにする必要がある。 □ログのエラーを消す。 □ログ出力を実装 ログの出力先は以下を設定する /AP/profiles/logs/server1/SystemOut.log □コントローラからコマンドを動かせるか確かめる。 □その他メモ dependenciesを使用すれば、apchaeとの競合が無くなる pom.xmlに推奨されていないsystemを使わなくて良い ■プロキシの設定のあれこれ ■以前ネットワーク上のファイルにスタイルシートが当たらない現象が起きていたが、 原因はプロキシを設定したために、prgr上においていたスタイルシートが参照できなくなったためと考えられる。 そりゃそうか。 ■上記のほかにスタイルがあたってなかったり、画像が表示されていなかったので、プロキシの設定が原因。 プロキシを設定して、社内のファイルを見ようとしたり、 プロキシを設定せずに、社外のファイルを見ようとしたり ■ロゴ表示のCSSの設定 ■cssで/* が/ *となっていたため、正常に表示されていなかった。」 ■クラスの.とidの#を間違えていた クラスパスの指定の注意点 F:\work\PDBS\CopperPDF\LINUX環境移行前テスト>javac -cp F:\work\PDBS\CopperPDF\LINUX環境移行前テスト\driver_logger_optPaser\* HTML2PDF.java javac: F:\work\PDBS\CopperPDF\LINUX環境移行前テスト\driver_logger_optPaser\cti-driver-2.1.4.jar は無効なフラグです。 使い方: javac