OpenCage Geocorder

GeocorderのAPIはGoogleを使ってましたが、課金されるので、フリーなのを探してたところ見つけました。

SDKも多数あってチュートリアルも詳しいです。https://opencagedata.com/code

経緯度を渡すと、タイムゾーンも取得できます。
日本の郵便番号を渡すと、誤結果が多いので地名で渡してます。

デモページでのレスポンス
OpenCage Geocorder : https://opencagedata.com/

HTTP Status code: 200

HTTP Headers:
  Content-Type: application/json; charset=utf-8
  access-control-allow-origin: *
  X-RateLimit-Limit: 2500
  X-RateLimit-Remaining: 2499
  X-RateLimit-Reset: 1589155200

Content:
{
  "documentation": "https://opencagedata.com/api",
  "licenses": [
    {
      "name": "see attribution guide",
      "url": "https://opencagedata.com/credits"
    }
  ],
  "rate": {
    "limit": 2500,
    "remaining": 2499,
    "reset": 1589155200
  },
  "results": [
    {
      "annotations": {
        "DMS": {
          "lat": "31° 47' 33.88056'' N",
          "lng": "35° 13' 4.46736'' E"
        },
        "MGRS": "36RYA0998619605",
        "Maidenhead": "KM71ot60dg",
        "Mercator": {
          "x": 3920439.541,
          "y": 3713626.637
        },
        "OSM": {
          "edit_url": "https://www.openstreetmap.org/edit?node=2754824262#map=17/31.79274/35.21791",
          "note_url": "https://www.openstreetmap.org/note/new#map=17/31.79274/35.21791&layers=N",
          "url": "https://www.openstreetmap.org/?mlat=31.79274&mlon=35.21791#map=17/31.79274/35.21791"
        },
        "UN_M49": {
          "regions": {
            "ASIA": "142",
            "IL": "376",
            "WESTERN_ASIA": "145",
            "WORLD": "001"
          },
          "statistical_groupings": [
            "MEDC"
          ]
        },
        "callingcode": 972,
        "currency": {
          "alternate_symbols": [
            "ש״ח",
            "NIS"
          ],
          "decimal_mark": ".",
          "html_entity": "₪",
          "iso_code": "ILS",
          "iso_numeric": "376",
          "name": "Israeli New Sheqel",
          "smallest_denomination": 10,
          "subunit": "Agora",
          "subunit_to_unit": 100,
          "symbol": "₪",
          "symbol_first": 1,
          "thousands_separator": ","
        },
        "flag": "🇮🇱",
        "geohash": "sv9hc7syhtphz8kd165p",
        "qibla": 157.26,
        "roadinfo": {
          "drive_on": "right",
          "road": "דויד חזן",
          "speed_in": "km/h"
        },
        "sun": {
          "rise": {
            "apparent": 1589078820,
            "astronomical": 1589073300,
            "civil": 1589077200,
            "nautical": 1589075340
          },
          "set": {
            "apparent": 1589127900,
            "astronomical": 1589133360,
            "civil": 1589129460,
            "nautical": 1589131380
          }
        },
        "timezone": {
          "name": "Asia/Jerusalem",
          "now_in_dst": 1,
          "offset_sec": 10800,
          "offset_string": "+0300",
          "short_name": "IDT"
        },
        "what3words": {
          "words": "とつじょ・はずれて・あなぐま"
        }
      },
      "bounds": {
        "northeast": {
          "lat": 31.7928446,
          "lng": 35.2180076
        },
        "southwest": {
          "lat": 31.7926446,
          "lng": 35.2178076
        }
      },
      "components": {
        "ISO_3166-1_alpha-2": "IL",
        "ISO_3166-1_alpha-3": "ISR",
        "_category": "building",
        "_type": "building",
        "city": "エルサレム",
        "continent": "Asia",
        "country": "イスラエル",
        "country_code": "il",
        "house_number": "11",
        "neighbourhood": "קרית בעלז",
        "road": "דויד חזן",
        "state": "מחוז ירושלים",
        "suburb": "הבוכרים"
      },
      "confidence": 10,
      "formatted": "דויד חזן 11, エルサレム, イスラエル",
      "geometry": {
        "lat": 31.7927446,
        "lng": 35.2179076
      }
    }
  ],
  "status": {
    "code": 200,
    "message": "OK"
  },
  "stay_informed": {
    "blog": "https://blog.opencagedata.com",
    "twitter": "https://twitter.com/OpenCage"
  },
  "thanks": "For using an OpenCage API",
  "timestamp": {
    "created_http": "Sun, 10 May 2020 01:59:15 GMT",
    "created_unix": 1589075955
  },
  "total_results": 1
}

 

フリーでの制限は、1リクエスト/秒, 2500リクエスト/日 となってます。

ケータイ用インドネシア語辞典 2020年版

昔、公開したインドネシア語辞書ページが、都合によりドメイン移転することになり、移転先用の改修を試みましたが、設計が古くうまく動かないので、リニューアルしました。

見た目、機能はあまり変わりません。

旧版との違いとして、検索結果はメモとして端末側で保存するので、自分で消さない限り、ずっと残るので、学習用単語カードな使い方ができるかと思います。

旧版からの追加機能としては、単語の音声出力が出来ます。

特徴としては、

1) 印 => 日 検索で、ローマ字が出る
2) 日 => 印 検索で、ひらがな、ローマ字が使える
3) 検索結果をローカルに記憶して、一覧で見れる

だけです。

辞書データは下サイトの運営者作成のを、使わせて頂いてます。

https://indo-ka.sakura.ne.jp/

< URL >

印日 : https://psn.saoline.co/kamus20/katainp.jsp

日印 : https://psn.saoline.co/kamus20/tangoinp.jsp

< 画面例 >

印日

日印

メモ

MySQL 8系 でのJDBC設定

そろそろ、本番環境のMySQLを8系に上げないといけないと思い、開発環境を8系にして、MyBatisで試してたところ、いきなり最初の connect でエラーが出て使えないので、調べてましたところ、

JDBCの設定記述を変えないといけないことがわかり、無事解決しました。

ここで教えて頂く : https://qiita.com/syoki/items/3d82ef00300868353572

< MyBatis Config UNPOOLED 設定例 >


  <properties>     
    
    <!-- 5.7 -->
    <!--<property name="msdriver" value="com.mysql.jdbc.Driver" />--> 
    <!-- 8 -->
    <property name="msdriver" value="com.mysql.cj.jdbc.Driver" />   
    <!-- 5.7 -->  
    <!--<property name="msurl" value="jdbc:mysql://localhost:3306/dbname?characterEncoding=utf8&amp;autoReconnect=true&amp;useSSL=false" />-->
    <!-- 8 -->
    <property name="msurl" value="jdbc:mysql://localhost/dnksg?characterEncoding=utf8&amp;autoReconnect=true&amp;useSSL=false&amp;serverTimezone=GMT%2B9&amp;rewriteBatchedStatements=true" />     
    
    <property name="msusername" value="???????" />     
    <property name="mspassword" value="??????????" />   
    

    
  </properties>

Javascriptで曜日

たいていの場合、曜日の出力はサーバー側でMySQLのUDFとか、Javaのメソッドで行ってましたが、最初は曜日が必要なかったのですが、後から必要になり、サーバー側入れ替えが面倒とか、権限がないとかの場合もあるので、調べてたら出来ました。

ここで教えて頂く: https://www.nishishi.com/javascript-tips/get-day-of-the-week.html

コード例

今更ながらアローを使い始める。


    // 日本語曜日関数 //
    let getDofWJ = (dt) => {
      let dtobj = new Date(dt);
      let wv = dtobj.getDay();
      return ["日", "月", "火", "水", "木", "金", "土"][wv];
    };

Javascript ES6 のクラスを使ってみる

IE11を使ってる人も多く、まだ変化が多いので、ECMA Scriptは使ってませんでしたが、Win7のサポート終了でIE11からEdgeへの移行もすすむと思いますので、最近、使い始めてみました。

まだ、Javaのクラスと同等な使い方出来なくて、とまどう部分も多いですが、コード量減らすことができて、重宝しております。

< 作ったコード例 >

あちこちに書いたAJaxの処理をクラスに入れてみました。


class MyAjax {
  
  /**
   * コンストラクタ
   * @param {type} url URL
   * @param {type} mapdata リクエストパラメータ
   * @param {type} datatype 応答データタイプ (デフォルトはjson)
   * @param {type} type リクエストメソッド (デフォルトはPOST)
   * @param {type} cache キャッシュ (デフォルトはなし)
   * @param {type} async 非同期 (デフォルトは同期)
   * @returns {MyAjax}
   */
  constructor(url, mapdata, datatype = "json", type = "POST", cache = false, async = false) {
    
    this.url = url;
    this.mapdata = mapdata;
    this.datatype = datatype;
    this.type = type;
    this.cache = cache;
    this.async = async;
  }
  
  // 実行 //
  exec() {
    
    let rtn;
    $.ajax({
      url: this.url,
      type: this.type,
      cache: this.cache,
      dataType: this.datatype,
      async: false,
      data: this.mapdata,
      success: function (jsnortxt) {
        rtn = jsnortxt;
      },
      error: function (xhr, ts, err) {
        rtn = "ERROR";
      }
    });
    return rtn;
  }

}

呼び出し側


// -C 検索
let aJax = new MyAjax("GetJPFromID", {tblid: tblid, mvtp: mvtp});
let katakata = [];
katakata = aJax.exec();

MySQL 漢字時刻文字列整数秒変換関数

Jsonでリクエストされた漢字の時刻を秒数に変換して MySQL に登録する必要あり作ってみましたが、
Javascriptであらかじめ変換してからリクエストすることにしたので、使ってません。
動作確認出来てないですが、必要な方はご利用下さい。

CREATE DEFINER=`root`@`localhost` FUNCTION `fc_intsecond_fromkanji`(
	`kanji` varchar(20)
)
RETURNS int(11)
LANGUAGE SQL
NOT DETERMINISTIC
CONTAINS SQL
SQL SECURITY DEFINER
COMMENT '漢字時間文字列整数秒数取得'
BEGIN

DECLARE CNT_SEP TINYINT DEFAULT 0;
DECLARE HMSTXT VARCHAR(20) DEFAULT '';
DECLARE FMTTXT VARCHAR(20) DEFAULT '';
DECLARE CHKNUM TINYINT DEFAULT 0;
DECLARE TP     VARCHAR(3) DEFAULT '';
DECLARE H SMALLINT DEFAULT 0;
DECLARE M TINYINT DEFAULT 0;
DECLARE S TINYINT DEFAULT 0;


SET HMSTXT = REPLACE(REPLACE(REPLACE(kanji, '時間', 'H'), '分', 'M'), '秒', 'S');
SET FMTTXT = REPLACE(REPLACE(REPLACE(kanji, '時間', ':'), '分', ':'), '秒', '');

SET TP = 
REPLACE(
REPLACE(
REPLACE(
REPLACE(
REPLACE(
REPLACE(
REPLACE(
REPLACE(
REPLACE(
REPLACE(HMSTXT, '0', ''),
'1', ''), '2', ''), '3', ''), '4', ''), '5', ''), '6', ''), '7', ''), '8', ''), '9', '')
;


insert into tst (fld0, fld1) values (HMSTXT, TP);

IF (TP = 'HMS') THEN
  SET H = CAST(fc_delim_idxtxt(FMTTXT, 1, ':') AS UNSIGNED);
	SET M = CAST(fc_delim_idxtxt(FMTTXT, 2, ':') AS UNSIGNED);
	SET S = CAST(fc_delim_idxtxt(FMTTXT, 3, ':') AS UNSIGNED);
END IF;

/**/ 
IF (TP = 'HS') THEN
  SET H = CAST(fc_delim_idxtxt(FMTTXT, 1, ':') AS UNSIGNED);
	SET S = CAST(fc_delim_idxtxt(FMTTXT, 2, ':') AS UNSIGNED);
END IF;
IF (TP = 'HM') THEN
	SET H = CAST(fc_delim_idxtxt(FMTTXT, 1, ':') AS UNSIGNED);
	SET M = CAST(fc_delim_idxtxt(FMTTXT, 2, ':') AS UNSIGNED);
END IF;
IF (TP = 'MS') THEN
  SET M = CAST(fc_delim_idxtxt(FMTTXT, 1, ':') AS UNSIGNED);
	SET S = CAST(fc_delim_idxtxt(FMTTXT, 2, ':') AS UNSIGNED);
END IF;

/**/ 
IF (TP = 'H') THEN
	SET H = CAST(fc_delim_idxtxt(FMTTXT, 1, ':') AS UNSIGNED);
END IF;
IF (TP = 'M') THEN
	SET M = CAST(fc_delim_idxtxt(FMTTXT, 1, ':') AS UNSIGNED);
END IF;
IF (TP = 'S') THEN
  SET S = CAST(FMTTXT AS UNSIGNED);
END IF;

	 
RETURN H * 3600 + M * 60 + S;


END

Javascript クラスの static がブラウザによってはエラーとなる

JavascriptのES6クラスについては、IE11で動作しない、ブラウザによっては動かないのがあるなどの理由で、利用をためらってましたが、

Windows10の普及でIE11もなくなると思うので使い始めました。

同じような重複したコードが排除出来て、うれしいですが、まだ仕様が確定してないのか、動かない部分ありましたので、備忘録しておきます。

Vilaldy, Brave, Firefox で動かなかったコード (Edge, Chromeでは動く)


static STATICTEXT = "スタティック";

 

動いたコード


static STATICTEXT () {
return "スタティック";
}