ニックネーム:ウラン
性別:男
都道府県:東京都
プログラマでアマチュアのオケに所属

»くわしく見る
2016年03月15日(火)
さらば、BLOGari

ブログを下記に引っ越しました。

http://oboe2uran.hatenablog.com/


2016-03-15 00:18 | 記事へ | コメント(0) |
2016年03月13日(日)
ブログ引っ越しの準備ー2
BLOGari サービスのエクスポート→ MovableType形式 の投稿日付書式が、
他のブログサイトでは、拒否されるので、、、
手っ取り早く引っ越しをしたかったので、仕方なく簡単な Javaプログラムを書いて、
MovableType形式ファイルを書き直すことにした。。


try(Stream<String> stream = Files.lines(Paths.get("oboe2uran.log"), Charset.forName("UTF-8"))){
   Pattern datePattern = Pattern.compile("^DATE: \\d{4}/(0[1-9]|1[012])/(0[1-9]|[12][0-9]|3[01]) ([0-1][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9] (AM|PM)$");
   DateTimeFormatter writeDateFormatter = DateTimeFormatter.ofPattern("MM/dd/yyyy hh:mm:ss");
   PrintWriter pw = new PrintWriter(new OutputStreamWriter(new FileOutputStream("repair.log")));
   stream.forEach(e->{
      if (datePattern.matcher(e).matches()){
         pw.print("DATE: ");
         if (e.endsWith("AM")){
            LocalDateTime dateTime = LocalDateTime.parse(e.replaceAll("DATE: ", "").replaceAll(" AM", ""), DateTimeFormatter.ofPattern("yyyy/MM/dd HH:mm:ss"));
            pw.print(dateTime.format(writeDateFormatter));
            pw.print(" AM");
         }else{
            LocalDateTime dateTime = LocalDateTime.parse(e.replaceAll("DATE: ", "").replaceAll(" PM", ""), DateTimeFormatter.ofPattern("yyyy/MM/dd HH:mm:ss"));
            dateTime = dateTime.plusHours(12);
            pw.print(dateTime.format(writeDateFormatter));
            pw.print(" PM");
         }
      }else{
         pw.print(e);
      }
      pw.print("\r\n");
   });
   pw.close();
}catch(Exception e){
   e.printStackTrace();
}
System.out.println("--- 終了 ---");



〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜

こんなもので、充分用を足すだろう。

実行して作ったファイルを他のサイトに持っていったら認識できた。

ブログ引っ越しとして、画像も持ってかないとならないけど、
こればかりは手作業になってしまうか。。。。

2016-03-13 16:13 | 記事へ | コメント(0) |
ブログ引っ越しの準備
ブログ引っ越しの準備、

このブログ運用が来年1月に閉鎖されるので準備を進めていたら、

BLOGari サービスがエクスポートとして MovableType形式(MT形式)での投稿記事をエクスポートするので、
エクスポート実行して、他のサイトのブログにインポートしようとしたら、エラーなった。


原因は、、
投稿日付の書式が、インポートしようとしたサイトでは読めなかった。

BLOGari サービスが出力する、DATE 書式、

DATE: yyyy/MM/dd HH:mm:ss AM|PM

AM|PM → AM or PM


ある有名なサイトでインポートしようする場合、DATE は、こう書き直す。

DATE: MM/dd/yyyy HH:mm:ss AM|PM

西暦年をひっくり返すのだ。


どちらが正しいなんて議論するつもりはない。

とにかく、どうやって殆どの投稿を持っていこうか?悩むところ。。。

2016-03-13 13:41 | 記事へ | コメント(0) |
2016年02月09日(火)
SQLアノテーションで動的SQL
mybatis のSQLアノテーションで動的SQLを書くには、SQLMap XMLで書いていた <if> 等を
<script> で囲んで書く。

(例)

@Select("<script>SELECT * FROM shops WHERE delete_flg = 0 "
  + "<if test=\"branch_id != null\"> AND branch_id = #{branch_id}</if>"
  + " ORDER BY build_order ASC</script>")
public List<Shop> getShops(@Param("branch_id")Integer id);


2016-02-09 22:47 | 記事へ | コメント(0) |
| iBATIS(mybatis) |
2016年02月06日(土)
methods on autocomplete prior to initial
Wicket モーダルウィンドウに AutocompleteDatepicker を配置した時、選択の前にウィンドウを閉じた場合に残る Autocompete やカレンダー表示などが残ってしまう問題、
これを回避するために、、

  $('div[class="w_caption"]').mouseover(function(){
    $('input[class="ui-autocomplete-input"]').autocomplete("close");
    $('input[class="datepicker hasDatepicker"]').datepicker("hide");
  });
  $('button').mouseover(function(){
    $('input[class="ui-autocomplete-input"]').autocomplete("close");
    $('input[class="datepicker hasDatepicker"]').datepicker("hide");
  });


を実行してマウスカーソルのイベントで対処していたが、これだと、Autocomplete close は、、

以下、エラーが発生することがある。たいていのケースがこれで良かったのに。。。

Uncaught Error: cannot call methods on autocomplete prior to initialization; attempted to call method 'close'n.extend.error

@ jquery-2.1.4.min.js:2(anonymous function)
@ jquery-ui-1.11.4.custom.min.js:6n.extend.each
@ jquery-2.1.4.min.js:2n.fn.n.each
@ jquery-2.1.4.min.js:2e.fn.(anonymous function)
@ jquery-ui-1.11.4.custom.min.js:6(anonymous function)


Autocomplete が動いているの後の操作で動く close の実行なのにどうして初期化してないから云々のエラーになるのか?

諦めて以下のようなメソッドを用意して、Autocomplete の ul - li 表示リストを mouseover で削除する メソッドを用意してこれを
モーダルウィンドウ表示後に呼び出す。

var modalCaptionSetting = function(){
   $('div[class="w_caption"]').mouseover(function(){
      $('ul.ui-autocomplete').empty();
      $('ul.ui-autocomplete').prop('style', 'display: none');
      $('input[class="datepicker hasDatepicker"]').datepicker("hide");
   });
   $('button').mouseover(function(){
      $('ul.ui-autocomplete').empty();
      $('ul.ui-autocomplete').prop('style', 'display: none');
      $('input[class="datepicker hasDatepicker"]').datepicker("hide");
   });
};



2016-02-06 00:10 | 記事へ | コメント(0) |
| jQuery / Wicket |
2016年02月03日(水)
Wicket 7 で DateTimeFormatterがエラー
Java8Wicket 7 で開発していたら、Page 生成で
以下のように、java.time.LocalDateDateTimeFormatter でフォーマット化して表示しようとすると、

error delegating to writeObject : java.time.format.DateTimeFormatter

org.apache.wicket.WicketRuntimeException: A problem occurred while trying to collect debug information about not serializable object
at org.apache.wicket.serialize.java.JavaSerializer$SerializationCheckerObjectOutputStream.writeObjectOverride(JavaSerializer.java:282) ~[wicket-core-7.1.0.jar:7.1.0]
at java.io.ObjectOutputStream.writeObject(ObjectOutputStream.java:344) ~[na:1.8.0_65]
at org.apache.wicket.serialize.java.JavaSerializer.serialize(JavaSerializer.java:78) ~[wicket-core-7.1.0.jar:7.1.0]
at org.apache.wicket.pageStore.AbstractPageStore.serializePage(AbstractPageStore.java:133) [wicket-core-7.1.0.jar:7.1.0]
at org.apache.wicket.pageStore.DefaultPageStore.createSerializedPage(DefaultPageStore.java:281) [wicket-core-7.1.0.jar:7.1.0]
at org.apache.wicket.pageStore.DefaultPageStore.storePage(DefaultPageStore.java:61) [wicket-core-7.1.0.jar:7.1.0]
at org.apache.wicket.page.PageStoreManager$PersistentRequestAdapter.storeTouchedPages(PageStoreManager.java:403) [wicket-core-7.1.0.jar:7.1.0]
at org.apache.wicket.page.RequestAdapter.commitRequest(RequestAdapter.java:193) [wicket-core-7.1.0.jar:7.1.0]
at org.apache.wicket.page.AbstractPageManager.commitRequest(AbstractPageManager.java:76) [wicket-core-7.1.0.jar:7.1.0]
at org.apache.wicket.page.PageManagerDecorator.commitRequest(PageManagerDecorator.java:74) [wicket-core-7.1.0.jar:7.1.0]
at org.apache.wicket.page.PageAccessSynchronizer$2.commitRequest(PageAccessSynchronizer.java:270) [wicket-core-7.1.0.jar:7.1.0]


これは、以下のように書くと起きてしまう。

final DateTimeFormatter dateTimeFormatter = DateTimeFormatter.ofPattern("yyyy/MM/dd");

queue(new ListView<Element>("listview", new PropertyModel<List<Element>>(this, "list")){
   @Override
   protected void populateItem(ListItem<DeviceElement> item){
      Element e = item.getModelObject();
      item.add(new Label("create_date", e.create_date.format(dateTimeFormatter) ));
   }
});


DateTimeFormatter のインスタンス生成を populateItem の繰り返し処理で実行させるのが気持ち悪くて
こう書いてしまった。

回避作は、、

final での DateTimeFormatter宣言を廃止して、

  item.add(new Label("create_date", e.create_date.format(DateTimeFormatter.ofPattern("yyyy/MM/dd")) ));


にすることだった。

2016-02-03 23:02 | 記事へ | コメント(0) |
| Wicket |
2016年02月01日(月)
tbody scroll と jQuery ui の Selectable
テーブルのスクロールを tbody で出現するようにCSSで指定して、
jQuery ui の Selectable を この tbody に適用させて行選択をできるようにしたところ、、、

スクロールはきちんと表示されてマウスホイールの操作で問題なくスクロールはできるが、、
スクロールバーにマウスカーソルをあててクリックしてスクロールバーを動かす
という操作が、、Chrome ではできない!
IE11だったら問題なくできる!


tbody に、あるいは、ui-selectable に、
スタイル属性

touch-action: auto;

あるいは、スクロールバーなどのイベントは伝播させる manipulation を書いてみたけど、chrome ではダメだった。。

なぜか? chrome でも可能な方法はないのか?。。。。

2016-02-01 20:55 | 記事へ | コメント(0) |
| jQuery |
2016年01月27日(水)
Map.Entryの実装は用意しておく。
import java.util.MapEntry は、汎用的に実装を作っておくと良いかもしれない。

import java.util.Map;
/**
 * Map.Entry実装.
 */

public class Pair<K, V> implements Map.Entry<K, V>{
   public K key;
   public V value;
   public Pair(){}
   public Pair(K k, V v){
      key = k;
      value = v;
   }
   @Override
   public K getKey(){
      return key;
   }
   @Override
   public V getValue(){
      return value;
   }
   @Override
   public V setValue(V value){
      this.value = value;
      return this.value;
   }
}

myBatisSQLMapper で、この Pair List で検索結果を抽出するように書いて、、

@Select("SELECT code AS `key`, name AS value FROM items")
public List<Pair<String, String>> getItemPairs();

myBatis の SQLセッションインスタンス ====>> sqlSession とすると。。

Map<String, String> map = sqlSession.getMapper(Mapper.class).getItemPairs()
.stream().collect(()->new HashMap<String, String>(), (r, t)->r.put(t.key, t.value), (r, u)->r.putAll(u));

と、、一気に Map まで持ってきてしまう。


2016-01-27 20:56 | 記事へ | コメント(0) |
| Java / iBATIS(mybatis) |
次へ