RegulateDateText (dateText)

Posted on May 15th, 2016

3年前に作った FileMaker カスタム関数。
全角だったりスラッシュ抜けてたり昭和とか元年とかの適当な日付を表す文字列をちゃんとした日付にする…という機能の他に、tomorrow だの yesterday だの sunday だのといった相対的な日付を表す単語も判断して、自動的にその日付が入力される。

使い方は…OnObjectValidate で、
フィールド設定 [ RegulateDateText ( Get ( アクティブフィールド内容 ) ) ]
※ [ターゲットフィールドを指定]のチェックをオフ
というだけの1行のスクリプトを、Kick してやるだけでOK!

/*
created 2013/05/14 12:58:19 by bison.
modified 2013/05/16 05:35:25 by bison.
-------------------------------------
 PURPOSE
-------------------------------------
以下のどの場合も、1961/03/16 の日付として扱う
※ 数値やスラッシュが全角でもOK
※ スラッシュの代わりにピリオドで書かれていてもOK
  1961/3/16
  19610316
  昭和36/3/16
  昭36/03/16
  s360316
  昭和360316

また、以下のテキストも大文字小文字全角半角に関わらず、
自動的に日付に変換する
  today
  tomorrow
  yesterday
  sun もしくは sunday
  mon もしくは monday
  tue もしくは tuesday
  wed もしくは wednesday
  thu もしくは thursday
  fri もしくは friday
  sat もしくは saturday
※ 曜日はすべて直近未来の曜日
-------------------------------------
 PARAMETER
-------------------------------------
dataText --- 日付を表す上記例のようなテキスト
-------------------------------------
 CAUTION
-------------------------------------
日付フィールドの機能を拡張するために、
OnObjectValidate で使うことを想定。
-------------------------------------
  START
-------------------------------------
*/

Let ( [

// 前後のゴミとって英数は半角大文字
dateText = Upper ( RomanHankaku ( Trim ( dateText ) ) ) ;

// 昭和・昭・元・年・月・日・.(ピリオド)などの文字を処理
// この部分は、シャモピーの YearNameToDate 関数からほぼパックンチョ
// http://www.fmpro.jp/fmi/xsl/plugin/cf.xsl?ID=0016

dateText = Substitute (
  dateText ;
  [ "西暦" ; "" ] ;
  [ "明治" ; "M" ] ; [ "明" ; "M" ] ;
  [ "大正" ; "T" ] ; [ "大" ; "T" ] ;
  [ "昭和" ; "S" ] ; [ "昭" ; "S" ] ;
  [ "平成" ; "H" ] ; [ "平" ; "H" ] ;
  [ "元" ; "1" ] ;
  [ "年" ; "/" ] ; [ "月" ; "/" ] ; [ "日" ; "" ] ;
  [ "." ; "/" ]
  ) ;

// 半角数字および /(スラッシュ)部分 例)360316
~nText = Filter ( dateText ; "0123456789/" ) ;

// 日付を表す相対的なテキストの処理
~relativeDate =
  Case (
  dateText = "TODAY" ; Get ( 日付 ) ;
  dateText = "TOMORROW" ; Get ( 日付 ) + 1 ;
  dateText = "YESTERDAY" ; Get ( 日付 ) - 1 ;
  dateText = "SUN" or dateText = "SUNDAY" ;
  Get ( 日付 ) - Mod ( DayOfWeek ( Get ( 日付 ) ) - 1 ; 7 ) + 7 ;
  dateText = "MON" or dateText = "MONDAY" ;
  Get ( 日付 ) - Mod ( DayOfWeek ( Get ( 日付 ) ) - 2 ; 7 ) + 7 ;
  dateText = "TUE" or dateText = "TUESDAY" ;
  Get ( 日付 ) - Mod ( DayOfWeek ( Get ( 日付 ) ) - 3 ; 7 ) + 7 ;
  dateText = "WED" or dateText = "WEDNESDAY" ;
  Get ( 日付 ) - Mod ( DayOfWeek ( Get ( 日付 ) ) - 4 ; 7 ) + 7 ;
  dateText = "THU" or dateText = "THURSDAY" ;
  Get ( 日付 ) - Mod ( DayOfWeek ( Get ( 日付 ) ) - 5 ; 7 ) + 7 ;
  dateText = "FRI" or dateText = "FRIDAY" ;
  Get ( 日付 ) - Mod ( DayOfWeek ( Get ( 日付 ) ) - 6 ; 7 ) + 7 ;
  dateText = "SAT" or dateText = "SATURDAY" ;
  Get ( 日付 ) - Mod ( DayOfWeek ( Get ( 日付 ) ) - 7 ; 7 ) + 7
) // Case

] ;


// スラッシュが無くて、数値部分が6桁の場合:例)S360316 -> S36/03/16
Case ( PatternCount ( ~nText ; "/" ) = 0 ;
  Case ( Length ( ~nText ) = 6 ;
    GetAsDate (
    Filter ( dateText ; "MTSH" ) & Left ( ~nText ; 2 ) & "/" & Middle ( ~nText ; 3 ; 2 ) & "/" & Middle ( ~nText ; 5 ; 2 )
    ) ; // GetAsDate
// スラッシュが無くて、数値部分が8桁の場合:例)19610316 -> 1961/03/16
    Length ( ~nText ) = 8 ;
    GetAsDate (
    Left ( ~nText ; 4 ) & "/" & Middle ( ~nText ; 5 ; 2 ) & "/" & Middle ( ~nText ; 7 ; 2 )
    ) ; // GetAsDate
// スラッシュが無いそれ以外の場合は、日付を表す相対的なテキストだと判断する
    ~relativeDate
  ) ; // Case
  GetAsDate ( dateText )
) // Case
) // Let

Install ruby on El Capitan

Posted on May 9th, 2016

wkpdf をインストールしたいので、ちゃんと ruby をインストールするところから…と思って、ここ↓の通りにやっってみました。

以下に、ログをコピペしておきます。



bisonSSD840EVO:~ stbison$ brew install git
==> Downloading https://homebrew.bintray.com/bottles/git-2.8.2.el_capitan.bottle
######################################################################## 100.0%
==> Pouring git-2.8.2.el_capitan.bottle.tar.gz
==> Caveats
The OS X keychain credential helper has been installed to:
/usr/local/bin/git-credential-osxkeychain

The "contrib" directory has been installed to:
/usr/local/share/git-core/contrib

Bash completion has been installed to:
/usr/local/etc/bash_completion.d

zsh completion has been installed to:
/usr/local/share/zsh/site-functions

Emacs Lisp files have been installed to:
/usr/local/share/emacs/site-lisp/git
==> Summary
🍺 /usr/local/Cellar/git/2.8.2: 1,418 files, 30.5M
bisonSSD840EVO:~ stbison$ brew install readline
==> Downloading https://homebrew.bintray.com/bottles/readline-6.3.8.el_capitan.b
######################################################################## 100.0%
==> Pouring readline-6.3.8.el_capitan.bottle.tar.gz
==> Caveats
This formula is keg-only, which means it was not symlinked into /usr/local.

OS X provides the BSD libedit library, which shadows libreadline.
In order to prevent conflicts when programs look for libreadline we are
defaulting this GNU Readline installation to keg-only.


Generally there are no consequences of this for you. If you build your
own software and it requires this formula, you'll need to add to your
build variables:

LDFLAGS: -L/usr/local/opt/readline/lib
CPPFLAGS: -I/usr/local/opt/readline/include

==> Summary
🍺 /usr/local/Cellar/readline/6.3.8: 46 files, 2.0M
bisonSSD840EVO:~ stbison$ brew install openssl
==> Downloading https://homebrew.bintray.com/bottles/openssl-1.0.2h.el_capitan.b
######################################################################## 100.0%
==> Pouring openssl-1.0.2h.el_capitan.bottle.tar.gz
==> Caveats
A CA file has been bootstrapped using certificates from the system
keychain. To add additional certificates, place .pem files in
/usr/local/etc/openssl/certs

and run
/usr/local/opt/openssl/bin/c_rehash

This formula is keg-only, which means it was not symlinked into /usr/local.

Apple has deprecated use of OpenSSL in favor of its own TLS and crypto libraries

Generally there are no consequences of this for you. If you build your
own software and it requires this formula, you'll need to add to your
build variables:

LDFLAGS: -L/usr/local/opt/openssl/lib
CPPFLAGS: -I/usr/local/opt/openssl/include

==> Summary
🍺 /usr/local/Cellar/openssl/1.0.2h: 1,691 files, 12M
bisonSSD840EVO:~ stbison$ brew install ruby-build
==> Installing dependencies for ruby-build: autoconf, pkg-config
==> Installing ruby-build dependency: autoconf
==> Downloading https://homebrew.bintray.com/bottles/autoconf-2.69.el_capitan.bo
######################################################################## 100.0%
==> Pouring autoconf-2.69.el_capitan.bottle.4.tar.gz
==> Caveats
Emacs Lisp files have been installed to:
/usr/local/share/emacs/site-lisp/autoconf
==> Summary
🍺 /usr/local/Cellar/autoconf/2.69: 70 files, 3.0M
==> Installing ruby-build dependency: pkg-config
==> Downloading https://homebrew.bintray.com/bottles/pkg-config-0.29.1.el_capita
######################################################################## 100.0%
==> Pouring pkg-config-0.29.1.el_capitan.bottle.tar.gz
🍺 /usr/local/Cellar/pkg-config/0.29.1: 10 files, 627.2K
==> Installing ruby-build
==> Downloading https://github.com/rbenv/ruby-build/archive/v20160426.tar.gz
==> Downloading from https://codeload.github.com/rbenv/ruby-build/tar.gz/v201604
######################################################################## 100.0%
==> ./install.sh
🍺 /usr/local/Cellar/ruby-build/20160426: 215 files, 124.6K, built in 4 seconds
bisonSSD840EVO:~ stbison$ brew install rbenv
==> Downloading https://homebrew.bintray.com/bottles/rbenv-1.0.0.el_capitan.bott
######################################################################## 100.0%
==> Pouring rbenv-1.0.0.el_capitan.bottle.tar.gz
==> Caveats
Rbenv stores data under ~/.rbenv by default. If you absolutely need to
store everything under Homebrew's prefix, include this in your profile:
export RBENV_ROOT=/usr/local/var/rbenv

To enable shims and autocompletion, run this and follow the instructions:
rbenv init
==> Summary
🍺 /usr/local/Cellar/rbenv/1.0.0: 36 files, 61.9K
bisonSSD840EVO:~ stbison$ echo $PATH
/usr/local/bin:/usr/bin:/bin:/usr/sbin:/sbin:/opt/X11/bin
bisonSSD840EVO:~ stbison$ echo 'export PATH="$HOME/.rbenv/bin:$PATH"' >> .bash_profile
bisonSSD840EVO:~ stbison$ echo 'eval "$(rbenv init -)"' >> .bash_profile
bisonSSD840EVO:~ stbison$ source .bash_profile
bisonSSD840EVO:~ stbison$ rbenv install -l
Available versions:
1.8.6-p383
1.8.6-p420
1.8.7-p249
1.8.7-p302
1.8.7-p334
1.8.7-p352
1.8.7-p357
1.8.7-p358
1.8.7-p370
1.8.7-p371
1.8.7-p374
1.8.7-p375
1.9.1-p378
1.9.1-p430
1.9.2-p0
1.9.2-p180
1.9.2-p290
1.9.2-p318
1.9.2-p320
1.9.2-p326
1.9.2-p330
1.9.3-dev
1.9.3-preview1
1.9.3-rc1
1.9.3-p0
1.9.3-p125
1.9.3-p194
1.9.3-p286
1.9.3-p327
1.9.3-p362
1.9.3-p374
1.9.3-p385
1.9.3-p392
1.9.3-p429
1.9.3-p448
1.9.3-p484
1.9.3-p545
1.9.3-p547
1.9.3-p550
1.9.3-p551
2.0.0-dev
2.0.0-preview1
2.0.0-preview2
2.0.0-rc1
2.0.0-rc2
2.0.0-p0
2.0.0-p195
2.0.0-p247
2.0.0-p353
2.0.0-p451
2.0.0-p481
2.0.0-p576
2.0.0-p594
2.0.0-p598
2.0.0-p643
2.0.0-p645
2.0.0-p647
2.0.0-p648
2.1.0-dev
2.1.0-preview1
2.1.0-preview2
2.1.0-rc1
2.1.0
2.1.1
2.1.2
2.1.3
2.1.4
2.1.5
2.1.6
2.1.7
2.1.8
2.1.9
2.1.10
2.2.0-dev
2.2.0-preview1
2.2.0-preview2
2.2.0-rc1
2.2.0
2.2.1
2.2.2
2.2.3
2.2.4
2.2.5
2.3.0-dev
2.3.0-preview1
2.3.0-preview2
2.3.0
2.3.1
2.4.0-dev
jruby-1.5.6
jruby-1.6.3
jruby-1.6.4
jruby-1.6.5
jruby-1.6.5.1
jruby-1.6.6
jruby-1.6.7
jruby-1.6.7.2
jruby-1.6.8
jruby-1.7.0-preview1
jruby-1.7.0-preview2
jruby-1.7.0-rc1
jruby-1.7.0-rc2
jruby-1.7.0
jruby-1.7.1
jruby-1.7.2
jruby-1.7.3
jruby-1.7.4
jruby-1.7.5
jruby-1.7.6
jruby-1.7.7
jruby-1.7.8
jruby-1.7.9
jruby-1.7.10
jruby-1.7.11
jruby-1.7.12
jruby-1.7.13
jruby-1.7.14
jruby-1.7.15
jruby-1.7.16
jruby-1.7.16.1
jruby-1.7.16.2
jruby-1.7.17
jruby-1.7.18
jruby-1.7.19
jruby-1.7.20
jruby-1.7.20.1
jruby-1.7.21
jruby-1.7.22
jruby-1.7.23
jruby-1.7.24
jruby-1.7.25
jruby-9.0.0.0.pre1
jruby-9.0.0.0.pre2
jruby-9.0.0.0.rc1
jruby-9.0.0.0.rc2
jruby-9.0.0.0
jruby-9.0.1.0
jruby-9.0.3.0
jruby-9.0.4.0
jruby-9.0.5.0
jruby-9.1.0.0-dev
maglev-1.0.0
maglev-1.1.0-dev
maglev-2.0.0-dev
mruby-dev
mruby-1.0.0
mruby-1.1.0
mruby-1.2.0
rbx-2.2.2
rbx-2.2.3
rbx-2.2.4
rbx-2.2.5
rbx-2.2.6
rbx-2.2.7
rbx-2.2.8
rbx-2.2.9
rbx-2.2.10
rbx-2.3.0
rbx-2.4.0
rbx-2.4.1
rbx-2.5.0
rbx-2.5.1
rbx-2.5.2
rbx-2.5.3
rbx-2.5.4
rbx-2.5.5
rbx-2.5.6
rbx-2.5.7
rbx-2.5.8
rbx-2.6
rbx-2.7
rbx-2.8
rbx-2.9
rbx-2.10
rbx-2.11
rbx-2.71828182
rbx-3.0
rbx-3.1
rbx-3.2
rbx-3.3
rbx-3.4
rbx-3.5
rbx-3.6
rbx-3.7
rbx-3.8
rbx-3.9
rbx-3.10
rbx-3.11
rbx-3.12
rbx-3.13
rbx-3.14
rbx-3.15
rbx-3.16
rbx-3.17
rbx-3.18
rbx-3.19
rbx-3.20
rbx-3.21
rbx-3.22
rbx-3.23
rbx-3.24
rbx-3.25
rbx-3.26
rbx-3.27
ree-1.8.7-2011.03
ree-1.8.7-2011.12
ree-1.8.7-2012.01
ree-1.8.7-2012.02
topaz-dev
bisonSSD840EVO:~ stbison$ rbenv install 2.3.1
Downloading ruby-2.3.1.tar.bz2...
-> https://cache.ruby-lang.org/pub/ruby/2.3/ruby-2.3.1.tar.bz2
Installing ruby-2.3.1...

Installed ruby-2.3.1 to /Users/stbison/.rbenv/versions/2.3.1

bisonSSD840EVO:~ stbison$ rbenv global 2.3.1
bisonSSD840EVO:~ stbison$ rbenv versions
system
* 2.3.1 (set by /Users/stbison/.rbenv/version)
bisonSSD840EVO:~ stbison$ ruby -v
ruby 2.3.1p112 (2016-04-26 revision 54768) [x86_64-darwin15]
bisonSSD840EVO:~ stbison$ gem install rails
Fetching: rack-1.6.4.gem (100%)
Successfully installed rack-1.6.4
Fetching: concurrent-ruby-1.0.2.gem (100%)
Successfully installed concurrent-ruby-1.0.2
Fetching: sprockets-3.6.0.gem (100%)
Successfully installed sprockets-3.6.0
Fetching: thread_safe-0.3.5.gem (100%)
Successfully installed thread_safe-0.3.5
Fetching: tzinfo-1.2.2.gem (100%)
Successfully installed tzinfo-1.2.2
Fetching: i18n-0.7.0.gem (100%)
Successfully installed i18n-0.7.0
Fetching: activesupport-4.2.6.gem (100%)
Successfully installed activesupport-4.2.6
Fetching: mini_portile2-2.0.0.gem (100%)
Successfully installed mini_portile2-2.0.0
Fetching: nokogiri-1.6.7.2.gem (100%)
Building native extensions. This could take a while...
Successfully installed nokogiri-1.6.7.2
Fetching: loofah-2.0.3.gem (100%)
Successfully installed loofah-2.0.3
Fetching: rails-html-sanitizer-1.0.3.gem (100%)
Successfully installed rails-html-sanitizer-1.0.3
Fetching: rails-deprecated_sanitizer-1.0.3.gem (100%)
Successfully installed rails-deprecated_sanitizer-1.0.3
Fetching: rails-dom-testing-1.0.7.gem (100%)
Successfully installed rails-dom-testing-1.0.7
Fetching: rack-test-0.6.3.gem (100%)
Successfully installed rack-test-0.6.3
Fetching: erubis-2.7.0.gem (100%)
Successfully installed erubis-2.7.0
Fetching: builder-3.2.2.gem (100%)
Successfully installed builder-3.2.2
Fetching: actionview-4.2.6.gem (100%)
Successfully installed actionview-4.2.6
Fetching: actionpack-4.2.6.gem (100%)
Successfully installed actionpack-4.2.6
Fetching: sprockets-rails-3.0.4.gem (100%)
Successfully installed sprockets-rails-3.0.4
Fetching: thor-0.19.1.gem (100%)
Successfully installed thor-0.19.1
Fetching: railties-4.2.6.gem (100%)
Successfully installed railties-4.2.6
Fetching: bundler-1.12.3.gem (100%)
Successfully installed bundler-1.12.3
Fetching: arel-6.0.3.gem (100%)
Successfully installed arel-6.0.3
Fetching: activemodel-4.2.6.gem (100%)
Successfully installed activemodel-4.2.6
Fetching: activerecord-4.2.6.gem (100%)
Successfully installed activerecord-4.2.6
Fetching: globalid-0.3.6.gem (100%)
Successfully installed globalid-0.3.6
Fetching: activejob-4.2.6.gem (100%)
Successfully installed activejob-4.2.6
Fetching: mime-types-data-3.2016.0221.gem (100%)
Successfully installed mime-types-data-3.2016.0221
Fetching: mime-types-3.0.gem (100%)
Successfully installed mime-types-3.0
Fetching: mail-2.6.4.gem (100%)
Successfully installed mail-2.6.4
Fetching: actionmailer-4.2.6.gem (100%)
Successfully installed actionmailer-4.2.6
Fetching: rails-4.2.6.gem (100%)
Successfully installed rails-4.2.6
Parsing documentation for rack-1.6.4
Installing ri documentation for rack-1.6.4
Parsing documentation for concurrent-ruby-1.0.2
Installing ri documentation for concurrent-ruby-1.0.2
Parsing documentation for sprockets-3.6.0
Installing ri documentation for sprockets-3.6.0
Parsing documentation for thread_safe-0.3.5
Installing ri documentation for thread_safe-0.3.5
Parsing documentation for tzinfo-1.2.2
Installing ri documentation for tzinfo-1.2.2
Parsing documentation for i18n-0.7.0
Installing ri documentation for i18n-0.7.0
Parsing documentation for activesupport-4.2.6
Installing ri documentation for activesupport-4.2.6
Parsing documentation for mini_portile2-2.0.0
Installing ri documentation for mini_portile2-2.0.0
Parsing documentation for nokogiri-1.6.7.2
Installing ri documentation for nokogiri-1.6.7.2
Parsing documentation for loofah-2.0.3
Installing ri documentation for loofah-2.0.3
Parsing documentation for rails-html-sanitizer-1.0.3
Installing ri documentation for rails-html-sanitizer-1.0.3
Parsing documentation for rails-deprecated_sanitizer-1.0.3
Installing ri documentation for rails-deprecated_sanitizer-1.0.3
Parsing documentation for rails-dom-testing-1.0.7
Installing ri documentation for rails-dom-testing-1.0.7
Parsing documentation for rack-test-0.6.3
Installing ri documentation for rack-test-0.6.3
Parsing documentation for erubis-2.7.0
Installing ri documentation for erubis-2.7.0
Parsing documentation for builder-3.2.2
Installing ri documentation for builder-3.2.2
Parsing documentation for actionview-4.2.6
Installing ri documentation for actionview-4.2.6
Parsing documentation for actionpack-4.2.6
Installing ri documentation for actionpack-4.2.6
Parsing documentation for sprockets-rails-3.0.4
Installing ri documentation for sprockets-rails-3.0.4
Parsing documentation for thor-0.19.1
Installing ri documentation for thor-0.19.1
Parsing documentation for railties-4.2.6
Installing ri documentation for railties-4.2.6
Parsing documentation for bundler-1.12.3
Installing ri documentation for bundler-1.12.3
Parsing documentation for arel-6.0.3
Installing ri documentation for arel-6.0.3
Parsing documentation for activemodel-4.2.6
Installing ri documentation for activemodel-4.2.6
Parsing documentation for activerecord-4.2.6
Installing ri documentation for activerecord-4.2.6
Parsing documentation for globalid-0.3.6
Installing ri documentation for globalid-0.3.6
Parsing documentation for activejob-4.2.6
Installing ri documentation for activejob-4.2.6
Parsing documentation for mime-types-data-3.2016.0221
Installing ri documentation for mime-types-data-3.2016.0221
Parsing documentation for mime-types-3.0
Installing ri documentation for mime-types-3.0
Parsing documentation for mail-2.6.4
Installing ri documentation for mail-2.6.4
Parsing documentation for actionmailer-4.2.6
Installing ri documentation for actionmailer-4.2.6
Parsing documentation for rails-4.2.6
Installing ri documentation for rails-4.2.6
Done installing documentation for rack, concurrent-ruby, sprockets, thread_safe, tzinfo, i18n, activesupport, mini_portile2, nokogiri, loofah, rails-html-sanitizer, rails-deprecated_sanitizer, rails-dom-testing, rack-test, erubis, builder, actionview, actionpack, sprockets-rails, thor, railties, bundler, arel, activemodel, activerecord, globalid, activejob, mime-types-data, mime-types, mail, actionmailer, rails after 589 seconds
32 gems installed
bisonSSD840EVO:~ stbison$ gem install bundler
Successfully installed bundler-1.12.3
Parsing documentation for bundler-1.12.3
Done installing documentation for bundler after 6 seconds
1 gem installed
bisonSSD840EVO:~ stbison$ rbenv rehash
bisonSSD840EVO:~ stbison$ source ~/.bash_profile
bisonSSD840EVO:~ stbison$ rails -v
Rails 4.2.6

webkit2png で(HTTPがブロックされる)ATS をコントロールする方法

Posted on May 7th, 2016

webkit2png とは、Webkitを使ってコマンドラインからスクリーンショットを取得するプログラムです。
つまり、コマンドラインで、(Webkitをレンダリングエンジンとして)Webページをレンダリングした結果を画像ファイルにします。


Homebrew でインストールできます。

$ brew update
$ brew search webkit2png
$ brew install web2png

一番シンプルなSyntaxは…
$webkit2png [URL]
なので…

とやると…

... done

問題なく、カレントディレクトリにディフォルト通りの3つのファイルが出来ます。(HTTPS)

ところが、普通の http:// なURLだと…

$ webkit2png http://bison.jp/

Fetching http://bison.jp/ ...
2016-05-06 19:30:26.899 Python[88221:5471219] App Transport Security has blocked a cleartext HTTP (http://) resource load since it is insecure. Temporary exceptions can be configured via your app's Info.plist file.
... something went wrong: The resource could not be loaded because the App Transport Security policy requires the use of a secure connection.

叱られます。

「HTTP はセキュアじゃないから、App Transport Security がブロックしたよ」
「そのアプリの Info.plist に例外設定を記述するヨロシ」
とか言われてもねぇ。

そもそも App Transport Security(ATS)って何さ…な情報は↓



曰く…
"App Transport Security (以降、ATS と呼びます) は iOS 9.0 または OS X 10.11 以上で有効な機能であり、アプリとウェブサービスとの間のセキュアな接続のために利用できます。
ATS が有効の場合、HTTP での通信はできません。また、Apple が推奨する必要条件を満たさない接続は強制的に接続失敗扱いになります。例えば、Apple 推奨の要件を満たさない Web ページを WKWebView で開こうとした場合、ページのロードは失敗します。"

…(・◇・)なるほど

"Info.plist にキーと値を追加することで ATS の基本動作の例外を設定したり、ATS をオフにしたりできます。"

…(・◇・)なるほど x 2

  • 画一的に、せっかくの ATSを無効にするのは非推奨
  • Allow but Deny も Deny but Allow も指定可能

ネットを掘っても「iOS 9 と El Capitan に特有な縛りで、細かい設定は、当該アプリの Info.plist でいぢりなさい」な情報しか見つからない。


英語面倒だけれど、GitHub を掘ってみた。



/usr/local/Cellar/webkit2png/0.7/bin/webkit2png
の実行ファイルをエディタで開いて、

# Hide the dock icon (needs to run before NSApplication.sharedApplication)
AppKit.NSBundle.mainBundle().infoDictionary()['LSBackgroundOnly'] = '1'

の下に…

# Handles ATS HTTPS requirement introduced in El Cap
if options.ignore_ssl_check:
AppKit.NSBundle.mainBundle().infoDictionary()['NSAppTransportSecurity'] = dict(NSAllowsArbitraryLoads = True)

を挿入して…

--ignore-ssl-checkオプション付きで実行すればOK。

$ webkit2png --ignore-ssl-check http://example.com/

しかしコノ解決法だと、webkit2png が Update される度に、仕掛け直しなのよねきっと…orz。

その他参考

El Capitan に Homebrew をインストールした

Posted on November 9th, 2015

例の、Rootless の影響があるのは予見されるなか、先日、ウチの Mac Pro に Yosemite をクリーンインストールした直後に、その上に、El Capitan をインストールしたわけだが…。
さて、調べてみるかと………。。
ん? /usr/local あるのかと確認。
ある。
じゃ、これか…。
ちうことで…。

XQuartz を Update
言われた通り、relogin して完了。(2015/11/09 15:42:34)

Master Detail 2.0 を導入する方法

Posted on April 2nd, 2015

準備:
  • MasterDetail2.fmp12
  • 自分のソリューション

1)自分のソリューションで、Master Detail を導入したいレイアウトを作成(新規レイアウト)
⌘L ⌘A ⌘C ⌘N

2)(必要であればあとでパートを追加すればいいので、ボディパートのみを残し他のパート(ヘッダ/フッタなど)は削除
レイアウト>パート設定、 して、⌘V
3)テーブルのコピペ
MasterDetail2.fmp12 から テーブル[MasterDetailRows] をコピーし、自ファイルにペースト
MasterDetail2.fmp12
⌘⇧D テーブルタブ選択 MasterDetailRows 選択 ⌘C Esc
自ファイル
⌘⇧D テーブルタブ選択 ⌘V OK



4)フィールドのコピペ
MasterDetail2.fmp12 の [customers::zg_foundCount] [customers::zg_searchField] をコピーし、自ファイルのテーブル内にペースト
MasterDetail2.fmp12
⌘⇧D(フィールドタブでcustomersが選択されていることを確認) 下2行選択 ⌘C Esc
自ファイル
⌘⇧D フィールドタブで当該テーブルになっていることを確認)⌘V


5)リレーション定義
[theTable::zg_foundCount] ≧ [MasterDetailRows::n] のリレーションを定義
4の状態のまま(自ファイル)で、リレーションシップタブ選択、リレーションを設定 OK


6)スクリプトのコピペ
MasterDetail2.fmp12 のスクリプトフォルダ [Modules] をコピーし、自ファイルの [スクリプトの管理]画面にペースト
※ レイアウトを貼り付ける前にスクリプトを貼り付けることが重要
MasterDetail2.fmp12
⌘⇧S Modules フォルダ選択 ⌘C
自ファイル
⌘⇧S ⌘V


7)レイアウトのコピペ
MasterDetail2.fmp12 の customers レイアウトで ⌘A(全てを選択)のあと、Shiftキーを押下しながら、真ん中のフィールド(ポータル部分以外)をドラッグしコピーして、手順1で作った新規レイアウトにペースト
MasterDetail2.fmp12
⌘L ⌘A 、⇧押下しながら不要部分をOmit、⌘C
自ファイル
⌘L ⌘V

※ このときレイアウトを広げて良いかという意味のアラートが出たらOK


8)レイアウト(オフスクリーン)の設定
レイアウト欄外(off-screen)にある以下の設定を終える
REQUIRED
  • PKフィールド:_id だの kp だの
  • zg_foundCount
OPTIONAL
  • ポータルで表示するフィールド
※ 表示させるフィールドが余ったら、余ったフィールドのオブジェクト名を変えておく

9)レイアウト(オフスクリーン)の設定
画面右上のQuick検索用のフィールドの設定(xxxx::zg_searchField)

10)レイアウトのスクリプトトリガを設定
レイアウトのスクリプトトリガを以下のように設定
  • OnRecordLoad:[Trigger: On Record Load]
  • OnRecordCommit:]Trigger: On Record Commit]
  • OnLayoutEnter:[Trigger: On Layout Load And Enter Browse Mode]
  • OnModeEnter:[Trigger: On Layout Load And Enter Browse Mode]

11)スクリプト [Reset MasterDetail Rows Table] を一度回す
※ Virtual List (VL)では 1,000レコードずつ作成するが、このスクリプトの中で変更できる

その他の注意点
VLのポータルに表示されない場合はとりあえず、一旦閉じてもう一度開くと幸せになれたりする



参考URL
Master Detail - Modular FileMaker
MasterDetail 2.0 - Modular FileMaker
FileMaker Master Detail 2.0 Video - geist interactive

WordPressの吹き出しプラグイン『Speech Bubble』で会話形式のブログコンテンツが作れる!

Posted on March 3rd, 2015


  • HOME /
  • ブログ /
  • WordPressの吹き出しプラグイン『Speech Bubble』で会話形式のブログコンテンツが作れる!
ブログ

WordPressの吹き出しプラグイン『Speech Bubble』で会話形式のブログコンテンツが作れる!

  • いいね!
    568
  • このページは260回共有されました。これらのツイートを見る。

  • 11
  • 2015.01.29
  • by JUNICHI
  • 15
吹き出しプラグイン紹介

吹き出しプラグイン紹介

やっと見つけた!

 

LINEやFacebookみたいな会話をブログで使う事ができる、めちゃくちゃ便利な吹き出しプラグインを見つけました。

 

 

毎年平社員の佐伯さん
こんにちは。WordPressではこんな便利なプラグインがあるんですね。
OLの長野さん
佐伯さん、"毎年平社員"っていう肩書がつけられてますよ。チョー似合う。

 

 

 

今回は、こんなふうに漫画風や会話風にブログを進行することができるようになるワードプレスのプラグイン『Speech Bubble』というプラグインのインストール方法&使い方をご紹介します。

スポンサードリンク

この記事のもくじ [とじる]

Speech Bubbleのインストールの手順

「Speech Bubble」はプラグインなので、基本的にインストール方法は他のプラグインと同じです。

念のために図解します。

 

手順1)ダッシュボードの「プラグイン」

プラグイン1

 

手順2)「新規追加」から右の検索窓に「Speech Bubble」と入力してENTERプラグイン2

 

手順3)Speech Bubbleが出てきますので、「今すぐインストール」をクリック

プラグイン3

 

 

 

手順4)「プラグインを有効化」をクリックプラグイン有効

以上でプラグインのインストールと有効化が終わりました。

 

 

吹き出しプラグインSpeech Bubbleを使って投稿をする方法

いつも通りブログを書く手順で「投稿」⇒「新規投稿」を選びます。

ビジュアルモードでも、テキストモードでも両方使用可能でした。

プラグイン5

 

この新規投稿画面に以下のコードをコピペしてみてください。

 

1
2
[speech_bubble type="drop" subtype="L1" icon="1.jpg" name="A さん"] おっす! [/speech_bubble]
[speech_bubble type="drop" subtype="R1" icon="2.jpg" name="B さん"] なんだちみは!?[/speech_bubble]

 

これを貼り付けてもらうと↓こんな風になる。

 

A さん
おっす!
B さん
なんだちみは!?

 

 

セリフの変更の仕方

1
2
[speech_bubble type="drop" subtype="L1" icon="1.jpg" name="A さん"]●●●●●[/speech_bubble]
[speech_bubble type="drop" subtype="R1" icon="2.jpg" name="B さん"]×××××[/speech_bubble]
Aさんのセリフは↑のコードの●●●●●の部分を変えればOK。同じくBさんのセリフは↑のコードの×××××の部分を変えればOK。

 

 

キャラの名前の変更方法

1
2
[speech_bubble type="drop" subtype="L1" icon="1.jpg" name="■さん"] おっす! [/speech_bubble]
[speech_bubble type="drop" subtype="R1" icon="2.jpg" name="◎さん"] なんだちみは!?[/speech_bubble]
キャラの名前が今は「Aさん」「Bさん」になってるけど、これも↑のコードの【name="■さん"】のところ、「■さん」「◎さん」を変更すれば自由に設定できる。

 

 

吹き出しの種類の変更方法

実は吹き出しの種類も9種類用意されている。いいねいいね!!

9種類は↓のコードの【type="drop"】の部分を変更すればOK。デフォルトはdropになっている。

1
2
[speech_bubble type="drop" subtype="L1" icon="1.jpg" name="■ さん"] おっす! [/speech_bubble]
[speech_bubble type="drop" subtype="R1" icon="2.jpg" name="◎ さん"] なんだちみは!?[/speech_bubble]

9種類のコードはdrop・std・ fb・ fb-flat・ln・ ln-flat・ pink・ rtail・ thinkのどれかを選べばいい。

ちなみにそれぞれがどんな感じになるかというと↓

drop

毎年平社員の佐伯さん
dropです。
OLの長野さん
そうみたいですね。

 

std

毎年平社員の佐伯さん
stdです。
OLの長野さん
シンプルでいいですね。飾り気もなにもない佐伯さんみたい。

 

fb

毎年平社員の佐伯さん
PCのFacebookのメッセージのやりとりをイメージしているみたいですね。
OLの長野さん
見ればわかります。

 

fb-flat

毎年平社員の佐伯さん
スマホのFacebookのメッセンジャーみたいです!
OLの長野さん
佐伯さん、私に無言でfacebookの友達申請するのやめてください。

 

ln

毎年平社員の佐伯さん
今度はLINEですよ!長野さん!
OLの長野さん
佐伯さん、変なスタンプばっかり送らないでください。

 

 

ln-flat

毎年平社員の佐伯さん
これもLINEですよ!長野さん!あ、既読スルーしないで!!
OLの長野さん
・・・。

 

 

pink

毎年平社員の佐伯さん
可愛いです!ピンクです!長野さん!女子っぽいですよ!
OLの長野さん
佐伯さんは絶対にこれを使わないでくださいね。気持ちが悪いので。

 

rtail

毎年平社員の佐伯さん
これもシンプルだけど使いやすそうですね!
OLの長野さん
佐伯さんには似合わないなぁ。もっと華が無い感じなので。

 

 

think

毎年平社員の佐伯さん
長野さん可愛いなぁ。
OLの長野さん
佐伯さん気持ち悪いなぁ。

 

 

人物の向きと、吹き出しのしっぽの種類の変更方法

1
2
[speech_bubble type="drop" subtype="L1" icon="1.jpg" name="A さん"] おっす! [/speech_bubble]
[speech_bubble type="drop" subtype="R1" icon="2.jpg" name="B さん"] なんだちみは!?[/speech_bubble]
キャラを左に置くか、右に置くかは【subtype=" "】の部分で変更します。

また、吹き出しのしっぽも同じく【subtype=" "】の部分で変更します。

 

 

L1⇒人物が左側に配置、吹き出しのしっぽは「話す」感じになる

毎年平社員の佐伯さん
subtype="L1″にしました。
OLの長野さん
いやだ、佐伯さんちょっと加齢臭するー。

 

L2⇒人物が左側に配置、吹き出しのしっぽは「考える」感じになる

毎年平社員の佐伯さん
subtype="L2″にしました。
OLの長野さん
うちのおじいちゃんもこんな臭いしてたなぁ。 

 

R1⇒人物が右側に配置、吹き出しのしっぽは「話す」感じになる

毎年平社員の佐伯さん
subtype="R1″にしました。
OLの長野さん
やだぁ、佐伯さんちょっとこっちこないでよ。

 

R2⇒人物が右側に配置、吹き出しのしっぽは「考える」感じになる

毎年平社員の佐伯さん
subtype="R2″にしました。
OLの長野さん
佐伯さんって結婚してるのかな?

 

 

 

アイコン画像(キャラとかの画像)の変更方法

デフォルトの設定では、こんなシンプルな感じのアイコンになっています↓

A さん
おっす!
B さん
なんだちみは!?

 

 

それを、今回僕が使用した「佐伯さん」「長野さん」みたいに、あなたの好きな画像や写真に変更することができます。

 

アイコン画像の変更手順

手順1)あなたの使用しているサーバーのWordPressのフォルダの中の「speech-bubble」の中の「img」フォルダを探します。

例:ドメイン>public_html>wp-content>plugins>speech-bubble>img

 

手順2)使用したいアイコン画像(jpg, png, gif, svg, tif)を、そのimgフォルダ内にアップロードします。(ファイル名は半角英数字を使ってください)

 

手順3)このSpeech Bubbleの【icon=" ○○.jpg“】の部分で、先ほどアップロードしたファイル名を指定してあげればOKです。

1
2
[speech_bubble type="drop" subtype="L1" icon="1.jpg" name="A さん"] おっす! [/speech_bubble]
[speech_bubble type="drop" subtype="R1" icon="2.jpg" name="B さん"] なんだちみは!?[/speech_bubble]

 

※画像サイズは大きくても勝手にリサイズされて、ちょうどいい大きさに変更されますので、画像編集の際に、サイズ変更などしなくても大丈夫です。

 

 

ありがたい事に、吹き出しの中の文字はテキストになっている

そうなんです。これがめちゃくちゃありがたい。

SEO的にはこれがテキストであることがありがたやなんです。

SEOって何?っていうあなたは、SEOの基本について書いた記事を参考にしてください。

 

 

 

キャラを増やせばこんな風なブログもできる

毎年平社員の佐伯さん
ふふふふふ。
OLの長野さん
いやだ、佐伯さん何ちょっとにやけているんですか。気色が悪い。
毎年平社員の佐伯さん
長野さんおはようございます。いやー、こんな便利なプラグインがあるなんて知らなかったです。ブログの中に会話みたいに吹き出しが付けられるんですよ!
新人の森永君
佐伯さん何ていうプラグインですか?
毎年平社員の佐伯さん
『Speech Bubble』っていうプラグインなんです。
仕事しないクソ部長
佐伯ィィ。この前やっておいてってお願いしたプレゼンの資料できたのーぉ?僕もう帰るよー。
社長
おい!お前ら!早く仕事しろ!売上上げろ!斬るぞ!

 

※この人たちがどんなキャラなのか知りたいあなたは佐伯さんたちを使った漫画の原稿の使い方の記事を見てみてね。

 

 

まとめ

いやー、またまたブログの幅が広がりました。

是非あなたもこのSpeech Bubbleというプラグインを活用して面白いブログを書いてみて下さい。

面白いブログの書き方は

面白いブログの書き方!熱烈ファンを獲得する9つの必殺技を参考にしてみて下さい。

 

ブログって実はこういう人に楽しんでもらえるようなコンテンツを作れるようにならないといけない時代に来ています。

 

もちろんコツコツとSEO対策をして、検索流入を増やすことも必要ですが、SNSというメディアがあるので、面白いコンテンツを提供してマーケティングに活かさない手はありません。

 

そんなコンテンツマーケティングについても僕のつくったブログマーケティングスクールで学ぶことができます。どうぞ興味があればのぞいてみて下さい。

 

FacebookやTwitterもやってます。

どうぞ友達になってください^^

 

⇒Facebookで友達になってください!

⇒Twitterでも友達になってください!

 

 

じゃあね!バイチャ!

 

 

最後まで読んで下さり、ありがとうございます!

シェアして頂けると、モチベーションがぐんぐん上がります! 今後も、お役に立てるように頑張りますm(_ _)m

アクセスアップの方法が学べるよ。集客ブログが作れるよ。最高のブログ仲間ができるよ。

そんな学校作りました。詳しくは↓の画像を今すぐクリック! blogschool  

無料で『ブログアクセスアップの方法』&『ブログ集客の全手法』を公開してしまいました。

ebookdownload  

この記事を読んだ人は、こんな記事も読んでいます

 
  • いいね!
    568
  • このページは260回共有されました。これらのツイートを見る。

  • 11

スポンサードリンク

スポンサードリンク

   
Zenback読み込み中です。
masman

著者 JUNICHI

ブログと漫画が好き。『好きな事をブログに書いて、仕事につなげよう!』という事をブログスクールで教えていたりする。真面目で誠実な性格だが、人を笑わすのが好きなので、よく「チョケる」。

Facebookのすべての投稿 
高畑 浩一さんとして投稿する
.
.
.

    注目のコーナー

     

    Ebookblogsyukyaku

     

     

    アクセスアップコーナーバナー用22

     

     

    漫画講座2

     

    underworldbaner

    JUNICHI's Blog
    いいね!
    .
    204人がJUNICHI's Blogについて「いいね!」と言っています。
    • 久保田 雄介
    • 安田 真也
    • 菅井浩二
    • 佐藤彰弘
    • Takayuki Okada
    • 中村 優太
    • 横田 健一
    • 池田 美清
    • 橋本 剣太
    • 杉原 伸太郎
    • 井手 仁
    • 池内 祐介
    • Tsugumi  Hidaka
    • Shuichi Yamashita
    • 太田 裕世志
    • 林 明文
    • もとしげ ゆきこ
    • 山中 由充
    • 青木 創治郎
    • すずき みゆき
    • 引地 友理子
    • 竹内 紳也
    • Naoya Noda
    • 片岡 建司
    • 藤澤 亮太
    • Yuho Hashimoto
    • 村田 興平
    • 桜井 まこと
    • 横山典膳
    • 小村康宣
    • 米澤 栄治
    • 石田 芽意
    • 中村 景子
    • 森 惇
    • 落合 正和

    プロフィール

    どうも!JUNICHIです。

    ブログを書いて、人に喜んでもらいながら集客までできてしまう「ブログマーケティング」を専門に扱ってます。

    漫画を描くのも大好物。

    一度きりの人生、自分の「夢」を大切にしたいと思います。

    どうぞよろしくお願いします。

    ⇒詳しいプロフィールはこちら

    selfillust1



    サイト内を検索

    Twitter



    follow us in feedly



    JUNICHI's BLOG

    © Copyright 2015 JUNICHI's BLOG. All rights reserved.



    Typinator に FileMaker の変数を登録及び使用する方法

    Posted on January 26th, 2015

    FileMaker の開発で 設定したグローバル変数を呼び出すとき「あれ?どんな変数名を登録したっけ?」というとき、うろ覚えの変数名をインクリメンタルサーチできるようにする方法。。

    Typinator に選択範囲を登録するショートカットキーコンビネーションを設定して、FileMaker の変数を登録しとくと、ひたすら便利。

    準備編

    Typinator の設定

    1)Typinator に variables(任意)という Abbreviaton Set を作る


    2)左上カラムから variables (手順2 で作った Abbreviation Set)を選択し、Information ボタンをクリック

    3) Prefix & Suffix で、下図の赤い四角にそれぞれピリオド(任意)を入力して、OK ボタンをクリック
     ※ Abbreviation として設定した文字列を入力した際に自動的に展開されないようにするため

    4)Typinator の Preferences から、Quick Search に ^⏎ (任意)を、Create new item from… > Selection に ^⇧4 (任意)を設定する


    使用編

    変数を Typinator に登録

    5)FileMaker で 変数を設定する度に、変数名を選択して ^⇧4(手順4の Create new item from… > Selection で設定したキーボードショートカット)を叩く

    6)Add to Set に variables(手順1 で設定した Abbreviation Set名)を選択し(初回のみ)、Abbreviation に $$_ + 名前空間名(任意)を入れ、Add ボタンをクリック(Add ボタンクリックの代わりに fn + ⏎ でもOK)

    変数をブラウズし、入力

    5)すでに設定した変数を入力するときは、^⏎(手順2 で Quick Search のショートカットとして設定したもの)を打って、Quick Search ウインドウを出し、$$に続けて適宜入力することで、Typinator に登録されたグローバル変数名がインクリメントサーチされるので、適宜矢印キーで選択して⏎もしくはクリックで入力する






    Upon Opening Hierarchy を読む

    Posted on December 15th, 2014

    FileMaker のソリューションを作るときに、それぞれ自分なりの Standard な作法(流儀)を持っている。
    それぞれに独特の好みがあり、「どんだけ○○やねん!w」と首を傾げることがないではないが、カシコの開発者の流儀を読むことは、中級レベルの開発者にとって、もう一つ上のレベルへのスキルアップへの早道だと思う。

    同様のことを自分で実現している方法や、同様のことを別々の開発者がどうやっているのか…など比較して、どういう条件であれば有用なのか、どういう場面ではかえって意味が無いのか…を考えることはためになると同時になにより楽しい。

    命名規則(Name Convention)やスクリプトの使い方、もちろん、データベース構造にも、個々の開発者の流儀が出てくるわけだが、まずは、スクリプトを見ていくことにする。

    ということで…本稿では、Seed Code の SeedCode SQL Explorer を例にとって、SeedCode というか… Jason Young というか…の 作法を学んでいこうと思う。
    ファイルは、FMGateway のサイトからダウンロードできる。

    まず、最初にファイルを開くと走るのが、Upon Opening Hierarchy というスクリプトだ。
    ※ 先に FileMaker Pro Advanced を立ち上げて、デバッガをオンにしてからファイルを開く

    Upon Opening Hierarchy



    SeedCode SQL Explorer: Housekeeping: Upon Opening Hierarchy
    #
    #==============================================
    # Function: Startup script for file
    # Parameters: none
    # Notes: This script runs when the hierarchy starts up and should be called as the opening script in file options.
    # Author: SeedCode
    # Version: 1.0
    #==============================================
    #   、
    #Set File Name
    変数を設定 [ $$sc_HierarchyFileName; 値:Get ( ファイル名 ) ]
    #
    #Clear Global Values
    スクリプト実行 [ 「ClearGlobals」 ]
    #
    #Make sure Virtual List records are there.
    スクリプト実行 [ 「Create Rows」 ]
    #
    #Create Array of color codes used for color coding tables and their fields.
    変数を設定 [ $$sc_ColorList;
    値:"6802379¶11068584¶16636347¶16628667¶13358314¶16774105¶14416052¶13411788¶16770466¶129018 59¶6802379¶11068584¶16636347¶16628667¶13358314¶16774105¶14416052¶13411788¶16770466¶12901 859" ]
    #
    #Go To Home layout.
    レイアウト切り替え [ 「Queries」 (SQLWizardHome) ]
    スクリプト実行 [ 「Adjust_Window { HideStatusArea ; Lock }」; 引数: "HideStatusArea = 0" ]
    #

    順に見ていこう。

    #Set File Name
    変数を設定 [ $$sc_HierarchyFileName; 値:Get ( ファイル名 ) ]

    どうやら、$$sc_HierarchyFileName というグローバル変数に 開いたファイルのファイル名を入れているようだ。

    #Clear Global Values
    スクリプト実行 [ 「ClearGlobals」 ]

    ClearGlobals というサブスクリプトを実行している。
    名前からして、グローバルな何かをクリアするのだろう。グローバルといってすぐに思い出すのは、グローバルフィールド・グローバル変数だが、たぶんグローバルフィールドではなかろうか。

    ClearGlobals



    SeedCode SQL Explorer: General: ClearGlobals
    #
    #==============================================
    # Function: Utility script for clearing virtual list arrays and the global fields that set the number of rows to show in the respective portals.
    # Parameters: none
    # Notes:
    # Author: SeedCode
    # Version: 1.0
    #==============================================
    #
    フィールド設定 [ SQLWizardHome::HierarchyGlob; "" ]
    フィールド設定 [ SQLWizardHome::RowsToDisplay1; "" ]
    フィールド設定 [ SQLWizardHome::RowsToDisplay2; "" ]
    変数を設定 [ $$sc_Display[2]; 値:"" ]
    変数を設定 [ $$sc_Display; 値:"" ]


    あに図らんや、
    • SQLWizardHome::HierarchyGlob
    • SQLWizardHome::RowsToDisplay1
    • SQLWizardHome::RowsToDisplay2
    というグローバルフィールドの他に、
    • $$sc_Display
    というグローバル変数の繰り返し番号1と2についてもクリアしている。

    グローバル変数はファイル依存なので、ファイルを開くときにキックされるスクリプトのサブスクリプトとして、「グローバル変数をクリアする」というのは釈然としないが、使い回す価値があるからサブスクリプトにしているのだろうから、他のスクリプトから呼び出される場面も考えられているからなのね。

    また、(変数に複数の値を入れたい場合、改行区切りで入れることが多いが)このように変数にわざわざ繰り返しを設定しているところをみると、値自体に改行を持つものが入るのかなーと。
    よくよく見ると、Function(機能)の説明に、
    Utility script for clearing virtual list arrays and the global fields that set the number of rows to show in the respective portals.
    とある。
    なるほど、Virtual List の配列の元とするグローバル変数 をクリアしたいのね。だから、繰り返しなんだ。
    VL のクリアが目的なら、たしかに、(ファイルを開いたときだけでなく)ファイルを開いた後の操作中にも、同じ VL を別用途で使う前にも、その前に使っていた VL をクリアするときにも使うものね。

    さて、Upon Opening Hierarchy に戻ると、今度は、Create Rows というサブスクリプトに飛ばされる。

    #Make sure Virtual List records are there.
    スクリプト実行 [ 「Create Rows」 ]

    Create Rows


    SeedCode SQL Explorer: Housekeeping: Create Rows
    #
    #==============================================
    # Function: Part of start-up routine to make sure virtual list display rows are populated to the specified number.
    # Parameters:
    # Notes:
    # Author: SeedCode
    # Version: 1.0
    #==============================================
    #
    #Default Number Row Records
    変数を設定 [ $sc_NumberRows; 値:1000 ]
    フィールド設定 [ SQLWizardRows1::DragDrop1; " " ]
    #
    ウインドウの固定
    #
    レイアウト切り替え [ 「dev_Rows」 (SQLWizardRows1) ]
    全レコードを表示
    If [ Get ( 対象レコード数 ) = $sc_NumberRows ]
    レイアウト切り替え [ 元のレイアウト ]
    現在のスクリプト終了 [ 結果: "" ]
    End If
    #
    対象レコード削除[ ダイアログなし ]
    変数を設定 [ $sc_c; 値:1 ]
    Loop
    新規レコード/検索条件
    フィールド設定 [ SQLWizardRows1::RowNumber ]
    変数を設定 [ $sc_c; 値:$sc_c + 1 ]
    Exit Loop If [ $sc_c > $sc_NumberRows ]
    End Loop
    #
    レイアウト切り替え [ 元のレイアウト ]
    現在のスクリプト終了 [ 結果: "" ]

    さて、Function(機能)の説明にこうある。
    # Function: Part of start-up routine to make sure virtual list display rows are populated to the specified number.
    「スタートアップルーチンの一部として、Virtual List を表示するための row を特定の数、確実に生成しておく」
    のが目的らしい。

    #Default Number Row Records
    変数を設定 [ $sc_NumberRows; 値:1000 ]
    フィールド設定 [ SQLWizardRows1::DragDrop1; " " ]
    #
    ウインドウの固定
    #
    レイアウト切り替え [ 「dev_Rows」 (SQLWizardRows1) ]

    VL用のレコードを、予めいくつ作っておくのかという数字が、$sc_NumberRows にセットされた 1000 ちうことね。
    SQLWizardRows1::DragDrop1 というフィールドに、半角スペースをセット。
    これ何でしょう?現時点ではわかりません。

    SQLWizardRows1 という TO がコンテキストであるレイアウト「dev_Rows」に移動。
    そのまえに、ウインドウの固定が入れて、余計な画面遷移を出したくないのね。

    全レコードを表示
    If [ Get ( 対象レコード数 ) = $sc_NumberRows ]
    レイアウト切り替え [ 元のレイアウト ]
    現在のスクリプト終了 [ 結果: "" ]
    End If

    TO「SQLWizardRows1」のすべてのレコードを表示した後の条件が…
    Get ( 対象レコード数 ) = $sc_NumberRows
    $sc_NumberRows は、さっき 1000 をセットした。
    SQLWizardRows1というTOのレコードも現在 1000 なので、この条件式は真。
    真だと、元のレイアウトに戻ってスクリプト終了。

    なるほど、SQLWizardRows1 ってのが VL のテーブルなのね。
    そこに、予め 1000 のレコードを作っておくためのスクリプトだもんね。
    ちうことは、現在の VL のレコード数が1000 レコードじゃない場合の処理が次に来るわけね。

    対象レコード削除[ ダイアログなし ]
    変数を設定 [ $sc_c; 値:1 ]
    Loop
    新規レコード/検索条件
    フィールド設定 [ SQLWizardRows1::RowNumber ]
    変数を設定 [ $sc_c; 値:$sc_c + 1 ]
    Exit Loop If [ $sc_c > $sc_NumberRows ]
    End Loop
    #
    レイアウト切り替え [ 元のレイアウト ]
    現在のスクリプト終了 [ 結果: "" ]

    やっぱり。
    全レコード削除して、$sc_c ちうカウンタを上げながら、新規レコードを $sc_NumberRows の数(1000)作るっちうことね。

    んで、また、最初の Upon Opening Hierarchy に戻る。

    #Create Array of color codes used for color coding tables and their fields.
    変数を設定 [ $$sc_ColorList;
    値:"6802379¶11068584¶16636347¶16628667¶13358314¶16774105¶14416052¶13411788¶16770466¶129018 59¶6802379¶11068584¶16636347¶16628667¶13358314¶16774105¶14416052¶13411788¶16770466¶12901 859" ]
    #
    #Go To Home layout.
    レイアウト切り替え [ 「Queries」 (SQLWizardHome) ]

    テーブルやフィールドの文字列用のカラーコーディングに使うカラーコードの配列を作るわけですね。
    そして、このファイルのホームレイアウトである SQLWizardHome へ。

    スクリプト実行 [ 「Adjust_Window { HideStatusArea ; Lock }」; 引数: "HideStatusArea = 0" ]

    最後に、HideStatusArea = 0 という引数で、Adjust_Window { HideStatusArea ; Lock } というスクリプトを実行。

    Adjust_Window { HideStatusArea ; Lock }


    SeedCode SQL Explorer: General: Adjust_Window { HideStatusArea ; Lock }
    #
    #==============================================
    # Function: Utility script for adjusting current window (to fit)
    # Parameters: Hide Status Area ( Yes or No ) ; Lock
    # Notes:
    # Author: SeedCode
    # Version: 1.0
    #==============================================
    #
    #
    #Evaluate Patameters
    スクリプト実行 [ 「Parameters to Local Variables」; 引数: Get ( スクリプト引数 ) ]
    変数を設定 [ $parameters; 値:Evaluate ( Get ( スクリプトの結果 ) ) ]
    #
    #Hide and Lock if specified with parameters.
    If [ $sc_HideStatusArea = "Yes" ]
    If [ $sc_Lock ]
    ツールバーの表示切り替え[ ロック; 隠す ]
    Else
    ツールバーの表示切り替え[ 隠す ]
    End If
    Else If [ $sc_HideStatusArea = 0 ]
    ツールバーの表示切り替え[ 表示する ]
    End If
    #
    #Adjust window
    ウインドウの調整[ 収まるようにサイズ変更 ]
    #

    カレントウインドウを調整するスクリプトね。

    はじまってすぐにParameters to Local Variables というスクリプトに飛ばされる。
    コメントに “Evaluate Parameters" とあるから、スクリプト「Adjust_Window { HideStatusArea ; Lock }」に渡されたスクリプト引数( “HideStatusArea = 0" )を Evaluate するスクリプトに飛ばされるわけね。

    Parameters to Local Variables


    SeedCode SQL Explorer: General: Parameters to Local Variables
    #
    #==============================================
    # Function: Neat little utility to transform script parameters into local variables of the same names.
    # Parameters: The script parameter you wish to transform, sent as Get ( ScriptParameter )
    # Notes: After calling this script, call the following in your script to instantiate the variables:
    : SerVariable [$parameters ; Value:Evaluate ( Get ( ScriptResult ) )]
    : Note that this script namespaces your variables with $sc_
    : Script parameters sent in here must follow the format: name = value ; name2 = value 2 with even spaces around =s and ;s.
    # Author: SeedCode
    # Version: 5.23.1
    #==============================================
    #
    #> > make semicolon = safe?
    #
    If [ IsEmpty ( Get ( スクリプト引数 ) ) ]
    変数を設定 [ $parameters; 値:"empty" ]
    Else
    変数を設定 [ $parameters; 値:
    Let ( [
    n = Substitute ( Get ( スクリプト引数 ) ; "¶" ; "\¶" ); prefix = "$sc_" ;
    e = PatternCount ( n ; " = " ) = 0 ;
    string = Substitute ( n ;
    [ " ; " ; "\" ; " & prefix ] ;
    [ " = " ; " = \"" ] )
    ];
    "Let ( [ " & prefix & string & "\" ] ; \"\" )"
    )]
    End If
    現在のスクリプト終了 [ 結果: $parameters ]
    #

    なにやら楽しそうだぞ!

    「スクリプト引数を、同名のローカル変数に変身させる」だと。
    Note を見ると…
    このスクリプトをコールした後で、あんたのスクリプト内で、変数のインスタンス生成するために以下をコールしなさいな…と。

    変数を設定 [ $parameters; Value:Evaluate ( Get ( ScriptResult ) ) ]

    Get ( ScriptResult ) を Evaluate したものを $parameters という変数にセット…ね。
    $sc_ ってのを(頭につけて)、名前空間とする(ローカル変数名のネームコンフリクトをさける)
    このスクリプトに送られるスクリプト引数は以下の形でなければならない。
    name = value ; name2 = value 2( = や ; の前後がスペースでも)

    にゃるほど。

    #> > make semicolon = safe?
    #
    If [ IsEmpty ( Get ( スクリプト引数 ) ) ]
    変数を設定 [ $parameters; 値:"empty" ]
    Else
    変数を設定 [ $parameters; 値:
    Let ( [
    n = Substitute ( Get ( スクリプト引数 ) ; "¶" ; "\¶" );
    prefix = "$sc_" ;
    e = PatternCount ( n ; " = " ) = 0 ;
    string = Substitute ( n ;
    [ " ; " ; "\" ; " & prefix ] ;
    [ " = " ; " = \"" ] )
    ];
    "Let ( [ " & prefix & string & "\" ] ; \"\" )"
    )]
    End If

    セミコロンが安全かどうか?
    スクリプト引数が空値の場合、$parameters には、"empty" というテキストをセットする。
    スクリプト引数になにがしかの文字が入っていれば、$parameters に以下の式の結果をセットする。

    Let 式の内部を確認していく。
    (仮に、スクリプト引数が "hoge = ほげ¶ほげ ; nan = なんちゃら" だったとき)
    n は…

    hoge = ほげ¶ほげ ; nan = なんちゃら

    あれ?一緒じゃん…と思うなかれ。
    じっさいには、スクリプト引数は…

    hoge = ほげ
    ほげ ; nan = なんちゃら

    なのである。このスクリプト引数内の¶をいったんエスケープして、Value(xxx = yyy ; xxx2 = yyy2 のようなときの、yyy や yyy2 にあたる部分)自体が改行を含む場合も破綻しないように、後に続く式内でも使えるようにしているわけだ。

    e は、n に “=“ が無ければ 1(True)…ということだから、0(False)。

    string の結果は…

    hoge = "ほげ¶ほげ" ; $sc_nan = "なんちゃら

    $sc_ という文字が片方(後方)にのみついていて、後方のダブルクォーテーションも欠けているが、この後、
    "Let ( [ " & prefix & string & "\" ] ; \"\" )"
    と整形してやると…

    Let ( [ $sc_hoge = "ほげ¶ほげ" ; $sc_nan = "なんちゃら" ] ; "" )

    という Let から始まる Let計算式 が生成される。

    現在のスクリプト終了 [ 結果: $parameters ]

    このスクリプトが終わって、このスクリプトをコールしたスクリプトに戻ったときに、Get ( ScriptResult ) で呼び出せるように、スクリプトの結果に $parameters を入れて終了。

    そして、Adjust_Window { HideStatusArea ; Lock } に戻ってくる。

    変数を設定 [ $parameters; 値:Evaluate ( Get ( スクリプトの結果 ) ) ]

    Get ( ScriptResult ) を Evaluate したものを、$parameters にセット…と見えるが、結果をデータビューアで見ても、$parameters という変数は存在しない。
    直前にコールされた Parameters to Local Variables の説明にもあったように、Parameters to Local Variables というスクリプトでは Let で始まる『式テキスト』を生成する。
    Parameters to Local Variables が終わると、Get ( ScriptResult ) として、Adjust_Window { HideStatusArea ; Lock } 内で使用するローカル変数を作成する。

    通常、変数をセットするには、スクリプトステップ「変数を設定」でシンプルに使いたい変数名をセットする。
    しかし、ここでは、変数を設定スクリプトステップで、$parameters という変数を設定する…フリをしながら、実際には…

    Get ( ScriptResult ) …つまり、Let ( [ $sc_HideStatusArea = "0" ] ; "" ) という式を Evaluate することで、
    $sc_HideStatusArea という変数 に 0 を設定している。

    この Let ( [ $sc_HideStatusArea = "0" ] ; "" ) というテキストは、直前のスクリプトステップでコールした外部スクリプト「Parameters to Local Variables」によって生成された。
    そして、Parameters to Local Variables の実行時に予め渡された

    HideStatusArea = 0

    というスクリプト引数が元になっているが、その元を辿ってみよう。
    遡ると、このテキストは、大元のスクリプト「Upon Opening Hierarchy」によって、Adjust_Window { HideStatusArea ; Lock } にスクリプト引数として渡されたものなのだ。

    大元の Upon Opening Hierarchy スクリプト内で、ウインドウの調整をさせるスクリプト「Adjust_Window { HideStatusArea ; Lock }」を呼び出す際に、スクリプト引数で、HideStatusArea = 0 と渡せば、「ステータスエリアを隠さない」というオプションを指定して実行することができる。
    よく見れば、スクリプト名「Adjust_Window { HideStatusArea ; Lock }」は、Adjust_Windows というスクリプトの内容を表すテキストの後に中括弧で括られて、{ HideStatusArea ; Lock } とある。
    ウインドウの調整をさせるスクリプトに「ステータスエリアは隠すの/隠さないの?」「ロックするの?/しないの?」というふたつのオプションが指定可能である…ということが、スクリプト名を見ればわかるようになっている!

    Upon Opening Hierarchy では、ステータスエリアの表示について「隠す」というオプションを指定しているだけだが、別のスクリプトから呼ばれたときに、「ウインドウをロックする」というオプションを指定することも、もちろん可能だ。

    HideStatusArea = 0 ; Lock = 1

    をスクリプト引数に入れて、Adjust_Window { HideStatusArea ; Lock } に渡せば、Adjust_Window { HideStatusArea ; Lock } は、まず、今 Upon Opening Hierarchy からもらったばかりのスクリプト引数と共に、Parameters to Local Variables をコールする。
    Parameters to Local Variables は結果、

    Let ( [ $sc_HideStatusArea = "0" ; $sc_Lock = "1" ] ; "" )

    という計算式を生成し、Adjust_Window { HideStatusArea ; Lock } に、Get ( ScriptResult ) として返す。
    Adjust_Window { HideStatusArea ; Lock } は、それを、 変数を設定スクリプトステップを使って、$parameters をセットするのだが、
    その計算式で、Let ( [ $sc_HideStatusArea = "0" ; $sc_Lock = "1" ] ; "" ) を Evaluate することで結果として…

    • $sc_HideStatusArea という変数が 0、
    • $sc_Lock という変数が 1で、セットされる。

    Dictionary関数と比べてみる

    Dictionary関数 と呼んでいる 連想配列を作る関数群をよく使うが、Dictionary関数に頼らずとも、Parameters to Local Variables という汎用の D.R.Y. なスクリプトに、Label1 = Value1 ; Label2 = Value2 というスクリプト引数を投げてやることで、同様のことを実行しているわけか…どう違うのか…。

    Dictionary関数使用の場合

    投げるスクリプト引数は…

    SetProperty ( "Label1" ; Value1 ) & SetProperty ( "Label2" ; Value2 )

    結果を引き出すときは…

    変数を設定 [ $Label1; 値:GetProperty ( Get ( ScriptResult ) ; "Label1" )]
    変数を設定 [ $Label2; 値:GetProperty ( Get ( ScriptResult ) ; "Label2" )]


    …もしくは、
    GetScriptResult ( "Label" ) := GetProperty ( Get ( ScriptResult ) ; "Label" ) をカスタム関数に追加登録して、

    変数を設定 [ $Label1; 値:GetScriptResult ( "Label1" )]
    変数を設定 [ $Label2; 値:GetScriptResult ( "Label2" )]

    Parameters to Local Variables でLet計算式を生成して、あとでEvaluateという手法なら…

    投げるスクリプト引数は…

    "Label1 = Value1 ; Label2 = Value2"
    まあ、こっちの方が読みやすいっちゃ読みやすいね。

    結果を引き出して使うときは…複数の変数を設定するにも一挙に1ステップ

    変数を設定 [ $parameters; 値; Evaluate ( Get ( ScriptResult ) )

    Evaluate はコスト高だし、予期せぬ動きにならないとも限らないという面もなきにしもあらず。
    なので、これだけならさして違いはないというか、どっちでも、お好きな方で…なのだが、

    以下のような条件の場面では、「Let計算式を作って Evaluate する」という SeedCode 方式がすこぶる便利だろう。

    • 変数名もスクリプト引数で渡すLabel名も同じでOKの場合
    • やたらと膨大な変数を一気に100とか登録したい場合
    • 変数名は Label1、Label2… のように Loop で作りたい…という場合

    変数名もスクリプト引数で渡すLabel名も同じでOKの場合

    まず、スクリプト引数を作る段階ですでに、後で使うときの変数名は、自動的にスクリプト引数のラベル名になるように作るので、変数を作る際に、変数名を「なんだっけかな?」と悩む必要が無い。
    ※ スクリプトごとに、スクリプト引数内で使うラベル名をスクリプト名の命名規則(中括弧で括り、デリミタはセミコロンとか)にすれば「このスクリプトをコールするときどんなスクリプト引数つけるんだっけ?」というのがわかりやすくなる。

    やたらと膨大な変数を一気に100とか登録したい場合

    個人的には、スクリプト引数で指定するときの式は、さほど変わらないように思うが、Get ( ScriptResult ) を使って、山ほどの変数をセットするときには、Evaluate 一発で設定できた方がどう考えても楽チン。

    変数名は Label1、Label2… のように Loop で作りたい…という場合

    Loop で回して…(Virtual List を使うとき、VLの元となる変数を作成する場合など、ラベル名は、特定の文字列に続けて繰り返し番号だけをインクリメントしたいとかは「あるある」な話)という場合、「スクリプト引数を作る」ためだけのスクリプトが明らかに著しく作りやすい。

    さて、残りをやっつけるか…w

    #Hide and Lock if specified with parameters.
    If [ $sc_HideStatusArea = "Yes" ]
    If [ $sc_Lock ]
    ツールバーの表示切り替え[ ロック; 隠す ]
    Else
    ツールバーの表示切り替え[ 隠す ]
    End If
    Else If [ $sc_HideStatusArea = 0 ]
    ツールバーの表示切り替え[ 表示する ]
    End If
    #
    #Adjust window
    ウインドウの調整[ 収まるようにサイズ変更 ]

    思った通りなので、何も言うことはない。










    Amazon Route 53 で Postach.io のカスタムドメインを設定

    Posted on November 5th, 2014

    Facebook に書いたように

    "DNS は Amazon Route53 で無問題かちら?
    自分用/顧問先用含め、そこいらにとっちらかって使っているホスティング/レンタルサーバを、可用性、機密性、完全性、コストパフォーマンス、共に優秀などこかのクラウド上に集約すっぺかな…と考え中。まずは、DNS から…。"
    …てなことで、Route53 を使ってみた。

    ま、Amazon Route53 を知らない人も数字を見て明らかなように、DNS サービスだす。

    せっかくなので、意味のある実験をすべぇと…
    Postach.io (※)内の自分ちのブログ別館を、つい登録した mylog.jp で開けるように設定してみる。

    Postach.io
    Evernote で、 “postach.io" というノートブックにあって、"published" というタグが付いているエントリの内容をそのままBlog のように公開してしまうちう便利なサービス ※ 最近、有料コースも出てきた。$50/年で SSL / マルチユーザー / マルチブログ なのが有料コースのベネフィット



    Postach.io でやること

    1. Postach.io にログインして、対象のサイト名横の鉛筆マークをクリック

    2. 使いたいドメイン名を入力し UPDATE SITE DETAILS をクリック
    ※ Learn how to configure custom domains をクリックした先のページ(下図)で、Postach.io サイトのIPアドレスが表示されるので、メモしておく。

    3. これを Route 53 で作成する Aレコードの Value に指定するべくメモしておく。



    Amazon Route 53 でやること

    1. Route 53 をクリック



    2. DNS Magagement の Get Started Now をクリック


    3. Create Hosted Zone をクリック



    4. Create Hosted Zone をクリック


    5. Doman Name に使用するドメインを、Comment に適切なコメントをそれぞれ入力し、Create ボタンをクリック


    6. Go to Record Sets をクリック


    7. Create Record Set をクリック


    8. Value に対象のドメイン名(ネイキッドドメイン)で飛ばしたい先の IPアドレス(『Postach.io でやること』でメモしておいた IPアドレス)を入れて、Create をクリック。



    お名前.COM でやること



    1. 表から、対象の [ドメイン] の [ネームサーバー] > [変更する]



    2. [他のネームサーバーを使用] タブ > [ネームサーバー情報を入力] 欄に、Amazon Route53 のNSのValue欄の IPアドレス群をプライマリネームサーバー(セカンダリネームサーバー)にそれぞれ入力し、[確認画面へ進む] をクリック
    ※ このとき、末尾に ".(ピリオド)" が入っていないことを確認します。
    ※ Amazon Route 53 からコピーしたときに、DNSレコードの内容からコピーした場合、ピリオドが入っている場合があります。



    3. [設定する] をクリック



    完了

    FileMaker の計算式を見やすく変換(Formatting Calculations In Place )

    Posted on March 13th, 2014

    TextMate 用の FileMaker.tmbundle の GitHubリポジトリの中で、なかなか便利なツールを発見。

    Formatting Calculations In Place :記事FileMaker の計算式ダイアログで、適当に書き殴った計算式の体裁を整えてくれるツール。

    使い方

    ↓こんな計算式を選択して、
    ショートカットキーコンビネーションで、

    ↑こんな感じに、Tidy してくれる。

    仕込み方

    Formatting Calculations In Place で、Format_Calc.zip をダウンロード。
    解凍してできる
    Format_Calc/Service/FileMaker: Format Calc.service
    
    $HOME/Library/Services/FileMaker:\ Format\ Calc.service
    
    に入れて、念のため、システム環境設定 > キーボード > キーボードショートカット > サービスから
    FileMaker: Format Calc に適当にショートカットを与える。
    TextMate の FileMaker.tmbundle における Tidy と同様の動き。
    # 同じpearlスクリプト(tidy.pl)使ってるんだから、そらそーだ。w

    bison

    ICT Consultant, Solutions Developer, StudioBISON