GitHubでつくるブログ

GitHubでページを公開すると簡単にホームページができますが、ホームページができるということはブログもつくれるはず。

 

ということで調べると何人かGitHubでブログを作って公開している人がいる。

 

それなりに苦労しているみたいなので、もうすこしすると、GitHubでそのまま使えるブログ用のテーマができるかもしれない。

 

それを待った方がいいかもしれません。

 

 

UbuntuにLocalにWordPressをインストール

あちこちのサーバーでClosedにWordPressにメモなどを書いていたのをxmlで吐き出して、自分のパソコンのWordPressに読み込ませよう、サーバーは全部解約しよう、と思い立ちました。

 

環境はUbuntu 16.04です。サーバーではなくて、普通のデスクトップ。

Local WordPressで、検索するといっぱいヒットするのですが、結構トラブって、成功したのでメモを残して起きます。


mysqlapacheが動いていなかったら、taskselを使うとlamp-serverが一度にできる。
sudo apt update
sudo apt install tasksel
sudo tasksel install lamp-server
これでapachemysqlがインストールされて起動しています。マシンを再起動してもサービスは動いている。
ブラウザーlocalhostとすると、apacheの画面が出る。

これは/var/www/html/index.htmlが表示されている。ここにinfo.phpを作って、ブラウザーlocalhost/info.phpとすると表示された。ここにwordpress/*をコピーすると、index.phpwordpressが立ち上がるとかいうしくみ(後述)。

 

まずmysqlを設定する。
mysql -u root -p
mysql> CREATE DATABASE databasename DEFAULT CHARACTER SET utf8 COLLATE utf8_unicode_ci;
mysql> GRANT ALL ON databasename.* TO 'username'@'localhost' IDENTIFIED BY 'password';
mysql> select Host, User, authentication_string from mysql.user;
mysql> exit;

 

php関係

sudo apt-get install php-curl php-gd php-mbstring php-mcrypt php-xml php-xmlrpc
sudo systemctl restart apache2
sudo vim /etc/apache2/apache2.conf
<Directory /var/www/html/>
AllowOverride All
</Directory>
sudo a2enmod rewrite
sudo apache2ctl configtest
sudo service apache2 restart

sudo vim /etc/php/7.0/apache2/php.ini
post_max_size = 64M
upload_max_filesize = 64M
max_execution_time = 3000

sudo service apache2 restart

 

wordpress関係
mkdir mywordpress
cd mywordpress
wget http://ja.wordpress.org/latest-ja.zip
unzip latest-ja.zip
mv wordpress/* .
rmdir wordpress
rm *.zip

 

その他権限など。
sudo touch ./.htaccess
sudo chmod 660 ./.htaccess
sudo cp ./wp-config-sample.php wp-config.php
sudo mkdir ./wp-content/upgrade
sudo cp -a . /var/www/html

sudo chown -R www-data:www-data /var/www/html
sudo find /var/www/html -type d -exec chmod g+s {} \;
sudo chmod g+w /var/www/html/wp-content
sudo chmod -R g+w /var/www/html/wp-content/themes
sudo chmod -R g+w /var/www/html/wp-content/plugins

sudo vim /var/www/html/wp-config.php
define('DB_NAME', 'db_name');
define('DB_USER', 'wordpressuser');
define('DB_PASSWORD', 'password');

 

sudo mv index.html index.html.old

 

これで無事動きました。

 

注: 

sudo vim /var/www/html/info.php
<?php
phpinfo();
?>
localhost/info.phpを見る。

表音文字としての中国語

木簡によって万葉集以前の日本語表記がだんだん明らかになってきていますが、木簡の和歌(歌木簡)はすべて一字一音の字音表記で書かれているようです。

万葉集の万葉仮名のように訓読みがまざっていない。

漢字を表音文字として使っています。

 

まるで現代の中国語で西洋人の名前を漢字で書くのと同じなので、発音体系がまったく違うので似て非なるものだっただろうと思うものの、この方法であの時代の歌が残ったと考えるとすばらしいことだと思います。

 

表音文字として漢字をつかった例は他にもあって、仏典の翻訳時には

 

サンスクリット表音文字)を読み上げ -> 中国語に音写 -> 中国語に翻訳

 

という手順をとったそうです。この「中国語に音写」の部分が漢字を表音文字としてつかっている部分です。

 

また、元朝秘史というモンゴルの歴史書があってこれが中国語なのですが、ウイグル文字によるモンゴル語から漢字で音写して、中国語の訳をつけたものとして残っているそうです。ウィキペディアに画像があります。

これはその時代13世紀あたりの中国語もわかるので一石二鳥ですね。

 

参考

万葉集から古代を読みとく 上野誠

仏典はどう漢訳されたのか 船山徹

 

 

 

 

鬱という漢字の覚え方

躁うつ病とかのウツという漢字があります。

この字の覚え方はどういうのだったか忘れたので検索してみました。

 

昔会社で習ったのがでてきて、

 

きかんきわこめのはこいりひにみっつ(木缶木ワ米の凵いりヒに彡つ)

 

うむ。なるほどこれは覚えにくい、だから忘れたのか。

 

ほかにもあって

 

リンカーンアメリカンコーヒーを3杯飲んで鬱(林缶はあメリかン凵ーヒーを彡ばいのんでウツ)

 

というのがありました。こっちの方がいいね。

 


リンカーンは米のコーヒーを3杯飲んで鬱(林缶は米の凵ーヒーを彡ばいのんでウツ)
リンカーンコメダのコーヒーを3杯飲んで鬱(林缶は米ダの凵ーヒーを彡ばいのんでウツ)

 

とか。

Haskell演算子、中置記法の記号の読み方

--Haskell演算子中置記法の記号の読み方
! -> アレーのインデクス。(!) :: Ix i => Array i e -> i -> e
! -> 正格(strict)フラグ。foo !x -> foo strict x。とか
!! -> リストのインデクス。(!!) :: [a] -> Int -> a
$ -> カッコのかわり ($) :: (a -> b) -> a -> b
$! -> カッコのかわりの正格バージョン。$!以降が先に評価される
&& -> 論理積。(&&) :: Bool -> Bool -> Bool
() -> カッコ。ユニット型。() :: ()
* -> 掛け算。(*) :: Num a => a -> a -> a
*,#,?,??,~ -> カインド。型制約
*>,<*>,<* -> アプリカティブ。Applicative f => f a -> f b -> f b、f (a -> b) -> f a -> f b、f a -> f b -> f a
++ concat。(++) :: [a] -> [a] -> [a]
, -> カンマ。タプル型コンストラクタ。(,) :: a -> b -> (a, b)
-> -> 型コンストラクタ。カインド
. -> ピリオド。パイプ。関数の合成。(.) :: (b -> c) -> (a -> b) -> a -> c
/ -> 割り算。(/) :: Fractional a => a -> a -> a
/= -> 論理否定。(/=) :: Eq a => a -> a -> Bool
: -> コロン。コンス。リスト型コンストラクタ。(:) :: a -> [a] -> [a]
:: -> (の)タイプ(は)
:{,:} -> ghci上で複数行
< -> 小なり。Ord a => a -> a -> Bool
<$,<$> -> ファンクタ。(f)map。Functor f => a -> f b -> f a、 (a -> b) -> f a -> f b
<- -> 束縛、バインド(IOアクション)
<= -> 小なりイコール。Ord a => a -> a -> Bool
<> -> mappend。(<>) :: Monoid m => m -> m -> m
== -> イコール。(==) :: Eq a => a -> a -> Bool
=> -> 型制約。Ord a => a、とか。
> -> 大なり。Ord a => a -> a -> Bool
>-> -> ストリームとしてつなぐ。Pipe
>= -> 大なりイコール。Ord a => a -> a -> Bool
>>,>>=,=<<,>=>, -> モナド。バインド。Monad m => m a -> m b -> m b、m a -> (a -> m b) -> m b、(a -> m b) -> m a -> m b,(a -> m b) -> (b -> m c) -> a -> m c
@ -> as。アズパターン。ll@(l:ls)とか。
[ ] -> 空リスト。[ ] :: [t]
\ -> ラムダlambda。(\x -> x ^2) 3 -> 9
\& -> 空文字列"" -> 文字列パース用
_ -> ワイルドカードパターン。
| -> ガードの区切り。内包表記list comprehensionの区切り
|| -> 論理和。(||) :: Bool -> Bool -> Bool
~ -> 反駁不可能パターン。レイジーパターン。irrefutable pattners, lazy patterns
{ } -> レコード構文、記法(フィールドに名前をつける)ときの大カッコ。
^ -> 累乗。(^) :: (Integral b, Num a) => a -> b -> a
% -> 有理数有理数割り算。(%) :: Integral a => a -> a -> Ratio a

.. -> 範囲生成 [1..10] range generate notation

Haskell : タプルとリストの相互変換

-- convertlist.hs
-- 各種convertのプログラム。-> 練習問題
-- 1.タプルとリストの相互変換 -> [[1,2],[3,4]] -> [(1,2),(3,4)]
-- 2.タプルから2つのリストへ相互変換 -> [(1,'a'),(2,'b')] -> [1,2]['a','b']
-- 3.タプルからフラットリストへ相互変換 -> [(1,2),(3,4)] -> [1,2,3,4]
-- 4.任意の長さのタプルとリストの相互変換 -> (1,2,3,4) -> [1,2,3,4]
-- 5.リストからすべての組み合わせのタプルをつくる
-- 6.タプルから要素を抜き出してリストをつくる


-- concat flattens a list 1 tier at a time
-- concat [[1,2],[3,4]] -> [1,2,3,4]
-- implement concat'
concat' :: a -> [a]
concat'[ ] = [ ]
concat' (x:xs) = x ++ concat' (xs)

-- tuppleToList
-- tuppleToList [(1,2),(3,4)] -> [[1,2],[3,4]]
tuppleToList :: [(t, t)] -> [ [ t ] ]
tuppleToList = map (\(x,y) -> [x,y])

-- listToTupple
-- listToTupple [[1,2],[3,4]] -> [(1,2),(3,4)]
listToTupple :: [ [ t ] ] -> [(t, t)]
listToTupple = map (\[x,y] -> (x,y))

-- tuppleToTwoList
-- tuppleToTwoList [(1,'a'),(2,'b')] -> ([1,2], ['a','b'])
-- Prelude has zip and unzip
-- zip [1,2] ['a','b'] -> [(1,'a'),(2,'b')]
-- unzip [(1,'a'),(2,'b)] -> ([1,2],"ab")

-- tuppleToFlatList
-- tuppleToFlatList [(1,2),(3,4)] -> [1,2,3,4]
-- (concat.tuppleToList) [(1,2),(3,4)] -> [1,2,3,4]

-- tuppleToList4
-- tuppleToList4 (1,2,3,4) -> [1,2,3,4]
tuppleToList4 :: (a,a,a,a) -> [a]; tuppleToList4 (a,b,c,d) = [a,b,c,d]

-- make all the combination from a list
-- using list comprehension
-- (\ xs -> [(x, y) | x <- xs, y <- xs, x /= y]) ['a', 'b', 'c']
-- > [('a','b'),('a','c'),('b','a'),('b','c'),('c','a'),('c','b')]

-- filter from tupple list
-- map snd $ filter (odd.fst) [(1, 'a'), (2, 'b'), (3, 'c')]
-- "ac"

Haskellで行番号をつける

問題 : 任意のテキストファイルの各行に行番号をつけて画面に出すプログラムを作れ。

 

解答例

-- numberlines.hs
-- runghc numberlines.hs filename

import Data.List
import System.Environment
import Text.Printf

main :: IO ()
main = do
    args <- getArgs
    contents <- readFile $ head args
    let lineslist = lines contents
    let newlines = zipWith (\n str -> printf "%6.6d\t%s" n str) [1:: Int ..] lineslist
    let newcontents = unlines newlines
    putStr newcontents

 

出力例

runghc numberlines.hs sample.txt

000001 There was an Old Man of Nantucket
000002 Who kept all his cash in a bucket.
000003 His daughter, called Nan,
000004 Ran away with a man,
000005 And as for the bucket, Nantucket.
000006 anonymous