銀河の歴史がまた1ページ(日記)

Last Update (2018/02/24 22:19:08)
1997.09.06から数えて counter 番目のアクセスです。

ミラーサイト [www.ceres.dti.ne.jp] [yk.rim.or.jp]

[ホームページ] [日記] [読んでいる日記] [FreeBSD] [FreeBSD LINK] [検索]

ページ内目次


■ 宇宙暦 2018.02.24

http://www.ceres.dti.ne.jp/~george/jdiaryB80201.html#20180224

2018.02.24(土) iPhone8 Plus 購入

ちょうど2年縛りが解けたので、iPhone8 Plus 購入。108,000円(ソフトバンク)。

つーか、驚くほど外見変わらないなこれw 裏面はガラスになってるけど。

早速機種変更の移行儀式を開始する。

  1. iTunines を使ったPCへのバックアップ(iPhoneのバックアップを暗号化)
    iPhoneのバックアップを暗号化すると、ほとんどのデータが移行できる。
  2. LINE
    メールアドレス&パスワードは登録済み。旧端末で移行処理。新端末でSMS認証の後使えるようになった。
    新端末でLINE初回起動時に移行操作のガイドが表示されるのでわかりやすい。
  3. Google Authenticator
    https://dekiru.net/article/15134/ 【機種変更時は忘れずに!】Googleアカウントの認証アプリを新しいスマホに移行する方法 | できるネット
    上のサイトの画面写真はちと古いが、操作の雰囲気は伝わるかと。
    パソコンのブラウザ画面にQRコードを表示させて、スマホのカメラでGoogle Authenticatorに追加。
  4. PSO2 es
    バックアップから復元した場合、引継ぎ操作は不要だった
  5. PSO2
    PSO2 は Google Authenticator を使っている。
    こちらは旧スマホのGoogle Authenticatorを使ってSEGA PSO playersサイトからログインして、登録情報の確認・変更へ進み、新しいOTPを登録する操作でPCのWebブラウザ画面にQRコードを表示し、新スマホ側でGoogle Authenticatorから追加設定する。
  6. GMail
    二段階認証している場合、GoogleアプリとかGmailアプリにログインすると、旧スマホに認証通知が飛んでくるので認証して、新スマホで認証の通知を受信する。

スマホ移行とは関係ないけど、手持ちのSUICAをiPhone8+に移行してみた。SUICAカードの方はもうチャージできなくなるそうだ。

iPhone8 Plusの印象だけど、本体から鳴らした場合音が良い感じ。 iPad Pro 10.5 inchの時もそう思ったけど、今回の音には驚いた。 iPhone6s Plusだと音が明らかに本体下のスピーカー穴から出てたけど、今度のiPhone8 Plusはガラス面の全面(前も後ろも)から音が出てるように感じる。 指でガラスに触れてると振動してるww マジで頭おかしい(褒め言葉

(指で本体右下のスピーカー穴を抑えると、メインの音はここから出ているのがわかるが・・・なぜか全面から聞こえるような気がするんだよなー。音位置測定(コロケーション)を誤魔化す処理が入っているのかしら?)

次回のiPhone購入は2年後の3月末から可能になる予定。

それではベンチマーク。iPhone8 Plusの方がiPad Pro 10.5より高速って出てるけどマジかww

GeekBench4 Single-Core Multi-Core CPU
iPhone8 Plus 4240 10128 Apple A11 Bionic @ 2.39GHz
iPad Pro 10.5 3966 9453 Apple A10X Fusion @ 2.34GHz
iPhone6s Plus 2524 4406 Apple A9 @ 1.85GHz

これは次のiPadの販売が近いかもしれん。

寝転がって使ってみた感想。すごく重いゾこれ。手首と肘が負けて折れるww

見た目あんまりイノベーションは無いけど、ハードウェアスペックの進化は凄まじい。 PCで考えたらこれくらい性能差があったら買い替えてもいいかも。

2018.02.24(土) オレのAWS鯖にもLet's Encrypt設定

Ubuntu 16.04 LTS だと letsencrypt というcertbotに名前が変わる前の古いパッケージしかないので、 上のサイトで最新版拾うのが良さそう。

上のサイトでは、certbotチームはUbuntu向けにppaというリポジトリをメンテナンスしているので、そこのリポジトリを追加してダウンロードする手順が表示された。

sudo apt-get update
sudo apt-get install software-properties-common
sudo add-apt-repository ppa:certbot/certbot
sudo apt-get update
sudo apt-get install python-certbot-apache 

apacheの設定ファイルも自動設定してくれるモードでチャレンジ。

sudo certbot --apache  -d <ドメイン名> -m <自分のメールアドレス>

ライセンス承諾するか?とメーリングリストに登録するか?の質問はインタラクティブに答える。

お。自動でvirtualHostの設定ファイルにSSL設定を追加してくれてる。

あとは、Amazon AWSのコンソール画面からport443を通すように設定。

ふむ。

cron設定でcertbot renewも忘れずに。


■ 宇宙暦 2018.02.22

http://www.ceres.dti.ne.jp/~george/jdiaryB80201.html#20180222

2018.02.22(木) FreeBSD 11.1 RELEASE の apache-2.4 に Let's Encrypt を入れてみる。

tag:freebsd

Let's Encryptを使うなら、certbotというツールを使うのが良いらしい。

ssh george@n3050 ~ $ pkg search certbot
py27-certbot-0.20.0,1          Let's Encrypt client
py36-certbot-0.20.0,1          Let's Encrypt client
ssh george@n3050 ~ $ 

python3.6用を使ってみよう。

sudo pkg install -y py36-certbot-0.20.0,1
root@n3050 ~ $ certbot-3.6 --help

-------------------------------------------------------------------------------

  certbot [SUBCOMMAND] [options] [-d DOMAIN] [-d DOMAIN] ...

Certbot can obtain and install HTTPS/TLS/SSL certificates.  By default,
it will attempt to use a webserver both for obtaining and installing the
certificate. The most common SUBCOMMANDS and flags are:

obtain, install, and renew certificates:
    (default) run   Obtain & install a certificate in your current webserver
    certonly        Obtain or renew a certificate, but do not install it
    renew           Renew all previously obtained certificates that are near
expiry
   -d DOMAINS       Comma-separated list of domains to obtain a certificate for

  (the certbot apache plugin is not installed)
  --standalone      Run a standalone webserver for authentication
  (the certbot nginx plugin is not installed)
  --webroot         Place files in a server's webroot folder for authentication
  --manual          Obtain certificates interactively, or using shell script
hooks

   -n               Run non-interactively
  --test-cert       Obtain a test certificate from a staging server
  --dry-run         Test "renew" or "certonly" without saving any certificates
to disk

manage certificates:
    certificates    Display information about certificates you have from Certbot
    revoke          Revoke a certificate (supply --cert-path)
    delete          Delete a certificate

manage your account with Let's Encrypt:
    register        Create a Let's Encrypt ACME account
  --agree-tos       Agree to the ACME server's Subscriber Agreement
   -m EMAIL         Email address for important account notifications

More detailed help:

  -h, --help [TOPIC]    print this message, or detailed help on a topic;
                        the available TOPICS are:

   all, automation, commands, paths, security, testing, or any of the
   subcommands or plugins (certonly, renew, install, register, nginx,
   apache, standalone, webroot, etc.)
-------------------------------------------------------------------------------
root@n3050 ~ $
apachectl stop
certbot-3.6  certonly  --standalone  --preferred-challenges http  -d <ドメイン名>
certbot-3.6 certificates
(前略)
<VirtualHost *:443>
    ServerName <ドメイン名>
    DocumentRoot "/usr/local/www/apache24/data"
    ServerAdmin <メールアドレス>
    ErrorLog "/var/log/httpd-error.log"

    SSLEngine on
    SSLCertificateFile "/usr/local/etc/letsencrypt/live/<ドメイン名>/fullchain.pem"
    SSLCertificateKeyFile "/usr/local/etc/letsencrypt/live/<ドメイン名>/privkey.pem"
(後略)
# virtual host の設定チェック
apachectl -S
# 設定ファイルの文法チェック
apachectl configtest
# apache再起動
apachectl restart

ふむ。httpsでアクセスできる。

2018.02.22(木) Let's Encrypt のサーバ証明書を自動更新したい

tag:freebsd

Let's Encrypt のサーバ証明書は有効期限が三カ月と短い。

このため、cronなどで自動更新にしている人が多いようだ。

renewする時はhttpdは落とさなくて良いみたいだ。

ウチの場合は以下のようなコマンドになった。

certbot-3.6 renew --post-hook "/usr/local/etc/rc.d/apache24 restart"

rootユーザーからcrontabの登録を行う。

crontab -e

んー。crontabで90日ごとに更新ってどう表現すりゃいいんだw

90日の期限が切れる前に実行したい。 できればLet's Encryptのサーバが落ちていた場合も考えて、期限が切れる2週間前と1週間前に実行したい。 その次の更新は、そこから90日後に行いたい。 ...。

毎週更新チェックすればいいか。certbot側で更新のための通信が必要かどうかは判断してるし。

crontabの内容。

MAILTO=george
PATH=/sbin:/usr/sbin:/bin:/usr/bin:/usr/games:/usr/local/sbin:/usr/local/bin
LANG=ja_JP.UTF-8
7 5 * * 4 certbot-3.6 renew --post-hook "/usr/local/etc/rc.d/apache24 restart"

2018.02.22(木) TL;DR って何?

too long didn't read(長すぎたから読まなかった)の略語・インターネットスラング。 転じて要約の意。Qiita等で見かけるときはこちらがメイン。

今北産業の意味でだいたいあってた。


■ 宇宙暦 2018.02.21

http://www.ceres.dti.ne.jp/~george/jdiaryB80201.html#20180221

2018.02.21(水) minikube に heapster を入れる ( minikube addon編 )

tag:kubernetes

前回は helm chart で heapster 入れたけど、実は minikube addon には heapster があった(涙)

前回インストールしたheapsterは helm delete --purge my-heapster で削除してから以下を実行。

# アドオンの一覧表示
minikube addons list

# heapsterを有効にする
minikube addons enable heapster

# grafanaのWeb画面をブラウザで開く
# デフォルトブラウザがEdgeだと、 http://192.168.99.100:30002/ は表示できないので、Firefoxとかで表示する
minikube addons open heapster 

グラフィカルに色々なメトリクスが表示できる。 が....。

george@KabyLakeS ~ $ kubectl top pod --all-namespaces
NAMESPACE     NAME                               CPU(cores)   MEMORY(bytes)
default       my-kjwikigdocker-9f8498777-2hrc6   2m           201Mi
kube-system   heapster-jcqdn                     0m           16Mi
kube-system   influxdb-grafana-h2mpj             8m           40Mi
kube-system   kube-addon-manager-minikube        24m          32Mi
kube-system   kube-dns-54d4f78785-4fns6          1m           43Mi
kube-system   kubernetes-dashboard-r8nk9         0m           19Mi
kube-system   storage-provisioner                0m           35Mi
kube-system   tiller-deploy-7594bf7b76-dqhq4     0m           22Mi
george@KabyLakeS ~ $ kubectl top node
NAME       CPU(cores)   CPU%      MEMORY(bytes)   MEMORY%
minikube   155m         7%        1466Mi          77%
george@KabyLakeS ~ $

1.4Gくらいメモリ食っててワロタw

minikube heapster addon の内部構成はよくわからんけど、たぶん以下のような感じなのだろう。

heapsterは定期的に各種メトリクスを取ってinfluxdbに覚えさせる。 influxdbから情報を拾ってWeb画面に華麗にグラフ表示しているのは grafana (Ruby on Rails)。

minikubeはデフォルトでは2048MBメモリ構成でVMを起動するので、heapster + influxdb + grafana をセットで動かすとメモリ消費がヤバい結果となった。

なるほど、デフォルトでdisabledにされるaddonだな...。表示は華麗なんだけども...。

あと、kubectl top podの合計とkubectl top nodeの値が合わないのも変だな。なんだろこれ。


■ 宇宙暦 2018.02.16

http://www.ceres.dti.ne.jp/~george/jdiaryB80201.html#20180216

2018.02.16(金) minikubeにheapsterを入れてkubectl top nodeしてみる

tag:kubernetes

minikubeにはheapster(kubectl top nodeとかで使うサービス。CPU使用率とかメモリ使用率を表示)が入っていないので、入れてみる。

インストール方法は、helm & charts に頼るw

helm ( & tiller ) & charts は、kubernetes用の homebrew(MacOS X) とか chocolatey(Windows) とか yum(Red Hat) みたいなモン。

helm & tillerがyumのような普通のバイナリパッケージ管理システムと異なる点は、tiller serverが常駐してkubernetesサービスとしてアクセス可能である必要があること。 (要するにクライアント/サーバ型のシステム)

なお、helmでインストールしたchartの情報はkubernetes上のconfigmapとかsecretsに保存されているので、 helm listでインストールしたRELEASE-NAME一覧が表示でき、 helm history RELEASE-NAME とすると、該当するパッケージの履歴が見物できる。


# minikube開始
minikube start

# helm設定ファイル初期化&tiller server(deployment+service)をkubernetesにインストール
helm init

# heapsterのchartのtar.gzを取得
helm fetch stable/heapster

# tar.gzを展開
tar xvzf heapster-0.2.5.tgz

# README.mdを読む。パラメータとして指定できる変数の一覧が書いてある。
# heapster/values.yamlにはパラメータの初期値が書いてある。
# service.typeをClusterIPからNodePortにする必要がある。(minikubeなので)

# helmを使ってインストール。
# RELEASE-NAMEは my-heapster にした。これは helm のインストール管理用の名前。helm list で表示される。好きな名前をつけてOK。
# インストール先の namespace は kube-system とする。
# インストール先のnamespaceをkube-system以外にした場合は、
# kubectl top node 実行時に --heapster-namespace オプションにて 
# heapsterをインストールしたnamespaceを指定する必要がある。
# service.typeは --set オプションでコマンドラインから指定可能。
helm install --name my-heapster --namespace kube-system  --set service.type=NodePort  heapster

# kubectl top node してみる
kubectl top node

実行結果

george@KabyLakeS /c/home/minikube/charts $ kubectl top node
NAME       CPU(cores)   CPU%      MEMORY(bytes)   MEMORY%
minikube   138m         6%        913Mi           48%
george@KabyLakeS /c/home/minikube/charts $

CPU(cores)が138mとあるが、これは1CPUを1000mとしたミリCPUコア(?)という単位のようだ。

kubernetesでは、このPodはCPUリソースを100m使うよーとかメモリを100Mi使うよーとか、予約(require)できたりする。

予約で埋まったノードにはもうPodは新たに作成されないとか、そんな制御もできるようだ。

minikubeは1ノードしか無いので関係ないけど。


■ 宇宙暦 2018.02.14

http://www.ceres.dti.ne.jp/~george/jdiaryB80201.html#20180214

2018.02.14(水) バーチャルネットアイドル ちゆ12歳がバーチャルユーチューバーとして復活?!

マジかよ...。

2018.02.14(水) なぜHTTPS化が必要なのか

なぜHTTPS化が必要なのか

いい記事だったのでメモ。

HTTPのままだと、中間者攻撃でブラウザにウィルス仕込まれる、ということが実際にあるらしい。 NSAとか国家レベルの機関なら十分実施可能で、実際に使われているとのこと。

そろそろ自宅鯖とオレのAWS鯖にもLet's Encrypt入れるかなー


■ 宇宙暦 2018.02.04

http://www.ceres.dti.ne.jp/~george/jdiaryB80201.html#20180204

2018.02.04(日) TIL 中胚葉型とかがあるらしい

You Tube 動画を流し見していたら、ボディビル関連の動画で「中胚葉型」とかいう聞きなれない単語が耳に入ってきたのでグーグル先生に聞いてみた。

ボディビル業界では、生まれつきの体質として「内胚葉型」「中胚葉型」「外胚葉型」の3種類、および、それらの混合型の体質があると考え、それに合わせた食事とトレーニングをすると良い、とされているらしい。

ボディビルに向いているのは「中胚葉型」で、ボディビル大会で賞を取れるのはこのタイプとのこと。

中胚葉とかって卵の発生時にしか使わない単語だと思ってたわ。


■ 宇宙暦 2018.02.02

http://www.ceres.dti.ne.jp/~george/jdiaryB80201.html#20180202

2018.02.02(金) 雪だー

今回の雪は降り始めが深夜からなので、前回のように帰宅ラッシュ時に入場規制乱発で大混乱とはならなかったが、朝は荒れるかな?

後日談。

今回の雪では、特に混乱はなかった模様。


■ 宇宙暦 2018.01.27

http://www.ceres.dti.ne.jp/~george/jdiaryB80101.html#20180127

2018.01.27(土) docker tomcat8のログをファイルではなくstdout,stderrに出力するように変更する

docker上のアプリはstdout, stderrにログを出して、ログ管理はdocker任せ(コンテナサービス提供会社任せ)にするのが統一的で良いらしい。

というわけで、tomcatのログもstdout/stderrに出すようにしてみる。

まずは /usr/local/tomcat/conf/logging.properties の編集。

FileHandlerは全部コメントに。ConsoleHandlerだけ残す。

# Licensed to the Apache Software Foundation (ASF) under one or more
# contributor license agreements.  See the NOTICE file distributed with
# this work for additional information regarding copyright ownership.
# The ASF licenses this file to You under the Apache License, Version 2.0
# (the "License"); you may not use this file except in compliance with
# the License.  You may obtain a copy of the License at
#
#     http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.

#handlers = 1catalina.org.apache.juli.AsyncFileHandler, 2localhost.org.apache.juli.AsyncFileHandler, 3manager.org.apache.juli.AsyncFileHandler, 4host-manager.org.apache.juli.AsyncFileHandler, java.util.logging.ConsoleHandler
handlers = java.util.logging.ConsoleHandler

#.handlers = 1catalina.org.apache.juli.AsyncFileHandler, java.util.logging.ConsoleHandler
.handlers = java.util.logging.ConsoleHandler

############################################################
# Handler specific properties.
# Describes specific configuration info for Handlers.
############################################################

#1catalina.org.apache.juli.AsyncFileHandler.level = FINE
#1catalina.org.apache.juli.AsyncFileHandler.directory = ${catalina.base}/logs
#1catalina.org.apache.juli.AsyncFileHandler.prefix = catalina.

#2localhost.org.apache.juli.AsyncFileHandler.level = FINE
#2localhost.org.apache.juli.AsyncFileHandler.directory = ${catalina.base}/logs
#2localhost.org.apache.juli.AsyncFileHandler.prefix = localhost.

#3manager.org.apache.juli.AsyncFileHandler.level = FINE
#3manager.org.apache.juli.AsyncFileHandler.directory = ${catalina.base}/logs
#3manager.org.apache.juli.AsyncFileHandler.prefix = manager.

#4host-manager.org.apache.juli.AsyncFileHandler.level = FINE
#4host-manager.org.apache.juli.AsyncFileHandler.directory = ${catalina.base}/logs
#4host-manager.org.apache.juli.AsyncFileHandler.prefix = host-manager.

java.util.logging.ConsoleHandler.level = FINE
java.util.logging.ConsoleHandler.formatter = org.apache.juli.OneLineFormatter


############################################################
# Facility specific properties.
# Provides extra control for each logger.
############################################################

#org.apache.catalina.core.ContainerBase.[Catalina].[localhost].level = INFO
#org.apache.catalina.core.ContainerBase.[Catalina].[localhost].handlers = 2localhost.org.apache.juli.AsyncFileHandler

#org.apache.catalina.core.ContainerBase.[Catalina].[localhost].[/manager].level = INFO
#org.apache.catalina.core.ContainerBase.[Catalina].[localhost].[/manager].handlers = 3manager.org.apache.juli.AsyncFileHandler

#org.apache.catalina.core.ContainerBase.[Catalina].[localhost].[/host-manager].level = INFO
#org.apache.catalina.core.ContainerBase.[Catalina].[localhost].[/host-manager].handlers = 4host-manager.org.apache.juli.AsyncFileHandler

# For example, set the org.apache.catalina.util.LifecycleBase logger to log
# each component that extends LifecycleBase changing state:
#org.apache.catalina.util.LifecycleBase.level = FINE

# To see debug messages in TldLocationsCache, uncomment the following line:
#org.apache.jasper.compiler.TldLocationsCache.level = FINE

Tomcat AccessLog Valve は、別のログ出力システムを内蔵しているので、上のjava.util.loggingの設定は効かない。

/usr/local/tomcat/conf/server.xml 内部にあるアクセスログのところを編集。 /proc/self/fd/1 ファイルに出力する(無茶しやがって)

        <!-- Access log processes all example.
             Documentation at: /docs/config/valve.html
             Note: The pattern used is equivalent to using pattern="common" -->
        <Valve className="org.apache.catalina.valves.AccessLogValve" directory="/proc"
               prefix="self/fd/1" suffix="" fileDateFormat="" rotatable="false"
               pattern="%h %l %u %t &quot;%r&quot; %s %b" />

これで、アクセスログは stdout に、catalina.out は stderr に出てくる。

/usr/local/tomcat/logs にファイルは作成されない。


■ 宇宙暦 2018.01.26

http://www.ceres.dti.ne.jp/~george/jdiaryB80101.html#20180126

2018.01.26(金) ファイル名にja_JP.eucJPが使われたファイルをja_JP.UTF-8ファイル名に変換する

長年、自宅のFreeBSDはLANG=ja_JP.eucJPで運用していたのだが、 iPad用端末エミュレータソフトはUTF-8サポートのみ、というのが多い。

というわけで、LANG=ja_JP.UTF-8にしてみたのだが、eucJP時代に作成した日本語ファイル名を使っているファイルがlsで文字化けする(ファイル名の文字エンコーディングがeucJPなので)ので頭が痛い。

テキストファイル内容の編集を行う場合はemacsが適当に変換してくれるので困らないのだが...。

上手い方法が思いつかなかったのでjarを使ってバックアップしてから戻す、という策に出た。

function f_my_backup_jar() {
    if [ $# -ne 2 ]; then
        echo "f_my_backup_jar  archive-file-name  directory-name"
        return 1
    fi
    local RC=0
    local ARCHIVE_FILE=$1
    local TARGET_DIR=$2

    # シンボリックリンク存在チェック
    local symlinkcount=$( find $TARGET_DIR -type l | wc -l )
    if [ $symlinkcount -gt 0 ]; then
        echo "シンボリックリンクファイルあり。jarはシンボリックリンクではなくファイル内容を格納するので注意。"
        echo "処理中断。"
        return 1
    fi

    # 日本語ファイル名存在チェック
    find $TARGET_DIR > $$.a.txt
    find $TARGET_DIR | strings > $$.b.txt
    diff -uw $$.a.txt $$.b.txt > /dev/null
    RC=$?
    if [ $RC -ne 0 ]; then
        echo "日本語ファイル名あり。"
    fi
    /bin/rm $$.a.txt $$.b.txt

    # 一時的に、eucJPにする。JavaVMはLANGに従ってファイル名の文字エンコーディングを決める。
    export LANG=ja_JP.eucJP
    # jarを使ってアーカイブを作成。jarは内部的にはZIPフォーマットだがファイル名はUTF-8で格納する決まり。
    jar cf $ARCHIVE_FILE $TARGET_DIR
    RC=$?
    # UTF-8に戻す
    export LANG=ja_JP.UTF-8
    if [ $RC -ne 0 ]; then
        echo "jarコマンド失敗;;"
        return 1
    fi
    return 0
}

# バックアップ実行
f_my_backup_jar  /home/backup/webpub2.jar  /home/webpub2

解凍する時は、 export LANG=ja_JP.UTF-8 の状態で jar を使って展開すれば、ファイル名がUTF-8で作成される、という寸法。

ファイルのオーナーは変化してしまうので、chown で適当に補正する必要アリ。

というわけで、オレのFreeBSD機の中のファイル名は全部UTF-8になったゾ。


■ 宇宙暦 2018.01.25

http://www.ceres.dti.ne.jp/~george/jdiaryB80101.html#20180125

2018.01.25(木) Google 翻訳凄い、、、翻訳データをダウンロードしておくとオフラインでも使用できる

Google 翻訳凄い、、、 しかもこれ翻訳データをダウンロードしておくとネット接続してなくていいから、 Textasticと合わせて、僕の電波の届かない区間のある列車の中で翻訳作業できる。 これで通勤列車の中で生産的な活動ができる。素晴らしい。

Google翻訳アプリって、スマホカメラが捉えた日本語の漢字をリアルタイムに翻訳して画面上で英語に張り替えて表示する動画が流行したけど、 オフラインでも翻訳可能アプリなのか。 すげぇな。 神アプリじゃね?

TextasticはiPhone/iPad用の高機能テキストエディタらしい。 iPhone/iPad用エディタ探してたので、後で試してみよう。

関係ないけど、以下のエディタも良さそう。


old day diaries...


日記ファイルリスト最新100件


Copyright(c) 1996-2018 George(小濱 純). All rights reserved.
私の作成したページへのリンクはご自由にどうぞ。
このページに間違いや要望などがありましたら george@yk.rim.or.jp まで御連絡ください。
メール本文に 6020-5440-3372 と書いて頂くと、ウチのSPAMフィルタを通過できます(2009-06-14から2018-12-31まで)。

[ホームページ] [日記] [読んでいる日記] [FreeBSD] [FreeBSD LINK] [検索]

home: <george@yk.rim.or.jp> or <george@ceres.dti.ne.jp>
(I am using white list SPAM filter. To avoid it, please write 6020-5440-3372 in mail body. This key word is valid since 2009-06-14 until 2015-12-31.)