Smalltalk

あのAlan Kayが作った歴史ある言語です。Pharoの公式サイトより開発環境がダウンロードできます。

Pharo Download

%e7%84%a1%e9%a1%8c

作ったコンテンツはimageとして保存することが可能です。

入力はplayground、表示はtranscriptで表示します。smalltalkはオブジェクトに対して、メッセージを送信するものになっています。
%e7%84%a1%e9%a1%8c

Transcript show: 'hello'

ctl + ‘d’で実行のショートカットになっています。

改行

Transcript show: 'hello'.
Transcript cr.
Transcript show: 'world'

カスケード

Transcript show: 'hello';
cr;
show: 'world'

inspector it 感動の領域に入ってきました。
%e7%84%a1%e9%a1%8c

変数

message := 'hello'.
Transcript show:message.

二項メッセージ

4 + 3 factorial gcd: 5

クラスとインスタンス

t := Date today.
t addDays:14.

システムブラウザ

Color browse.
color :=Color random.
color.
2 sqrt
(5/2)asFloat
5 // 2
5 \\ 2
5 + 3 * 2

文字列、配列

$a charCode
#(1 2 3)

配列

#(1 2 3) size.
#(1 2 3) reverse.
#(1 2 #(5, 2)).
#(1 $a 'hello').
#(1 2 3),#(10, 12, 15).
x:= #(2 5 8 10)
x at:2. 
x at: 2 put: 20

ブロック

[5 + 4] value.
[:x |x+2]value:2.
[:x :y | x* y ]value:10 value:20.

f :=[:x:y|x + y + 2].
f value:10 value 20.

条件分岐

score :80.
(score > 60)
 ifTrue:['great!'] 
 ifFalse:['so so...']

ループ処理

i:=1.
10 timesRepeat:
[ Transcript show:i; cr.i:=i + 1].

配列の処理

#(1 3 5)do: 
	[:each| Transcript show:each; cr ].

R

> v <- c(1, 3, 5)
> v
[1] 1 3 5
> v[2]
[1] 3
> v[2] <- 10
> v
[1]  1 10  5
> length(v)
[1] 2
1] 2
> v <- seq(1, 10)
> v
 [1]  1  2  3  4  5  6  7  8  9 10
> v <- rep(1:5, times=3)
> v
 [1] 1 2 3 4 5 1 2 3 4 5 1 2 3 4 5
> x <- c(1, 3, 5)
> y <- c(2, 4, 6)
> x*2
[1]  2  6 10
> x + y
[1]  3  7 11
> x > y
[1] FALSE FALSE FALSE
> x %in% y
[1] FALSE FALSE FALSE
> union(x, y)
[1] 1 3 5 2 4 6
> intersect(x, y)
numeric(0)
> setdiff(x, y)
[1] 1 3 5
> setequal(x, y)
[1] FALSE
> x <- c("S", "M", "L", "M", "L")
> x
[1] "S" "M" "L" "M" "L"
> x.fc <- factor(x)
> x.fc
[1] S M L M L
Levels: L M S
> levels(x.fc)
[1] "L" "M" "S"
> x.or <- ordered(x, levels=c("S","M","L"))
> x.or
[1] S M L M L
Levels: S < M < L
> x <- matrix(1:6, nrow=3, ncol=2)
> x
     [,1] [,2]
[1,]    1    4
[2,]    2    5
[3,]    3    6
> 
> x <- matrix(1:6, nrow=3, ncol=2, byrow=TRUE)
> x
     [,1] [,2]
[1,]    1    2
[2,]    3    4
[3,]    5    6
> x <- rbind(c(1, 2), 3:4, 5:6)
> x
     [,1] [,2]
[1,]    1    2
[2,]    3    4
[3,]    5    6
> x <- cbind(c(1,2),3:4,5:6)
> x
     [,1] [,2] [,3]
[1,]    1    3    5
[2,]    2    4    6
> x + 1
     [,1] [,2] [,3]
[1,]    2    4    6
[2,]    3    5    7
> 1/ x
     [,1]      [,2]      [,3]
[1,]  1.0 0.3333333 0.2000000
[2,]  0.5 0.2500000 0.1666667
> dim(x)
[1] 2 3
> nrow(x)
[1] 2
> ncol(x)
[1] 3
> x
     [,1] [,2] [,3]
[1,]    1    3    5
[2,]    2    4    6
> x[, 1]
[1] 1 2
> x[2,]
[1] 2 4 6
> x[1, 2]
[1] 3
> x[1, 1:2]
[1] 1 3
> x[1, c(1,2)]
[1] 1 3
> x[1, 2] <- 10
> x
     [,1] [,2] [,3]
[1,]    1   10    5
[2,]    2    4    6
> edit(x)
     col1 col2 col3
[1,]    1   10    5
[2,]    2    4    6
> x2 <- edit(x)
> x
     [,1] [,2] [,3]
[1,]    1   10    5
[2,]    2    4    6
> x <- list(5:10, "abc", matrix(1:6, nrow=2, ncol=3))
> x
[[1]]
[1]  5  6  7  8  9 10

[[2]]
[1] "abc"

[[3]]
     [,1] [,2] [,3]
[1,]    1    3    5
[2,]    2    4    6

> x[1]
[[1]]
[1]  5  6  7  8  9 10

> x[[1]]
[1]  5  6  7  8  9 10
> x[[3]][1, 2]
[1] 3
x <- read.table("sales.txt", header=TRUE, sep=",", na.strings="*")
sum(x$sales), max(x$sales), mean(x$sales),median(x$sales),sd($sales)
mean(x$DISTANCE, na.rm=TRUE), summary(x$sales), summary(x), str(x)

p5.js random()


ランダム関数で座標軸や円の半径を決めていきます。。

/*
*/

var x, y, r;

function setup(){
    createCanvas(480, 240);
    background(255, 0, 0, 10);
    noStroke();
    background('skyblue')

}

function draw(){
  x = random(width);
  y = random(height);
  if (random()> 0.9) {
    r = random (50, 60);
  } else {
    r = random(10, 30);
  }
  fill(255, 255, 255, random(30, 250));
  ellipse(x, y, r, r);
}

sin(),cos()

var angle = 0;
var r = 50;

function setup(){
    createCanvas(480, 240);
    noStroke();

      background('skyblue')

    slider = createSlider(0, 100, 30)
    slider.position(10, 20);

    button = createButton("clear!");
    button.position(10, 40);
    button.mousePressed(function(){
      background('skyblue');
    });
}

function draw(){
  r = slider.value();
  push();
  translate(width/2, height/2);
  x = sin(radians(angle)) * r;
  y = cos(radians(angle)) * r;
  ellipse(x, y, 10, 10);
  pop();
  angle += 2;
  r += 0.1;
}

p5.js


p5.jsはprocessingのJavaScriptです。CSSの表記をそのまま使用することもできます。

rectMode(coner),rectMode(coners),rectMode(center)などあります。

function setup(){
  createCanvas(480, 240);
    background(255, 0, 0, 10);

    rect(50, 50, 150, 100)
}

function draw(){

}

楕円 ellipse, point, arc, line

    var c = color('pink')
    fill(c);
    stroke(c);
    ellipse(width/2, height/2, 100, 100)
    text("hello world", 100, 100);

座標軸による操作

function setup(){
    createCanvas(480, 240);
    background(255, 0, 0, 10);
    noStroke();

    fill(255, 0, 0, 127);
    rect(0, 0, 100, 100);

    r = 30;
    push();
    translate(10, 10);
    rotate(radians(r));
    scale(1.2, 1.2)
    fill(0, 0, 255, 127);
    rect(0, 0, 100, 100);
    pop();
}

マウスの操作

function draw(){
   noStroke();
   background('skyblue');
   ellipse(mouseX, mouseY, 34, 34);
}

入力による動作

r = 50;

function setup(){
    createCanvas(480, 240);
    background(255, 0, 0, 10);
   

}

function draw(){
   noStroke();
   background('skyblue');

   if (keyIsPressed === true){
    fill('pink');
   } else {
    fill('white');
   }
   ellipse(mouseX,mouseY, r, r)

}

function keyTyped(){
  if (key === 'u'){
    r += 10;
  }
}

Processing


Processing is a flexible software sketchbook and a language for learning how to code within the context of the visual arts.

プロセッシングはjavaで、主にアーティスト・デザイナー向けです。
processing

size(200, 200);
smooth();
background(255);
rect(50, 50, 80, 30);

%e7%84%a1%e9%a1%8c

角丸

rect(50, 50, 80, 30, 10);

rectMode()

rectMode(CORNER);
rect(50, 50, 30, 30);
rectMode(RADIUS);
rect(50, 50, 30, 40);
fill(255, 0, 0, 127);
rect(50, 50, 30, 40);

枠線

stroke(#ff0000);
strokeWeight(3);
fill(127);
rect(50, 50, 100, 100);

円、線

stroke(#ff0000);
fill(#999999);

line(50, 50, 100, 100);
ellipse(50, 50, 80, 80);
arc(50, 50, 80, 80, 0, radians(180));

矢印

stroke(#ff0000);
fill(#999999);

beginShape();
vertex(100, 20);
vertex(120, 100);
vertex(100, 80);
vertex(80, 100);
endShape(CLOSE);

画像の表示

PImage img;
img = loadImage("a.jpg");
image(img,10, 10);

テキスト描画

PFont f;
f = createFont("Helvetica", 16, true);

textFont(f, 12);
fill(#ff0000);

text("hello world", 100, 100);

座標空間の変更

fill(#ff0000, 127);
noStroke();
rect(10, 10, 50, 50);

fill(#0000ff, 127);
noStroke();
pushMatrix();
translate(10, 10);
rect(10, 10, 50, 50);
popMatrix();

立体

size(200, 200, P3D);
smooth();
background(255);
lights();

pushMatrix();
translate(50, 50, 0);
rotateX(radians(30));
rotateY(radians(40));
rotateZ(radians(10));
box(40);
popMatrix();

setup()

void setup(){
  size(200, 200, P3D);
smooth();
background(255);

 noStroke();
 fill(#ff0000);
 
 frameRate(30);
}

int x = 0;
int y = 0;
void draw(){
  rect(x, y, 100, 100);
  x++;
  y++;
  println(frameCount);
}

マウス情報

int r = 100;
void draw(){
  ellipse(mouseX, mouseY, r, r);
}

ライブラリ
https://processing.org/reference/

Perl

Perl

[vagrant@localhost ~]$ perl -v

This is perl, v5.10.1 (*) built for x86_64-linux-thread-multi

Copyright 1987-2009, Larry Wall

Perl may be copied only under the terms of either the Artistic License or the
GNU General Public License, which may be found in the Perl 5 source kit.

Complete documentation for Perl, including FAQ lists, should be found on
this system using "man perl" or "perldoc perl".  If you have access to the
Internet, point your browser at http://www.perl.org/, the Perl Home Page.
use strict;
use warnings;

print "hello world\n";

スカラー変数

my $x = 123_234_456

文字列

my $a = "he\tllo\n" #特殊文字、変数展開
my $a = 'hello'

配列

my @sales = (150, 200, 300);
print @sales;

my @sales = (150, 200, 300);
print $sales[1];

ハッシュ変数

my %sales = ("tanaka"=>150, "suzuki"=>200, "yamada"=>300);
print $sales{"tanaka"}

ループ

my $i = 0;

while ($i < 10){
  print "i = $i\n";
  $i++;
}&#91;/perl&#93;

配列ループ
&#91;prel&#93;
my @colors = qw(red green blue orange pink);

foreach my $color(@colors){
  print "color = $color\n";
}&#91;/perl&#93;

ハッシュループ処理
&#91;perl&#93;my %sales = ("tanaka"=>150, "suzuki"=>300, "ohira"=>200);

foreach my $key(keys(%sales)){
  print "sales for $key is $sales{$key}\n";
}

ファイルの読み込み

open(my $in, "<", "test.dat") or die("could not open file.");

while(<$in>){
    print $_;
}

close($in);

置換

$_ =~ s/abc/ABC;

正規表現

while(<$in>){
    $_ =~ s/abc/ABC/;
    if ($_ =~ /[a-z]/){
        print $_;
    }
}

サブルーチン

sub max{
  my $max = $_[0];
  if ($_[1]> $max){
    $max = $_[1];
  }
  return $max;
}


print max(2, 8);

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))
}