ひとこと

自宅サーバのディスクが飛んだので新装オープン(2007年12月1日〜)


hns - 日記自動生成システム - Version 2.19.9

予定 TODO Link
  • 06/14(金) 日記の日

    先月 2024年05月
    1 2 3 4
    5 6 7 8 9 10 11
    12 13 14 15 16 17 18
    19 20 21 22 23 24 25
    26 27 28 29 30 31
    Namazu for hns による簡易全文検索
    詳しくは 詳細指定/ヘルプを参照して下さい
    検索式:

    2023年10月26日(木) [n年日記]

    [天気:晴れ]   

    #1 [UNIX][FreeBSD][Emacs] hnf-mode.el

    defmacroの「`」の使い方がずいぶん前に変わってるとして少しの修正を試みたが、ちゃんとエラーになる。
    ===================================================================
    RCS file: RCS/hnf-mode.el,v
    retrieving revision 1.1
    diff -u -r1.1 hnf-mode.el
    --- hnf-mode.el	2023/10/23 09:26:09	1.1
    +++ hnf-mode.el	2023/10/26 02:54:59
    @@ -3,7 +3,7 @@
     ;; Copyright (C) 1998-2001 by Akihiro Arisawa
     
     ;; Author: Akihiro Arisawa <ari@nijino.com>
    -;; Version: $Id: hnf-mode.el,v 1.1 2023/10/23 09:26:09 nakaji Exp $
    +;; Version: $Id: hnf-mode.el,v 1.2 2023/10/24 05:49:29 nakaji Exp nakaji $
     ;; Keywords: hnf nikki hns
     
     ;; This file is free software; you can redistribute it and/or modify
    @@ -23,9 +23,8 @@
     
     ;;; Code:
     
    -(defconst hnf-mode-version "2.5")
    +(defconst hnf-mode-version "2.5p1")
     
    -(eval-when-compile (require 'cl))
     (require 'poe)
     (require 'pcustom)
     
    @@ -68,7 +67,7 @@
     (defcustom hnf-index-name-list '("index.html" "index.shtml" "index.phtml")
       "File name as index."
       :group 'hnf
    -  :type 'list)
    +  :type '(list string))
     
     (defcustom hnf-mode-hook nil
       "Hook colled by `hnf-mode'."
    @@ -88,37 +87,37 @@
     (defcustom hnf-variable nil
       "Variable name used in hnf."
       :group 'hnf
    -  :type 'list)
    +  :type '(list string))
     
     (defcustom hnf-rlink nil
       "RLINK name used in hnf."
       :group 'hnf
    -  :type 'list)
    +  :type '(list string))
     
     (defcustom hnf-cat nil
       "Category name used in hnf."
       :group 'hnf
    -  :type 'list)
    +  :type '(list string))
     
     (defcustom hnf-group nil
       "Group name used in hnf."
       :group 'hnf
    -  :type 'list)
    +  :type '(list string))
     
     (defcustom hnf-class nil
       "Class name used in hnf."
       :group 'hnf
    -  :type 'list)
    +  :type '(list string))
     
     (defcustom hnf-mark nil
       "MARK name used in hnf."
       :group 'hnf
    -  :type 'list)
    +  :type '(list string))
     
     (defcustom hnf-alias nil
       "ALIAS name used in hnf."
       :group 'hnf
    -  :type 'list)
    +  :type '(list string))
     
     (defcustom hnf-font-lock-flag t
       "Non-nil means font-lock is used."
    @@ -174,7 +173,9 @@
     
     For example, hns-1.03pl0 or earlyer format is \"?%Y%m%h#%Y%m%d%N\",
     hns-2.10 or later format is \"?%Y%m%a&to=%Y%m%d%N#%Y%m%d%N\",
    -static format is \"%Y%m.html#%Y%m%d%N\".")
    +static format is \"%Y%m.html#%Y%m%d%N\"."
    +  :group 'hnf
    +  :type 'string)
     
     (defcustom hnf-sub-link-name-format "?%Y%m%d%N&to=%Y%m%d%NS%S#%Y%m%d%NS%S"
       "The format specification of SUB line link name in `hnf-get-link'.
    @@ -182,7 +183,9 @@
     
     For example, hns-1.03pl0 or earlyer format is \"?%Y%m%h#%Y%m%d%NS%S\",
     hns-2.10 or later format is \"?%Y%m%a&to=%Y%m%d%NS%S#%Y%m%d%NS%S\",
    -static format is \"%Y%m.html#%Y%m%d%NS%S\".")
    +static format is \"%Y%m.html#%Y%m%d%NS%S\"."
    +  :group 'hnf
    +  :type 'string)
     
     (defcustom hnf-hour-not-today 0
       "Till the specified hour, considered as the day before.
    @@ -279,7 +282,7 @@
         (sub . ((outline-level . 2)
     	    (face . hnf-sub-face)))))
     (defmacro hnf-command-type-get-variable (type key)
    -  (` (cdr (assq (, key) (cdr (assq (, type) hnf-command-type-alist))))))
    +  `(cdr (assq (, key) (cdr (assq (, type) hnf-command-type-alist)))))
     
     (defvar hnf-commands-table
       '(("NEW"	. ((type . new)
    @@ -373,25 +376,25 @@
       "Table of hnf commands.")
     
     (defmacro hnf-command-get-command (command-name)
    -  (` (assoc (, command-name) hnf-commands-table)))
    +  `(assoc (, command-name) hnf-commands-table))
     
     (defmacro hnf-command-get-type (command)
    -  (` (cdr (assq 'type (cdr (, command))))))
    +  `(cdr (assq 'type (cdr (, command)))))
     
     (defmacro hnf-command-get-variable (command key)
    -  (` (cond ((cdr (assq (, key) (cdr (, command)))))
    -	   ((hnf-command-type-get-variable (hnf-command-get-type (, command))
    -					   (, key))))))
    -								 
    +  `(cond ((cdr (assq (, key) (cdr (, command)))))
    +	 ((hnf-command-type-get-variable (hnf-command-get-type (, command))
    +					 (, key)))))
    +
     (defmacro hnf-command-get-arg-detail (command count)
    -  (` (let ((args (hnf-command-get-variable (, command) 'args)))
    -       (if (or (eq (nth (, count) args) 'any)
    -	       (eq (nth 1 args) 'any))
    -	   (nth 0 args)
    -	 (nth (, count) args)))))
    +  `(let ((args (hnf-command-get-variable (, command) 'args)))
    +     (if (or (eq (nth (, count) args) 'any)
    +	     (eq (nth 1 args) 'any))
    +	 (nth 0 args)
    +       (nth (, count) args))))
     
     (defmacro hnf-command-need-close-p (command)
    -  (` (assq 'need-close (cdr (, command)))))
    +  `(assq 'need-close (cdr (, command))))
     
     (defvar hnf-font-lock-keywords nil
       "Expressions to highlight in hnf mode.")
    
    Debugger entered--Lisp error: (invalid-function 'outline-level)
      ('outline-level)
      (assq ('outline-level) (cdr (command)))
      (cdr (assq ('outline-level) (cdr (command))))
      (cond ((cdr (assq ('outline-level) (cdr (command))))) ((cdr (assq (('outline-level)) (cdr (assq ((hnf-command-get-type ...)) hnf-command-type-alist))))))
      (if (cond ((cdr (assq ('outline-level) (cdr (command))))) ((cdr (assq (('outline-level)) (cdr (assq (...) hnf-command-type-alist)))))) (let* ((x (car command))) (if (member x outline-commands) outline-commands (setq outline-commands (cons x outline-commands)))))
      (while (setq command (car commands)) (if (cond ((cdr (assq ('outline-level) (cdr (command))))) ((cdr (assq ((...)) (cdr (assq ... hnf-command-type-alist)))))) (let* ((x (car command))) (if (member x outline-commands) outline-commands (setq outline-commands (cons x outline-commands))))) (setq commands (cdr commands)))
      (let ((commands hnf-commands-table) command outline-commands) (while (setq command (car commands)) (if (cond ((cdr (assq (...) (cdr ...)))) ((cdr (assq (...) (cdr ...))))) (let* ((x (car command))) (if (member x outline-commands) outline-commands (setq outline-commands (cons x outline-commands))))) (setq commands (cdr commands))) (mapconcat #'identity outline-commands "\\|"))
      (defvar hnf-outline-regexp (let ((commands hnf-commands-table) command outline-commands) (while (setq command (car commands)) (if (cond ((cdr (assq ... ...))) ((cdr (assq ... ...)))) (let* ((x (car command))) (if (member x outline-commands) outline-commands (setq outline-commands (cons x outline-commands))))) (setq commands (cdr commands))) (mapconcat #'identity outline-commands "\\|")) "Regular expression to match the beginning of heading.")
      eval-buffer(#<buffer  *load*> nil "/home/nakaji/elisp/hnf-mode.el" nil t)  ; Reading at buffer position 13597
      load-with-code-conversion("/home/nakaji/elisp/hnf-mode.el" "/home/nakaji/elisp/hnf-mode.el" nil t)
      autoload-do-load((autoload "hnf-mode" "Hyper Nikki File mode" t nil) hnf-mode)
      command-execute(hnf-mode record)
      execute-extended-command(nil "hnf-mode" "hnf-mo")
      funcall-interactively(execute-extended-command nil "hnf-mode" "hnf-mo")
      call-interactively(execute-extended-command nil nil)
      command-execute(execute-extended-command)
    

    2023年10月21日() [n年日記]

    [天気:雨時々くもり] 朝:おにぎり 昼:仕出し弁当 

    #1 [UNIX][FreeBSD] HNS再開

    hns-setupを実行後、defined(%array) な箇所のdefinedを全部消して回ったらとりあえず動いた。ただし、付属のhnf-mode.elは、Emacs 30では動かない。
    $ freebsd-version 
    13.2-RELEASE-p4
    $ httpd -v
    Server version: Apache/2.4.57 (FreeBSD)
    $ perl -v
    
    This is perl 5, version 34, subversion 1 (v5.34.1) built for amd64-freebsd-thread-multi
    $ pkg info -a | grep ja-hns
    ja-hns-2.19.9_1                Hyper NIKKI System, a CGI system for Electric Diary Interchange
    
    Debugger entered--Lisp error: (invalid-function `(cond ((cdr (assq (,key) (cdr (...))))) ((hnf-command-type-get-variable (hnf-command-get-type (,command)) (,key)))))
      (`(cond ((cdr (assq (,key) (cdr (...))))) ((hnf-command-type-get-variable (hnf-command-get-type (,command)) (,key)))))
      (lambda (command key) (`(cond ((cdr (assq ... ...))) ((hnf-command-type-get-variable (hnf-command-get-type ...) (...))))))(command 'face)
      apply((lambda (command key) (`(cond ((cdr (assq ... ...))) ((hnf-command-type-get-variable (hnf-command-get-type ...) (...)))))) (command 'face))
      macroexpand-1((hnf-command-get-variable command 'face) nil)
      macroexp-macroexpand((hnf-command-get-variable command 'face) nil)
      macroexp--expand-all((hnf-command-get-variable command 'face))
      macroexp--expand-all((setq face (hnf-command-get-variable command 'face)))
      macroexp--all-forms((if (setq face (hnf-command-get-variable command 'face)) (add-to-list 'ret1 (cons (concat "^" (car command) ".*") face)) (let ((args (hnf-command-get-variable command 'args)) (cnt 0) arg) (while (setq arg (car args)) (if (setq face (cond (... ...) (... ...) (... ...))) (add-to-list 'ret2 (list (concat "^" ... " +" ... "\\([^ ]+\\)") 1 face))) (setq cnt (1+ cnt) args (cdr args))))) 1)
      #f(compiled-function (form func) #<bytecode -0x627bbee1c67261>)(((if (setq face (hnf-command-get-variable command 'face)) (add-to-list 'ret1 (cons (concat "^" (car command) ".*") face)) (let ((args (hnf-command-get-variable command 'args)) (cnt 0) arg) (while (setq arg (car args)) (if (setq face (cond ... ... ...)) (add-to-list 'ret2 (list ... 1 face))) (setq cnt (1+ cnt) args (cdr args)))))) if)
      macroexp--expand-all((if (setq face (hnf-command-get-variable command 'face)) (add-to-list 'ret1 (cons (concat "^" (car command) ".*") face)) (let ((args (hnf-command-get-variable command 'args)) (cnt 0) arg) (while (setq arg (car args)) (if (setq face (cond (... ...) (... ...) (... ...))) (add-to-list 'ret2 (list (concat "^" ... " +" ... "\\([^ ]+\\)") 1 face))) (setq cnt (1+ cnt) args (cdr args))))))
      macroexp--all-forms((while (setq command (car commands)) (if (setq face (hnf-command-get-variable command 'face)) (add-to-list 'ret1 (cons (concat "^" (car command) ".*") face)) (let ((args (hnf-command-get-variable command 'args)) (cnt 0) arg) (while (setq arg (car args)) (if (setq face (cond ... ... ...)) (add-to-list 'ret2 (list ... 1 face))) (setq cnt (1+ cnt) args (cdr args))))) (add-to-list 'ret3 (if (hnf-command-need-close-p command) (concat (car command) "\\|/" (car command)) (car command))) (setq commands (cdr commands))) 1)
      #f(compiled-function (form func) #<bytecode -0x627bbee1c67261>)(((while (setq command (car commands)) (if (setq face (hnf-command-get-variable command 'face)) (add-to-list 'ret1 (cons (concat "^" (car command) ".*") face)) (let ((args (hnf-command-get-variable command ...)) (cnt 0) arg) (while (setq arg (car args)) (if (setq face ...) (add-to-list ... ...)) (setq cnt (1+ cnt) args (cdr args))))) (add-to-list 'ret3 (if (hnf-command-need-close-p command) (concat (car command) "\\|/" (car command)) (car command))) (setq commands (cdr commands)))) while)
      macroexp--expand-all((while (setq command (car commands)) (if (setq face (hnf-command-get-variable command 'face)) (add-to-list 'ret1 (cons (concat "^" (car command) ".*") face)) (let ((args (hnf-command-get-variable command 'args)) (cnt 0) arg) (while (setq arg (car args)) (if (setq face (cond ... ... ...)) (add-to-list 'ret2 (list ... 1 face))) (setq cnt (1+ cnt) args (cdr args))))) (add-to-list 'ret3 (if (hnf-command-need-close-p command) (concat (car command) "\\|/" (car command)) (car command))) (setq commands (cdr commands))))
      macroexp--all-forms(((while (setq command (car commands)) (if (setq face (hnf-command-get-variable command 'face)) (add-to-list 'ret1 (cons (concat "^" (car command) ".*") face)) (let ((args (hnf-command-get-variable command ...)) (cnt 0) arg) (while (setq arg (car args)) (if (setq face ...) (add-to-list ... ...)) (setq cnt (1+ cnt) args (cdr args))))) (add-to-list 'ret3 (if (hnf-command-need-close-p command) (concat (car command) "\\|/" (car command)) (car command))) (setq commands (cdr commands))) (append ret1 ret2 (list (cons (concat "^\\(" (mapconcat #'identity ret3 "\\|") "\\)\\>") hnf-command-face)) (list '(eval list (concat "^\\(" (mapconcat ... hnf-variable "\\|") "\\)\\>") '(0 ...))) (list (cons "~$" hnf-tilde-face)))))
      macroexp--expand-all((let ((commands hnf-commands-table) command type face ret1 ret2 ret3) (while (setq command (car commands)) (if (setq face (hnf-command-get-variable command 'face)) (add-to-list 'ret1 (cons (concat "^" (car command) ".*") face)) (let ((args (hnf-command-get-variable command ...)) (cnt 0) arg) (while (setq arg (car args)) (if (setq face ...) (add-to-list ... ...)) (setq cnt (1+ cnt) args (cdr args))))) (add-to-list 'ret3 (if (hnf-command-need-close-p command) (concat (car command) "\\|/" (car command)) (car command))) (setq commands (cdr commands))) (append ret1 ret2 (list (cons (concat "^\\(" (mapconcat #'identity ret3 "\\|") "\\)\\>") hnf-command-face)) (list '(eval list (concat "^\\(" (mapconcat ... hnf-variable "\\|") "\\)\\>") '(0 ...))) (list (cons "~$" hnf-tilde-face)))))
      macroexp--expand-all((setq hnf-font-lock-keywords (let ((commands hnf-commands-table) command type face ret1 ret2 ret3) (while (setq command (car commands)) (if (setq face (hnf-command-get-variable command 'face)) (add-to-list 'ret1 (cons (concat "^" ... ".*") face)) (let ((args ...) (cnt 0) arg) (while (setq arg ...) (if ... ...) (setq cnt ... args ...)))) (add-to-list 'ret3 (if (hnf-command-need-close-p command) (concat (car command) "\\|/" (car command)) (car command))) (setq commands (cdr commands))) (append ret1 ret2 (list (cons (concat "^\\(" (mapconcat ... ret3 "\\|") "\\)\\>") hnf-command-face)) (list '(eval list (concat "^\\(" ... "\\)\\>") '...)) (list (cons "~$" hnf-tilde-face))))))
      macroexp--all-forms((lambda nil "Create font-lock-keywords from `hnf-commands-table'." (setq hnf-font-lock-keywords (let ((commands hnf-commands-table) command type face ret1 ret2 ret3) (while (setq command (car commands)) (if (setq face (hnf-command-get-variable command ...)) (add-to-list 'ret1 (cons ... face)) (let (... ... arg) (while ... ... ...))) (add-to-list 'ret3 (if (hnf-command-need-close-p command) (concat ... "\\|/" ...) (car command))) (setq commands (cdr commands))) (append ret1 ret2 (list (cons (concat "^\\(" ... "\\)\\>") hnf-command-face)) (list '(eval list ... ...)) (list (cons "~$" hnf-tilde-face)))))) 2)
      macroexp--expand-all(#'(lambda nil "Create font-lock-keywords from `hnf-commands-table'." (setq hnf-font-lock-keywords (let ((commands hnf-commands-table) command type face ret1 ret2 ret3) (while (setq command (car commands)) (if (setq face ...) (add-to-list ... ...) (let ... ...)) (add-to-list 'ret3 (if ... ... ...)) (setq commands (cdr commands))) (append ret1 ret2 (list (cons ... hnf-command-face)) (list '...) (list (cons "~$" hnf-tilde-face)))))))
      macroexp--all-forms((defalias 'hnf-font-lock-keywords-creation #'(lambda nil "Create font-lock-keywords from `hnf-commands-table'." (setq hnf-font-lock-keywords (let ((commands hnf-commands-table) command type face ret1 ret2 ret3) (while (setq command ...) (if ... ... ...) (add-to-list ... ...) (setq commands ...)) (append ret1 ret2 (list ...) (list ...) (list ...)))))) 1)
      #f(compiled-function (form func) #<bytecode -0x627bbee1c67261>)(((defalias 'hnf-font-lock-keywords-creation #'(lambda nil "Create font-lock-keywords from `hnf-commands-table'." (setq hnf-font-lock-keywords (let (... command type face ret1 ret2 ret3) (while ... ... ... ...) (append ret1 ret2 ... ... ...)))))) defalias)
      macroexp--expand-all((defalias 'hnf-font-lock-keywords-creation #'(lambda nil "Create font-lock-keywords from `hnf-commands-table'." (setq hnf-font-lock-keywords (let ((commands hnf-commands-table) command type face ret1 ret2 ret3) (while (setq command ...) (if ... ... ...) (add-to-list ... ...) (setq commands ...)) (append ret1 ret2 (list ...) (list ...) (list ...)))))))
      macroexpand--all-toplevel((defalias 'hnf-font-lock-keywords-creation #'(lambda nil "Create font-lock-keywords from `hnf-commands-table'." (setq hnf-font-lock-keywords (let ((commands hnf-commands-table) command type face ret1 ret2 ret3) (while (setq command ...) (if ... ... ...) (add-to-list ... ...) (setq commands ...)) (append ret1 ret2 (list ...) (list ...) (list ...)))))))
      internal-macroexpand-for-load((defalias 'hnf-font-lock-keywords-creation #'(lambda nil "Create font-lock-keywords from `hnf-commands-table'." (setq hnf-font-lock-keywords (let ((commands hnf-commands-table) command type face ret1 ret2 ret3) (while (setq command ...) (if ... ... ...) (add-to-list ... ...) (setq commands ...)) (append ret1 ret2 (list ...) (list ...) (list ...)))))) t)
      eval-buffer(#<buffer  *load*> nil "/home/nakaji/elisp/hnf-mode.el" nil t)  ; Reading at buffer position 13119
      load-with-code-conversion("/home/nakaji/elisp/hnf-mode.el" "/home/nakaji/elisp/hnf-mode.el" nil t)
      autoload-do-load((autoload "hnf-mode" "Hyper Nikki File mode" t nil) hnf-mode)
      command-execute(hnf-mode record)
      execute-extended-command(nil "hnf-mode" "hnf-mo")
      funcall-interactively(execute-extended-command nil "hnf-mode" "hnf-mo")
      call-interactively(execute-extended-command nil [27 120])
      (if bind (call-interactively bind nil keys) (let (message-log-max) (message "%s is undefined" (key-description keys)) (undefined)))
      (let* ((keys (read-key-sequence-vector nil)) (bind (key-binding keys t))) (setq last-command-event (aref keys (1- (length keys)))) (setq this-command bind) (if bind (call-interactively bind nil keys) (let (message-log-max) (message "%s is undefined" (key-description keys)) (undefined))))
      (progn (mozc-disable-keymap) (and last-event (setq unread-command-events (cons last-event unread-command-events))) (let* ((keys (read-key-sequence-vector nil)) (bind (key-binding keys t))) (setq last-command-event (aref keys (1- (length keys)))) (setq this-command bind) (if bind (call-interactively bind nil keys) (let (message-log-max) (message "%s is undefined" (key-description keys)) (undefined)))))
      (unwind-protect (progn (mozc-disable-keymap) (and last-event (setq unread-command-events (cons last-event unread-command-events))) (let* ((keys (read-key-sequence-vector nil)) (bind (key-binding keys t))) (setq last-command-event (aref keys (1- (length keys)))) (setq this-command bind) (if bind (call-interactively bind nil keys) (let (message-log-max) (message "%s is undefined" (key-description keys)) (undefined))))) (mozc-enable-keymap))
      mozc-fall-back-on-default-binding(escape)
      (cond ((null output) (mozc-clean-up-session) (mozc-abort) (signal 'mozc-response-error output)) ((mozc-protobuf-get output 'consumed) (let ((result (mozc-protobuf-get output 'result)) (preedit (mozc-protobuf-get output 'preedit)) (candidates (mozc-protobuf-get output 'candidates))) (if (not (or result preedit)) (mozc-clean-up-changes-on-buffer) (if result (progn (mozc-clean-up-changes-on-buffer) (if (eq ... ...) nil (message "mozc.el: Unknown result type") (signal ... ...)) (insert (mozc-protobuf-get result ...)))) (if preedit (mozc-preedit-update preedit candidates) (mozc-preedit-clear)) (if candidates (mozc-candidate-update candidates) (mozc-candidate-clear))))) (t (mozc-clean-up-changes-on-buffer) (mozc-fall-back-on-default-binding event)))
      (let ((output (mozc-send-key-event event))) (cond ((null output) (mozc-clean-up-session) (mozc-abort) (signal 'mozc-response-error output)) ((mozc-protobuf-get output 'consumed) (let ((result (mozc-protobuf-get output 'result)) (preedit (mozc-protobuf-get output 'preedit)) (candidates (mozc-protobuf-get output 'candidates))) (if (not (or result preedit)) (mozc-clean-up-changes-on-buffer) (if result (progn (mozc-clean-up-changes-on-buffer) (if ... nil ... ...) (insert ...))) (if preedit (mozc-preedit-update preedit candidates) (mozc-preedit-clear)) (if candidates (mozc-candidate-update candidates) (mozc-candidate-clear))))) (t (mozc-clean-up-changes-on-buffer) (mozc-fall-back-on-default-binding event))))
      (cond ((or (integerp event) (symbolp event)) (let ((output (mozc-send-key-event event))) (cond ((null output) (mozc-clean-up-session) (mozc-abort) (signal 'mozc-response-error output)) ((mozc-protobuf-get output 'consumed) (let ((result ...) (preedit ...) (candidates ...)) (if (not ...) (mozc-clean-up-changes-on-buffer) (if result ...) (if preedit ... ...) (if candidates ... ...)))) (t (mozc-clean-up-changes-on-buffer) (mozc-fall-back-on-default-binding event))))) (t (mozc-fall-back-on-default-binding event)))
      mozc-handle-event(escape)
      funcall-interactively(mozc-handle-event escape)
      call-interactively(mozc-handle-event nil nil)
      command-execute(mozc-handle-event)
    

    以上、2 日分です。
    タイトル一覧
    カテゴリ分類
    Powered by hns-2.19.9, HyperNikkiSystem Project

    NAKAJI Hiroyuki