by shigemk2

当面は技術的なことしか書かない

AL32UTF8

UTF-8、UTF8、AL32UTF8 の違いは何ですか? UTF-8 は可変幅のエンコーディングであり、7 ビット ASCII の厳密なスーパーセッ トです。UTF-8 では、1 つの Unicode 文字は 1 バイト、2 バイト、3 バイトまたは 4 バイトです。UTF8 は、Unicode 3.0 までの UTF-8 エンコーディングのみをサポー トします。AL32UTF8 は、最新の Unicode 標準で定義された補助文字をサポート する Oracle Unicode キャラクタ・セットです。

なんかわかりづらいけどUTF8がキャラクタセットで、UTF-8はキャラクタセットではない。 最新Unicodeをサポートしているので、特に理由がなかったらUTF8ではなくAL32UTF8を使うのが良い。

http://otndnld.oracle.co.jp/products/database/oracle10g/application_development/pdf/TWP_AppDev_Unicode_10gR2.pdf

OTN Japan - Oracle9i 物理設計:第1部 DB全体の設計

2018 SQL Puzzle 1

SQLパズル 第2版~プログラミングが変わる書き方/考え方

SQLパズル 第2版~プログラミングが変わる書き方/考え方

メモ。オリジナルのクエリをそのまま実行してもエラーになるのでいくつか直している

Oracle EE 12.1.0.2.v10

-- 変更点
-- INTERVAL '365' DAYは12.1ではエラー ORA-00920: invalid relational operator になる
-- INTERVALが364になることもあるので=を<=にした
-- メモ
-- CONSTRAINT 制約 (EXTRACTとあわせて)
-- start_dateはfiscal_yearより1年前
-- start_dateは10/1
-- end_dateは9/30
CREATE TABLE FiscalYearTable1
(fiscal_year INTEGER NOT NULL PRIMARY KEY,
 start_date DATE NOT NULL,
    CONSTRAINT valid_start_date
    CHECK((EXTRACT (YEAR FROM start_date) = fiscal_year - 1)
               AND (EXTRACT (MONTH FROM start_date) = 10)
               AND (EXTRACT (DAY FROM start_date) = 01)),
 end_date DATE NOT NULL,
    CONSTRAINT valid_end_date
    CHECK((EXTRACT (YEAR FROM end_date) = fiscal_year)
               AND (EXTRACT (MONTH FROM end_date) = 09)
               AND (EXTRACT (DAY FROM end_date) = 30)),
    CONSTRAINT valid_interval
    CHECK ((end_date - start_date) <= 365));

INSERT INTO FiscalYearTable1 VALUES(1995, DATE '1994-10-01', DATE '1995-09-30');
INSERT INTO FiscalYearTable1 VALUES(1997, DATE '1996-10-01', DATE '1997-09-30');
INSERT INTO FiscalYearTable1 VALUES(1998, DATE '1997-10-01', DATE '1998-09-30');

-- 終了日が8月
INSERT INTO FiscalYearTable1 VALUES(1996, DATE '1995-10-01', DATE '1996-08-30');
-- 開始日が2日
INSERT INTO FiscalYearTable1 VALUES(1999, DATE '1998-10-02', DATE '1999-09-30');

http://www.geocities.jp/mickindex/database/db_support_sqlpuzzle.html#LocalLink-p1

brew PR 3668

lines_cop.rbの変更で、homebrewのFormulaのdepends_onの書き方が一部変わった。 github.com

たとえばPython3は、このように書かないといけない。

  depends_on "python3"

以前と同じようにこう書くと、

  depends_on :python3

auditしたときに以下のようなエラーになる。

$ brew audit --strict ./Formula/you-get.rb
you-get:
  * C: 17: col 3: :python3 is deprecated. Usage should be "python3".
Error: 1 problem in 1 formula

このようなエラーを出すように指示しているのがLibrary/Homebrew/rubocops/lines_cop.rbで、去年末くらいにpython3とかperlとかが該当するようになった。でもドキュメントにこの変更が反映されていない。

スクショ

f:id:shigemk2:20180112145247p:plain

該当ドキュメント

HomebrewのrubydocにはYARDが使われており、関数のコメントをドキュメントに変換してくれている。今回修正すべきドキュメントはそのままlines_cop.rbに記載されていたので、そこを直した。

github.com

(メンテナーが追加でドキュメントを修正してました。あと他の方も別のドキュメントで プルリクを投げています)

max

max

Oracleだけど。たとえばこういうクエリがあったとして、抽出されるデータは全レコードの中からの最大値の入ったレコードではなく、部門別の最大値。だから、複数レコードが返って来る可能性は大いにある。

SQL> select dept, MAX(salary)
  2  from max_sample group by dept;
name dept salary
鈴木 管理部 300000
高橋 管理部 400000
佐藤 開発部 500000
小林 開発部 500000
山本 開発部 200000
青木 開発部 NULL

ldconfig

ldconfig

http://www.infraeye.com/study/linuxz6.html

他のプログラムから利用するプログラム

ライブラリ 説明 メリット デメリット
静的ライブラリ プログラム作成時にその実行ファイル内に組み込まれたライブラリ 1つのプログラムだけで動作するので別環境で動作可 プログラムのファイルが大きい
共有ライブラリ プログラム実行時にロードされて複数のプログラム間で共有 プログラムのサイズが小さい プログラム実行時に適切に配置されたライブラリが必要

プログラムからライブラリの機能を呼び出す

リンク 説明
スタティックリンク プログラム作成時にライブラリの機能をプログラム本体に組み込む。静的ライブラリ
ダイナミックリンク プログラム実行時にライブラリの機能を呼び出す。共有ライブラリ

http://itpro.nikkeibp.co.jp/article/COLUMN/20140127/532504/

  • ldconfigで共有ライブラリのリンク情報を作成/更新する
    • キャッシュファイルからライブラリを呼び出す
    • confファイル /lib /usr/lib /etc/ld.so.conf.d/* の設定を読み込む

ldconfig creates the necessary links and cache to the most recent shared libraries found in the directories specified on the command line, in the file /etc/ld.so.conf, and in the trusted directories, /lib and /usr/lib (on some 64-bit architectures such as x86-64, lib and /usr/lib are the trusted directories for 32-bit libraries, while /lib64 and /usr/lib64 are used for 64-bit libraries).

Oracleのアレ

https://askubuntu.com/questions/159939/how-to-install-sqlplus http://d.hatena.ne.jp/rougeref/20160126

  • Ubuntu 17.10
  • 共有ライブラリの情報がないと怒られる sqlplus: error while loading shared libraries: libsqlplus.so: cannot open shared object file: No such file or directory
  • /etc/ld.so.conf.d/oracle-lib.conf を作成して、/usr/lib/oracle/#{version}/client/lib を書き込む
  • ldconfigで共有ライブラリの情報を追加する

brew 1.4.3

brew 1.4.3

lines_copの基準がちょっとよくわからない

  • upgrade: skip formula if upgrade fails due to unsatisfied requirement.
  • Use hgpath instead of "hg" to fix --HEAD hg builds
  • docs: fix audit warning in Python formula example
  • Update formulae.brew.sh URL (@alyssais)
  • lines_cop: flag depends_on :perl => "1.0".
  • audit: pass explicit sort to handle APFS
  • pathname: Use CI env variable rather than TRAVIS
  • LD64Dependency is needed on macOS only

url-http-create-request Multibyte text in HTTP request

25.3.2 で死ぬやつ。url-retrieveで日本語データが入ったJSONをPOSTすると死ぬ。

url-http-create-request: Multibyte text in HTTP request

(defun url-http-post (url args)
  "Send ARGS to URL as a POST request."
  (let (
        (response-string nil)
        (url-request-method "POST")
        (url-request-extra-headers
         '(("Content-Type" . "application/json")))
        (url-request-data
         (json-encode args)))
    (switch-to-buffer
     (url-retrieve-synchronously url))
    (goto-char (point-min))
    (re-search-forward "\n\n")
    (setq response-string
          (buffer-substring-no-properties (point) (point-max)))
    (kill-buffer (current-buffer))
    response-string))
(url-http-post "http://httpbin.org/post"  '(("hoge" . "fuga") ("piyo" . "鍵")))

bug#23750: 25.0.95; bug in url-retrieve or json.el

Multibyte text in HTTP request

url-http-create-request Multibyte text in HTTP request

Emacs25からurl-http-create-requestするとき、マルチバイト文字列データをリクエストしようとするとエラーになる

** The URL package now insists on sending only unibyte strings to server This means packages that use URL cannot bind 'url-request-data' to multibyte strings. If non-ASCII characters should be part of the URL payload, then 'url-request-data' should be encoded to become a unibyte string.

https://lists.gnu.org/archive/html/bug-gnu-emacs/2016-08/msg00031.html

http://misohena.jp/blog/2016-10-27-problem-org2blog-multibyte-text.html

たとえばrequest.elで、こんなのを投げるとエラーになる。url-retrieveをバックエンドにしてrequestを投げると、 Multibyte text in HTTP request エラーがでる。

(setq request-backend 'url-retrieve)
  (request
   "http://httpbin.org/put"
   :type "PUT"
   :data (json-encode '(("key" . "値1") ("key2" . "値2")))
   :headers '(("Content-Type" . "application/json"))
   :parser 'json-read
   :success (cl-function
             (lambda (&key data &allow-other-keys)
               (message "I sent: %S" (assoc-default 'json data)))))