sublime text3 markdown

sublime text3のコンソールに以下のコードを貼り付け、ctl + shift + pでパッケージコントロールをインストールします。

import urllib.request,os,hashlib; h = 'df21e130d211cfc94d9b0905775a7c0f' + '1e3d39e33b79698005270310898eea76'; pf = 'Package Control.sublime-package'; ipp = sublime.installed_packages_path(); urllib.request.install_opener( urllib.request.build_opener( urllib.request.ProxyHandler()) ); by = urllib.request.urlopen( 'http://packagecontrol.io/' + pf.replace(' ', '%20')).read(); dh = hashlib.sha256(by).hexdigest(); print('Error validating download (got %s instead of %s), please try manual install' % (dh, h)) if dh != h else open(os.path.join( ipp, pf), 'wb' ).write(by)
# Title 1
## Title 2
### Title 3

hr,強調、blockquote,コード、インデント

こんにちは
---
こんにちは
---
こんにちは
**strong**
> strong
'var = x'
	var = x
	var = 7

リスト、リンク、メール、画像

- item 1
- item 2
- item 3
1. item 1
2. item 2
3. item 3
<http://google.com>
<hogehoge@gmail.com>
[google][1]
[1]:http:/google.com
![book](book.jpg)

なお、マークダウン記法の中にhtmlを書くことも許されています。

github https://github.com/revolunet/sublimetext-markdown-preview

lua

組み込みが容易なスクリプト言語です。

Lua
lua リフェレンスマニュアル 5.3

[vagrant@localhost lua]$ lua -v
Lua 5.1.4  Copyright (C) 1994-2008 Lua.org, PUC-Rio
[vagrant@localhost lua]$ lua hello.lua
hello world

luaは多重代入も可能です。

x, y = 10, 15
x, y = y, x
print(x)
print(y)

文字列ではシングル、ダブルクォーテーションどちらも可能です。

s = "h'e'llo"
print(s)

配列:luaは1からカウントします。要素の個数は#です。

a = {23, 234, "hello"}
print(a[2])
print(#a)

条件分岐

score = 75
if score > 60 and score < 80 then
  print("ok")
else
  print("ng!")
end

ループ

i = 0
while i < 10 do
  print(i)
  i = i + 1
end

for文

for i = 0, 9, 2 do
  print(i)
end

構文

a = {12, 24, "hey"}
b = {name = "nari", score= 120}

for i, value in ipairs(a) do
 print(i, value)
 end

関数

function greet(name)
  print("hello, I am "..name)
end

greet("clinton")

可変引数

function sum(...)
  local a = {...}
  local total = 0
  for i = 1, #a do
    total = total + a[i]
  end
  return total
end
print(sum(2, 7, 23141, 131))

便利な命令文

math.max(2, 222, 14)
math.ceil(2.3)
math.floor(2.3)
math.random()
math.random(n) -- 1からnまでの整数値

文字列の命令文

s = string.len("google")
s =  #"google"
s = string.sub("google", 2, 3)
s = string.find("google", "l")
s = string.gsub("google", "e", "er")
s = string.reverse("google")

テーブルの命令文

a = {2, 25, 42, 1}
table.sort(a)

for i, v in inpairs(a) do
  print(v)
end

日付データの命令文

x = os.time()
x = os.date()
print(x)

awk2

条件式

{
  print NR ":" $0
  if (NR % 5 == 0){
   print "--------"
  }
}

forループ

{
 print("%-12s %5d", $1, $3)

 for (i = 0; i < int($3/10); i++){
 printf("*")
 }
 printf("\n")
}

配列

BEGIN{
  sales[1] = 200
  sales[2] = 120
  sales[3] = 50
  print sales[3]

  color = "yellow red blue"
  split(color, colors)
  print colors[3]
}

配列

{
  sales[$1] += $3
}
END {
  for (name in sales){
   print name ":" sales[name]
  }
}

関数の作り方

function getRate(n){
  return int(n / 100) * 0.1
}

{
printf("%-12s %5d rate:%0.1f\n", $1, $3, getRate($3))
}

awk

awkは効率的にテキスト処理を行うことができます。

[vagrant@localhost awk]$ awk --version
GNU Awk 3.1.7
Copyright (C) 1989, 1991-2009 Free Software Foundation.

This program is free software; you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation; either version 3 of the License, or
(at your option) any later version.

本プログラムは、利用価値があることを期待して配布されていますが、
これは、特定目的に使用可能であること、及び、商用目的に使用できる
ことを暗示するものではなく、いかなる保証も一切ありません。
詳しくは、GNU General Public License を参照してください。

You should have received a copy of the GNU General Public License
along with this program. If not, see http://www.gnu.org/licenses/.
{ print $3 }
[vagrant@localhost awk]$ awk -f ex1.awk sales.dat

コマンドラインで、1行で表すこともできます。
awk ‘{print $3}’ sales.dat

行番号の表示

{
print NR ":" $0
}

パターン

NR < 5{
  print NR ":" $0
}

NR > 10{
  print NR ":" $0
}

FS

BEGIN{
 print "--start --"
 FS = "-"
}
{
 print $1
}
NR < 5{
  # print NR ":" $0
}

NR > 10{
  # print NR ":" $0
}
END {
  print "-- end --"
}

条件

(NR == 5) || (NR > 10){
  print NR ":" $0
}

正規表現

$2 ~ /item-[23]/ {
 print $0
}

printとprintfの違い

{
 printf("%s %d\n", $1, $3)
}

表示を整理

{
 printf("%-10s %5d\n", $1, $3)
}

変数

BEGIN{
  sum = 0
}
{
 sum = sum + $3
}
END{
  print sum
}

組み込み関数

{
  printf("%f, %d\n", rand(), int($3/3))
}

GnuCOBOL

IDENTIFICATION DIVISION.
PROGRAM-ID. HELLO.
DATA DIVISION.
 WORKING-STORAGE SECTION.
  01 MY-COLORS.
    03 MY-COLOR OCCURS 3 PIC X(10).
PROCEDURE DIVISION.
  MAIN SECTION.
    MOVE "red" TO MY-COLOR(1).
    MOVE "yellow" TO MY-COLOR(2).
    MOVE "blue" TO MY-COLOR(3).
    DISPLAY MY-COLORS.
    DISPLAY MY-COLOR(2).
    STOP RUN.
[vagrant@localhost cobol]$ cobc -x --free hello.cob
[vagrant@localhost cobol]$ ./hello
red       yellow    blue
yellow

演算

IDENTIFICATION DIVISION.
PROGRAM-ID. HELLO.
DATA DIVISION.
 WORKING-STORAGE SECTION.
  01 MY-DATA.
    03 D1 PIC 99999 VALUE 0.
    03 D2 PIC 99999 VALUE 0.
    03 D3 PIC 99999 VALUE 0.
    03 D4 PIC 99999 VALUE 0.
PROCEDURE DIVISION.
  MAIN SECTION.
    ADD 5 TO D1 D2 D3.
    SUBTRACT 2 FROM D1 D2.
    DISPLAY MY-DATA.
    STOP RUN.

入力受付

IDENTIFICATION DIVISION.
PROGRAM-ID. HELLO.
DATA DIVISION.
 WORKING-STORAGE SECTION.
  01 MY-DATA PIC X(10).
PROCEDURE DIVISION.
  MAIN SECTION.
    DISPLAY "whats your name?".
    ACCEPT MY-DATA.
    DISPLAY "hello! " MY-DATA.
    STOP RUN.

条件分岐

IDENTIFICATION DIVISION.
PROGRAM-ID. HELLO.
DATA DIVISION.
 WORKING-STORAGE SECTION.
  01 MY-SCORE PIC 9(3).
PROCEDURE DIVISION.
  MAIN SECTION.
    MOVE 80 TO MY-SCORE.
    If MY-SCORE > 60 THEN
      DISPLAY "OK!"
    END-IF.
    STOP RUN.

条件分岐

IDENTIFICATION DIVISION.
PROGRAM-ID. HELLO.
DATA DIVISION.
 WORKING-STORAGE SECTION.
  01 MY-SIGNAL PIC X(5).
PROCEDURE DIVISION.
  MAIN SECTION.
    MOVE "red" TO MY-SIGNAL.
    EVALUATE MY-SIGNAL
      WHEN "red"
        DISPLAY "stop!"
      WHEN "blue"
          DISPLAY "run!"
      WHEN "yello"
            DISPLAY "caution!"
    END-EVALUATE.
    STOP RUN.

繰り返し処理

IDENTIFICATION DIVISION.
PROGRAM-ID. HELLO.
DATA DIVISION.
 WORKING-STORAGE SECTION.
  01 MY-COUNTER PIC 9(3) VALUE 1.
PROCEDURE DIVISION.
  MAIN SECTION.
    PERFORM 10 TIMES
      DISPLAY "counter = " MY-COUNTER
      ADD 1 TO MY-COUNTER
    END-PERFORM.
    STOP RUN.

ファイルの書き込み

IDENTIFICATION DIVISION.
PROGRAM-ID. HELLO.
ENVIRONMENT DIVISION.
  INPUT-OUTPUT SECTION.
    FILE-CONTROL.
      SELECT OUT-FILE ASSIGN TO 'out.txt'
        ORGANIZATION IS LINE SEQUENTIAL.
DATA DIVISION.
  FILE SECTION.
    FD OUT-FILE.
      01 OUT-FILE-REC PIC 99.
 WORKING-STORAGE SECTION.
  01 LINE-COUNT PIC 99 VALUE 0.
PROCEDURE DIVISION.
  MAIN SECTION.
    OPEN OUTPUT OUT-FILE.

    PERFORM 10 TIMES
      ADD 1 TO LINE-COUNT
      MOVE LINE-COUNT TO OUT-FILE-REC
      WRITE OUT-FILE-REC
      DISPLAY OUT-FILE-REC
    END-PERFORM.

    CLOSE OUT-FILE.
    STOP RUN.

ファイルの読み出し

IDENTIFICATION DIVISION.
PROGRAM-ID. HELLO.
ENVIRONMENT DIVISION.
  INPUT-OUTPUT SECTION.
   FILE-CONTROL.
    SELECT IN-FILE ASSIGN TO 'in.txt'
     ORGANIZATION IS LINE SEQUENTIAL
     STATUS IN-FILE-STATUS.
DATA DIVISION.
  FILE SECTION.
   FD IN-FILE.
    01 In-FILE-REC PIC X(20).
  WORKING-STORAGE SECTION.
   01 IN-FILE-STATUS PIC XX.
PROCEDURE DIVISION.
  MAIN SECTION.
    OPEN INPUT IN-FILE.

    PERFORM UNTIL IN-FILE-STATUS NOT = "00"
     READ IN-FILE
       AT END
         DISPLAY "-- end --"
       NOT AT END
         DISPLAY "Content: " IN-FILE-REC
    END-READ
    END-PERFORM.

    CLOSE IN-FILE.
    STOP RUN.

OPEN-COBOL

COBOLはcommon business oriented languageの略で、書式のルールが厳格です。文末がピリオドで、大文字です。

DIVISION > SECTION

cobol

開発環境に必要となるファイルをインストールしていきましょう。

# yum -y install gcc
# yum -y install gmp-devel
# yum -y install ncurses-devel
# yum -y install db4-devel
# wget http://downloads.sourceforge.net/open-cobol/open-cobol-1.0.tar.gz
# tar zxvf open-cobol-1.0.tar.gz
# cd open-cobol-1.0
# ./configure
# make
# make install
# ln -s /usr/local/lib/libcob.so.1.0.0 /usr/lib/libcob.so.1
# ln -s /usr/local/lib/libcob.so.1.0.0 /usr/lib/libcob.so
# export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/usr/local/li

自由書式です。

IDENTIFICATION DIVISION.
PROGRAM-ID. HELLO.
PROCEDURE DIVISION.
  MAIN SECTION.
    DISPLAY 'HELLO WORLD!'.
    STOP RUN.
[vagrant@localhost cobol]$ cobc -x --free hello.cob
[vagrant@localhost cobol]$ ls
hello  hello.cob
[vagrant@localhost cobol]$ ./hello
HELLO WORLD!

変数

IDENTIFICATION DIVISION.
PROGRAM-ID. HELLO.
DATA DIVISION.
 WORKING-STORAGE SECTION.
  01 MY-DATA1 PIC X(20).
PROCEDURE DIVISION.
  MAIN SECTION.
    MOVE 'HELLO WORLD!' TO MY-DATA1.
    DISPLAY MY-DATA1.
    STOP RUN.

数値の変数

IDENTIFICATION DIVISION.
PROGRAM-ID. HELLO.
DATA DIVISION.
 WORKING-STORAGE SECTION.
  01 MY-DATA1 PIC X(20).
  01 MY-DATA2 PIC 99999.
PROCEDURE DIVISION.
  MAIN SECTION.
    MOVE 120 TO MY-DATA2.
    MOVE 'HELLO WORLD!' TO MY-DATA1.
    DISPLAY MY-DATA2.
    STOP RUN.

集合項目

IDENTIFICATION DIVISION.
PROGRAM-ID. HELLO.
DATA DIVISION.
 WORKING-STORAGE SECTION.
  01 MY-PRODUCT.
    03 PRODUCT-ID PIC X(5).
    03 PRODUCT-PRICE PIC 9(5).
PROCEDURE DIVISION.
  MAIN SECTION.
    MOVE "ID-12" TO PRODUCT-ID.
    MOVE 2980 TO PRODUCT-PRICE.
    DISPLAY PRODUCT-PRICE.
    DISPLAY MY-PRODUCT.
    STOP RUN.

gcc

[vagrant@localhost c]$ gcc -v
Using built-in specs.
Target: x86_64-redhat-linux
コンフィグオプション: ../configure --prefix=/usr --mandir=/usr/share/man --infodir=/usr/share/info --with-bugurl=http://bugzilla.redhat.com/bugzilla --enable-bootstrap --enable-shared --enable-threads=posix --enable-checking=release --with-system-zlib --enable-__cxa_atexit --disable-libunwind-exceptions --enable-gnu-unique-object --enable-languages=c,c++,objc,obj-c++,java,fortran,ada --enable-java-awt=gtk --disable-dssi --with-java-home=/usr/lib/jvm/java-1.5.0-gcj-1.5.0.0/jre --enable-libgcj-multifile --enable-java-maintainer-mode --with-ecj-jar=/usr/share/java/eclipse-ecj.jar --disable-libjava-multilib --with-ppl --with-cloog --with-tune=generic --with-arch_32=i686 --build=x86_64-redhat-linux
スレッドモデル: posix
gcc version 4.4.7 20120313 (Red Hat 4.4.7-17) (GCC)
#include <stdio.h>

int main(void){
  printf("hello world!\n");
  return 0;
}
[vagrant@localhost c]$ gcc -o hello hello.c
[vagrant@localhost c]$ ll
合計 12
-rwxrwxr-x. 1 vagrant vagrant 6425 11月 10 06:31 2016 hello
-rw-rw-r--. 1 vagrant vagrant   84 11月 10 06:30 2016 hello.c
[vagrant@localhost c]$ ./hello
hello world!

なお、Cでつまづきやすいと言われているポインタですが、アドレスの値を定義して(参照渡し)、データ型よりもメモリの消費を節約する仕組みで、より高速なプログラムが書けるようになります。

basicの操作

basicの拡張子はbasです。save、loadでファイルの保存呼び出しを行います。
コメント:rem

10 rem コメント
20 print "hello world"
25 print "hello world again"
>save "hello.bas"
>list
10 rem コメント
20 print "hello world"
25 print "hello world again"
>new
>list
>load "hello.bas"
>list
10 rem コメント
20 print "hello world"
25 print "hello world again"

goto文

>list
10 rem コメント
20 print "hello world"
25 print "hello world again"
30 goto 20
>

変数

>new
>10 x = 5
>20 print x
>run
5

if文

>new
>10 score = 80
>20 if score > 60 then print "ok"
>list
10 score = 80
20 if score > 60 then print "ok"
>run
ok

ifとgoto文

>20 if socre > 60 then goto 30 else goto 40
>30 print "ok"
>40 print "ng"
>30 print "ok": end
>run
ng

ループ

>new
>10 for i = 1 to 10
>20 print i
>30 next i
>list
10 for i = 1 to 10
20 print i
30 next i
>run
1
2
3
4
5
6
7
8
9
10

サブルーチン

>new
>10 print "hello"
>20 gosub 100
>30 end
>100 print "hello from subroutine!"
>110 return
>list
10 print "hello"
20 gosub 100
30 end
100 print "hello from subroutine!"
110 return
>run
hello
hello from subroutine!
>

サブルーチン

>new
>10 input "your age? ", age
>20 print "your are "; age; " years old!"
>list
10 input "your age? ",age
20 print "your are ";age;" years old!"
>ru
 Syntax error
>run
your age? 18
your are 18  years old!
>

basicの数当てゲーム

10 answer = int(rnd(1)*10)+1
20 input "guess (1-10)? ",guess
30 if guess > answer then print "too high!" : goto 20
40 if guess < answer then print "too low!" : goto 20
50 if guess = answer then print "you got it!" : end
>run
guess (1-10)? 4
you got it!

chipmunk Basic

Basicを使うには、コマンドラインでchipmunk Basicを使います。サイトからダウンロードして、フォルダにbasic.exeを入れて、以下のように移動します。

Desktop\basic> ./basic
Chipmunk BASIC v3.6.5(b6)
>

basicは行番号と命令を対にして書いていきます。なんとも言えない雰囲気ですね。
実行するにはrun、終了はquitを使います。
%e7%84%a1%e9%a1%8c

endは省略可能、listで命令文を表示します。

>list
10 cls
20 print "hello world"
30 end
>10 rem コメント
>list
10 rem コメント
20 print "hello world"
30 end
>25 print "hello world again"
>list
10 rem コメント
20 print "hello world"
25 print "hello world again"
30 end
>del 30
>list
10 rem コメント
20 print "hello world"
25 print "hello world again"

php さいころ

三項演算子で、条件判定し、trueならぞろ目と表示させています。

<?php

$dice = mt_rand(1, 6);
$dice2 = mt_rand(1, 6);

$zorome = ($dice == $dice2) ? true: false;

?>
<!DOCTYPE html>
<html lang="ja">
<head>
  <meta charset="utf-8">
  <title>さいころ</title>
  <script src="http://code.jquery.com/jquery-1.9.1.min.js"></script>
</head>
<body>
  <h1>サイコロ</h1>
  <p>サイコロの目は「<?php echo $dice; ?>」と「<?php echo $dice2; ?>」でした!</p>
  <?php if ($zorome == true): ?>
    ぞろ目です!
  <?php endif; ?>
  <p><a href="<?php echo $_SERVER&#91;"SCRIPT_NAME"&#93;; ?>">もう一度!</a></p>
</body>
</html>

mt_rand()はrand()より、4倍処理が速いとphpのドキュメントに記載があります。
php mt_rand()

/*
Many random number generators of older libcs have dubious or unknown characteristics and are slow. By default, PHP uses the libc random number generator with the rand() function. The mt_rand() function is a drop-in replacement for this. It uses a random number generator with known characteristics using the » Mersenne Twister, which will produce random numbers four times faster than what the average libc rand() provides.
*/