第1回目 アプリ開発についてのイントロダクション 第2回目 Windows OS 開発環境の整備 第3回目 テキストエディタ Sublime, NotePad++ のインストールとカスタマ イズ 第4回目 Sublime, NotePad++ でソースコード編集 第5回目 Windows 統合開発環境(Android SDK)のインストールとカ スタマイズ 第6回目 Android OS の基本構成 第7回目 Telnet, PuTTy のインストールとカスタマイズ 第8回目 Mosh の特長と利用法 第9回目 TCP/IP ネットワークの原理 第10回目 Windows OS 上の TCP/IP ネットワーク構築方法 第11回目 TCP/IP ネットワークの通信パケット解析ツール 第12回目 Android OS 上の TCP/IP ネットワーク構築方法 第13回目 Android OS で 通信パケット解析ツール 第14回目 ユーザインタフェースのデザインとグラフィックスの基本 第15回目 GPS による位置情報の利用 第16回目 アプリ制作のテーマを決定する 第17回目 アプリ制作のための JavaScript 言語入門 第18回目 Node.js のインストール 第19回目 JavaScript実行環境としてブラウザとNode.jsを比較する 第20回目 でアプリのフレームワーク構築でアプリのフレームワーク 構築 第21回目 ウェブサーバ を自分のコンピュータ上に構築 第22回目 クラス内でのウェブサーバの相互利用 第23回目 スマートフォンからクラス内のウェブサーバを利用する 第24回目 ウェブサーバ ApacheとNginx を比較するを比較すると 第25回目 JavaScript で音声合成エンジンを利用する 第26回目 音声認識アプリについて 第27回目 JavaScript によるグラフィックス 第28回目 JavaScript によるペイントプログラム 第29回目 電子生命プログラムの作成 第30回目 制作したアプリの総合評価
Google グループへの参加。
Windows ユーザにはなじみがあるPowerShellがオープンソースとなり、他のOS にもインストールすれば使える。どこまで需要があるのかは不明。
コマンドプロンプトを使うには、cmd コマンドを起動すればよい。
GithubのPowerShell開発サイトにBashユーザ向けに Bash コマンドと PowerShellコマンドの対照表があるので、これが比較的わかりやすい。
Bash PowerSell 説明 ls dir, Get-ChildItem ファイルとフォルダ表示 tree dir -Recurse すべてのファイルとフォルダ表示 cd cd, Set-Location ディレクトリ移動 pwd pwd, Get-Location 作業中ディレクトの表示 clear cls, clear 画面クリア mkdir New-Item -ItemType Directory touch t.txt New-Item -Path t.txt 空ファイル作成 cp src dst Copy-Item src dst cp -r ./src ./dst Copy-Item ./src ./dst -Recurse mv src dst Move-Item src dst rm t.txt Remove-Item t.txt rm -r フォルダ名 Remove-Item フォルダ名 -Recurse find -name build* Get-ChildItem build* -Recurse
日本語版のWindowsに付属するPowerShellは、シフトジス(shift_jis)の文字コードで表示する。そのためUnicodeのテキストなどは文字化けしてしまう。
そこでPowerShellの文字コードをUTF-8に変更するには、次のコマンドをPowerShellで実行する。
chcp 65001
Shift_jisに戻すには、次のコマンドを実行する。
chcp 932
PowerShellは、消すべきテキストがないときにバックスペースを押すと、version 5.1からビープ音が出るように変更された。これが喧しく止めたいときは次のようにすればよい。
Set-PSReadlineOption -BellStyle None
一般にショートカットフォルダは、<FOlderDispayName>.{<GUID>}の形式で名前をつける。<GUID>は、WindowsレジストリーでSystemApplicationNameのCLSIDである。
次の名前でファイルを適当なフォルダにつくって、そのフォルダを開いてみよう。
GodMode.{ED7BA470-8E54-465E-825C-99712043E01C}
インターネットオプション
システムの詳細設定やシステム環境変数
Windows 10の「設定」メニューから「開発者向け」を選ぶ。開発者向け機能を使うの中から「開発者モード」をオンにする。
コントロールパネルを起動する。
コントロールパネルの中の「プログラム」をクリックする。
「プログラムと機能」の中の「Windowsの機能の有効化または無効化」をクリックする。
「Windows Subsystem for Linux (Beta)」にチェックを入れる。
チェックを入れると、すぐ、コンピュータを再起動するかどうか?聞かれる。再起動後、Windows 10はWindows subsystem for Linux(Beta)機能をインストールする。
コンピュータが再起動されたあと、スタートボタンを押し、「何でも聞いてください」の窓に「bash」とタイプしエンターキーを押す。
Bashの初回起動時には、Ubuntu on Windows のライセンスへの許諾を求められる。
同意するには、「y」を入力する。
Ubuntu on Windowsのインストールには、しばらく数分間かかる。
Ubuntu on Windowsのユーザ名とパスワードの登録をする。
apt-get コマンドを活用すると、便利なコマンドやアプリケーションをインストールしたり、削除したりする。パッケージ毎に管理することができる。
まず、インストールされているパッケージをupdateしよう。
例えば、Cコンパイラをインストールするには次のようにする。
sudo apt-get install gcc
curl mobile.matsuyama-u.jp sudo apt-get install nkf curl mobile.matsuyama-u.jp | nkf -w
lynx でmobile.matsuyama-u.jp の文字情報だけを見る。
lynx パッケージをインストールする。
sudo apt-get install lynx-cur
lynx で講義情報のページを見ると、どうなるか?原因は?
Ubuntu Monoは、プログラムなどは見易いが漢字など日本語を表示することができない。
インターネットの古くからの言い伝えによれば、ネットの中のことは ネットに聞け!とある。今風に言えば、ネットのことはソーシャルネット で聞けということになる。
いまアプリを開発するには、Windows のほかに、Mac OSや Linuxのことを知る必要があ る。
Windows で telnet プログラムを実行する。
nmap -A -T4 scanme.nmap.org Nmap scan report for scanme.nmap.org (45.33.32.156) Host is up (0.14s latency). Other addresses for scanme.nmap.org (not scanned): 2600:3c01::f03c:91ff:fe18:bb2f Not shown: 990 closed ports PORT STATE SERVICE VERSION 22/tcp open ssh OpenSSH 6.6.1p1 Ubuntu 2ubuntu2.7 (Ubuntu Linux; protocol 2.0) | ssh-hostkey: | 1024 ac:00:a0:1a:82:ff:cc:55:99:dc:67:2b:34:97:6b:75 (DSA) | 2048 20:3d:2d:44:62:2a:b0:5a:9d:b5:b3:05:14:c2:a6:b2 (RSA) |_ 256 96:02:bb:5e:57:54:1c:4e:45:2f:56:4c:4a:24:b2:57 (ECDSA) 80/tcp open http Apache httpd 2.4.7 ((Ubuntu)) |_http-server-header: Apache/2.4.7 (Ubuntu) |_http-title: Go ahead and ScanMe! 135/tcp filtered msrpc 139/tcp filtered netbios-ssn 445/tcp filtered microsoft-ds 593/tcp filtered http-rpc-epmap 4444/tcp filtered krb524 5060/tcp filtered sip 9929/tcp open nping-echo Nping echo 31337/tcp open tcpwrapped Service Info: OS: Linux; CPE: cpe:/o:linux:linux_kernel Service detection performed. Please report any incorrect results at https://nmap.org/submit/ . Nmap done: 1 IP address (1 host up) scanned in 20.85 seconds
ネットキャット、Netcat はWindowsのコマンドでncとして使える。
コマンドncを -l オプションをつけて起動すると指定したポートをリ スニングしつづけるサーバモードになる。ポート番号2389をリスニングす るには次のようにしてncを起動する。
$ のつぎの nc がコマンド -l が、そのオプションでポート番号を適 当に選んで指定する。ここでは2389にしてある。
$ nc -l 2389
つぎにncをクライアントモードで起動する。ローカルホスト(自分)の 2389ポートに接続するのがつぎのコマンドだ。
$ nc localhost 2389
それではコマンド窓を二つ開き、一方で「こんにちは!」のメッセージ を送ると、もう一方のサーバモードの窓にメッセージが転送されるはず。
$ nc localhost 2389 こんにちは!
$ nc -l 2389 こんにちは!
Windows OSでは、windows版のncを使ってみるとわかるが、さきほどの サーバ、クライアントの会話がうまくいかないことがある。原因はどこに あるのだろうか。
nc www.example.com 80 GET / HTTP/1.0
参考: http://www.thegeekstuff.com/2012/04/nc-command-examples/?utm_source=feedburner
nkf、ネットワーク漢字フィルタという古くから有名な変換プログラムがあ る。
ベクターにWindows版がある。
Windowsでは、以前からシフトJISコードが文字コードとして使われて いたが、現在はユニコードのUTF-8が多くなっている。特にウェブ。
電子メールで日本語文字を送受信するときに使用される。ISO-2022 のエスケー プシーケンスをもちいて7ビットでありながら、漢字など多種類の文字集 合を切り替えるのが特徴である。
WikipediaのISO-2022-JP解説
このサイ ト「 Shift_JIS と Windows-31J (MS932) の違いを整理してみよう」を参 考にする。
Android の断片化問題とは、各社が自由にAndroid端末を開発できるが故に、ディ スプレイサイズや……
ここまでに、完了させておくこと。
H4L教室
Windows - 設定 - システム情報 - システムの詳細設定
Windowsの環境変数については、Environment variable を参照。
%SystemRoot%の値は、PowerShellで次のコマンドを実行すれば表示される。
write-output $env:systemroot
Windows 10 の例:hosts, servicesファイル
PS C:\Windows\system32\drivers\etc> more hosts # Copyright (c) 1993-2009 Microsoft Corp. # # This is a sample HOSTS file used by Microsoft TCP/IP for Windows. # # This file contains the mappings of IP addresses to host names. Each # entry should be kept on an individual line. The IP address should # be placed in the first column followed by the corresponding host name. # The IP address and the host name should be separated by at least one # space. # # Additionally, comments (such as these) may be inserted on individual # lines or following the machine name denoted by a '#' symbol. # # For example: # # 102.54.94.97 rhino.acme.com # source server # 38.25.63.10 x.acme.com # x client host # localhost name resolution is handled within DNS itself. # 127.0.0.1 localhost # ::1 localhost
PS C:\Windows\system32\drivers\etc> more .\services # Copyright (c) 1993-2004 Microsoft Corp. # # This file contains port numbers for well-known services defined by IANA # # Format: # # service name port number/protocol [aliases...] [#comment] # echo 7/tcp echo 7/udp discard 9/tcp sink null discard 9/udp sink null systat 11/tcp users #Active users systat 11/udp users #Active users daytime 13/tcp daytime 13/udp qotd 17/tcp quote #Quote of the day qotd 17/udp quote #Quote of the day chargen 19/tcp ttytst source #Character generator chargen 19/udp ttytst source #Character generator ftp-data 20/tcp #FTP, data ftp 21/tcp #FTP. control ssh 22/tcp #SSH Remote Login Protocol telnet 23/tcp smtp 25/tcp mail #Simple Mail Transfer Protocol time 37/tcp timserver time 37/udp timserver rlp 39/udp resource #Resource Location Protocol nameserver 42/tcp name #Host Name Server nameserver 42/udp name #Host Name Server nicname 43/tcp whois domain 53/tcp #Domain Name Server domain 53/udp #Domain Name Server bootps 67/udp dhcps #Bootstrap Protocol Server bootpc 68/udp dhcpc #Bootstrap Protocol Client tftp 69/udp #Trivial File Transfer gopher 70/tcp finger 79/tcp http 80/tcp www www-http #World Wide Web hosts2-ns 81/tcp #HOSTS2 Name Server hosts2-ns 81/udp #HOSTS2 Name Server kerberos 88/tcp krb5 kerberos-sec #Kerberos kerberos 88/udp krb5 kerberos-sec #Kerberos hostname 101/tcp hostnames #NIC Host Name Server iso-tsap 102/tcp #ISO-TSAP Class 0 rtelnet 107/tcp #Remote Telnet Service pop2 109/tcp postoffice #Post Office Protocol - Version 2 pop3 110/tcp #Post Office Protocol - Version 3 sunrpc 111/tcp rpcbind portmap #SUN Remote Procedure Call sunrpc 111/udp rpcbind portmap #SUN Remote Procedure Call auth 113/tcp ident tap #Identification Protocol uucp-path 117/tcp sqlserv 118/tcp #SQL Services nntp 119/tcp usenet #Network News Transfer Protocol ntp 123/udp #Network Time Protocol epmap 135/tcp loc-srv #DCE endpoint resolution epmap 135/udp loc-srv #DCE endpoint resolution netbios-ns 137/tcp nbname #NETBIOS Name Service netbios-ns 137/udp nbname #NETBIOS Name Service netbios-dgm 138/udp nbdatagram #NETBIOS Datagram Service netbios-ssn 139/tcp nbsession #NETBIOS Session Service imap 143/tcp imap4 #Internet Message Access Protocol sql-net 150/tcp sqlsrv 156/tcp pcmail-srv 158/tcp #PCMail Server snmp 161/udp #SNMP snmptrap 162/udp snmp-trap #SNMP trap print-srv 170/tcp #Network PostScript bgp 179/tcp #Border Gateway Protocol irc 194/tcp #Internet Relay Chat Protocol ipx 213/udp #IPX over IP rtsps 322/tcp rtsps 322/udp mftp 349/tcp mftp 349/udp ldap 389/tcp #Lightweight Directory Access Protocol https 443/tcp MCom #HTTP over TLS/SSL https 443/udp MCom #HTTP over TLS/SSL microsoft-ds 445/tcp microsoft-ds 445/udp kpasswd 464/tcp # Kerberos (v5) kpasswd 464/udp # Kerberos (v5) (省略)
松山大学のWebサーバからkeieiの文字列を検索する。nc コマンドによ りindex.htmlファイルをGETし、findstrコマンドで文字列keieiを含む行 を画面に表示させる。
PS C:\manabu> nc www.matsuyama-u.ac.jp 80 | findstr keiei GET / HTTP/1.0 ...
ヒントと解答の一部:たとえば、keizai.matsuyama-u.ac.jp からnslookupコマン ドでIPアドレスが引き出すことができる。全学部のウェブサーバの名前と IPアドレスの関係を調べる。
nmap をhttps://nmap.org/book/inst-windows.html からインストールする。
2016年10月10日現在では、最新版nmap-7.30-setup.exe をダウンロー ドディレクトリーのなかで見つけてダウンロードする。
Scoop とは?
Scoop.sh に1行で書いてあるように Windows用のコマンド行によるインストーラである。
さっそく Scoop をインストールしてみる。PowerShell を起動し、下記の手順で実行する。
PS D:\> set-executionpolicy unrestricted -s cu 実行ポリシーの変更 実行ポリシーは、信頼されていないスクリプトからの保護に役立ちます。実行ポリシーを変更すると、about_Execution_Policies のヘルプ トピック (http://go.microsoft.com/fwlink/?LinkID=135170) で説明されているセキュリティ上の危険にさらされる可能性があります。実行ポリシーを変更しますか? [Y] はい(Y) [A] すべて続行(A) [N] いいえ(N) [L] すべて無視(L) [S] 中断(S) [?] ヘルプ (既定値は "N"): Y PS D:\> iex (new-object net.webclient).downloadstring('https://get.scoop.sh') initializing... downloading... extracting... creating shim... adding ~\AppData\Local\scoop\shims to your path scoop was installed successfully! type 'scoop help' for instructions PS D:\> scoop help usage: scoop[ ] Some useful commands are: alias Manage scoop aliases bucket Manage Scoop buckets cache Show or clear the download cache config Get or set configuration values create Create a custom app manifest depends List dependencies for an app export Exports (an importable) list of installed apps help Show help for a command home Opens the app homepage install Install apps list List installed apps reset Reset an app to resolve conflicts search Search available apps status Show status and check for new app versions uninstall Uninstall an app update Update apps, or Scoop itself which Locate a program path type 'scoop help ' to get help for a specific command PS D:\>
さっそく、Scoopで cURL をインストールしてみる。cURLは、see URLの意味。
PS D:\> scoop install curl
PowerShellでそのままcurlと打つと、PowerShell標準のcurlが起動する。scoop でインストールしたcurlを動かすにはパスをフル指定する。
PS C:\> ~\AppData\Local\scoop\apps\curl\7.50.3\curl -help
WindowsPowershellには、curlにエイリアスをリンクしたInvoke-WebRequestがある。このエイリアスをはずしておかないと curlを動かしたつもりで Invoke-WebRequestを起動してしまう。ということでscoop でcurlをインストールしたあとは忘れないようInvoke-WebRequestからcurlへのリンクをはずしておく。
Remove-Item alias:curl
では、curlを使って、ためにし大学のURLを指定してみる。
PS C:\> curl http://www.matsuyama-u.ac.jp
PS C:\> curl http://www.ehime-u.ac.jp
PS D:\> scoop usage: scoop[ ] Some useful commands are: alias Manage scoop aliases bucket Manage Scoop buckets cache Show or clear the download cache config Get or set configuration values create Create a custom app manifest depends List dependencies for an app export Exports (an importable) list of installed apps help Show help for a command home Opens the app homepage install Install apps list List installed apps reset Reset an app to resolve conflicts search Search available apps status Show status and check for new app versions uninstall Uninstall an app update Update apps, or Scoop itself which Locate a program path type 'scoop help ' to get help for a specific command
PS D:\> scoop status scoop is out of date. run scoop update to get the latest changes. everything is ok!
PS D:\> scoop update scoop uses git to update itself. run 'scoop install git'. PS D:\> scoop install git installing 7zip (16.04) downloading http://7-zip.org/a/7z1604-x64.msi...(1.6 MB) done checking hash...ok extracting...done creating shim for 7z 7zip (16.04) was installed successfully! installing git (2.10.1.windows.1) downloading https://github.com/git-for-windows/git/releases/download/v2.10.1.windows.1/PortableGit-2.10 /dl.7z...(29.6 MB) done checking hash...ok extracting...done creating shim for git creating shim for gitk creating shim for git-gui running post-install script... git (2.10.1.windows.1) was installed successfully! Notes ----- To get Git to recognise OpenSSH, you will need to run scoop install openssh [environment]::setenvironmentvariable('GIT_SSH', (resolve-path (scoop which ssh)), 'USER') and then restart powershell.
PS D:\> scoop install openssh installing openssh (5.4p1-1) downloading http://ufpr.dl.sourceforge.net/project/mingw/MSYS/Extension/openssh/openssh-5.4p .13-bin.tar.lzma...(274.7 KB) done checking hash...ok extracting...done downloading http://ufpr.dl.sourceforge.net/project/mingw/MSYS/Extension/openssh/openssh-5.4p .13-lic.tar.lzma...(4.8 KB) done checking hash...ok extracting...done downloading http://ufpr.dl.sourceforge.net/project/mingw/MSYS/Base/msys-core/msys-1.0.13-2/m -bin.tar.lzma...(610.1 KB) done checking hash...ok extracting...done downloading http://ufpr.dl.sourceforge.net/project/mingw/MSYS/Extension/zlib/zlib-1.2.3-2/zl ar.lzma...(36.7 KB) done checking hash...ok extracting...done downloading http://ufpr.dl.sourceforge.net/project/mingw/MSYS/Extension/minires/minires-1.02 s-1.0.13-dll.tar.lzma...(11.4 KB) done checking hash...ok extracting...done downloading http://ufpr.dl.sourceforge.net/project/mingw/MSYS/Extension/openssl/openssl-1.0. 1.0.13-dll-100.tar.lzma...(654.9 KB) done checking hash...ok extracting...done creating shim for scp creating shim for sftp creating shim for slogin creating shim for ssh-add creating shim for ssh-agent creating shim for ssh-keygen creating shim for ssh-keyscan creating shim for ssh openssh (5.4p1-1) was installed successfully!
PS D:\> scoop update updating scoop... scoop was updated successfully! PS D:\> scoop status scoop is up-to-date. everything is ok!
ここまでで、ほぼScoopの環境はできあがって、最新の状態になった。次に、ScoopでLinuxのコマンドで利用できるような便利なツールをインストールするための準備を行なう。
それは、extras bucketの追加で次のやり方で完成する。
PS D:\> scoop bucket add extras https://github.com/lukesampson/scoop-extras.git checking repo...ok Cloning into 'C:\Users\sumio\AppData\Local\scoop\buckets\extras'... remote: Counting objects: 1630, done. remote: Compressing objects: 100% (5/5), done. remote: Total 1630 (delta 2), reused 0 (delta 0), pack-reused 1625 eceiving objects: 00 KiB/s Receiving objects: 100% (1630/1630), 362.63 KiB | 223.00 KiB/s, done. Resolving deltas: 100% (853/853), done. extras bucket was added successfully
では、emacsをインストールしてみよう。
PS D:\> scoop install emacs installing emacs (25.1) downloading https://ftp.gnu.org/gnu/emacs/windows/emacs-25.1-x86_64-w64-mingw32.zip...(48.8 MB) done checking hash...ok extracting...done downloading ftp://ftp.gnutls.org/gcrypt/gnutls/w32/gnutls-3.4.9-w64.zip...(-1 B) done756200% checking hash...ok extracting...done creating shim for runemacs creating shim for emacs creating shim for emacsclientw creating shim for etags creating shim for ctags emacs (25.1) was installed successfully!
これでemacsがインストールされた。
https://developer.android.com
サイトからのクッキーを認める、OKをクリックする。
Android Studio のインストール用ページ
https://developer.android.com/studio/install.html
ページ右上にOS別のインストール方法
ページ下半分にインストールの進行ビデオ
Help > Check for Update
仮想デバイス設定の流れ
Tools --- Android --- SDK Manager
マイアプリ プロジェクトを選んで、ツールバーからRun。
Select Development Target で、さっきの仮想デバイスを選択。
仮想デバイスでマイアプリのHello World!が動けば準備はほぼできあがり。
地図アプリを起動する。
松山小学校を地図アプリで検索した結果。
http://mobile.matsuyama-u.jp/mbl/hpg010201.htm
matsuyama-u.ac.jp ではなく、matsuyama-u.jp。文字コードは、シフトJIS。これらに気をつけて cURL でファイルを調べる。
charset=shift_jis 休講 mbl/hpg020101.htm?PSS= ... &SETI=1 大学 補講 mbl/hpg020201.htm?PSS= ... &SETI=1 大学 教室変更 mbl/hpg020301.htm?PSS= ... &SETI=1 大学
hpgファイル名の数字6けたの下から3けためは、休講(1)、補講(2)、教室変更(3)。それぞれにパラメータをわたすとき SETI=1は、大学。
lynx で休講情報サイトをチェックすると、クッキーを使っていることがわかる。
環境によっては、シフトJISなので、lynx が警告をだすこともある。
Name API Level Android 7.0 Nougat 24 Android 6.0 Marshmallow 23 Android 5.1 Lollipop 22 Android 5.0 Lollipop 21 Android 4.4W KitKat Wear 20 Android 4.4 KitKat 19 Android 4.3 Jelly Bean 18 Android 4.2 Jelly Bean 17 Android 4.1 Jelly Bean 16 Android 4.0.3 IceCreamSandwich 15 Android 4.0 IceCreamSandwich 14 Android 3.2 Honeycomb 13 Android 3.1 Honeycomb 12 Android 3.0 Honeycomb 11 Android 2.3.3 Gingerbread 10 Android 2.3 Gingerbread 9 Android 2.2 Froyo 8 Android 2.1 Eclair 7
アクティビティは、ユーザと対話することができる。映画『2001年宇宙の旅』でコンピュータHALがボーマン船長との対話でみせるユーザインタフェースの画面効果はすばらしい。ぜひ映画を観てインタフェースとアクティビティを考えてほしい。
インテントは、「写真を選ぶ」、「家に電話する」などアクションを記述する。インテントの例として、2001年宇宙の旅から「Open the Pod bay doors, HAL. (HAL ポッドの入口を開けろ)」などが引用されることがある。
Unixのデーモンのようにユーザに隠れて働く。
app --- res --- layout --- activity_main.xml
画面の下にあるDesign, Text タブの切り替え。
<?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="match_parent" android:orientation="horizontal"> </LinearLayout> </pre>
LinearLayoutは、ViewGroupのサブクラスで、垂直あるいは水平方向にビューを配置する。
<EditText android:id="@+id/edit_message" android:layout_width="wrap_content" android:layout_height="wrap_content" android:hint="@string/edit_message" />
<EditText ... >を追加すると、レンダリングエラーがでる。このエラーは、あとで消すことができるのでこのまま進む。
https://developer.android.com/samples/index.html
GitHub からサンプルコードを選んでインポートし、実行する。
https://github.com/googlesamples/
コンポーネントの不足エラーがでるときは、ガイド画面にしたがって必要なコンポーネントをダウンロードする。
またUPDATEの要求が頻繁にでるが、これにも素直にしたがう。
この画面がでたときは、Project Viewを選ぶ。
Small Basic は、ともかくエディタ、実行のサイクルが単純でわかりやすいのが特長だ。
次の例は、インポートでマイクロソフトのSmall BasicサンプルプログラムをID (PMT149) を指定して読み込んだところ。
GDD325-14 をインポートしてみよう。
TextWindow.WriteLine(" ... ") TextWindow.Write(" ... ") TextWindow.Read()
For i = 1 to 200 ... EndFor
Forループで、1から2n-1までの奇数の和をもとめるプログラムを書いてみる。
Small Basicを起動し、エディタに下記のプログラムを書きこみ実行してみる。
TextWindow.WriteLine("1から 2n-1までの奇数の和をもとめる") n = TextWindow.Read() s = 0 For i = 1 To n s = s + 2*i - 1 TextWindow.Write(i + " ") TextWindow.Write(s + " ") EndFor
テキストウィンドウ(TextWindow)への出力結果。
ヒント N Nの2乗 141 19881 100√2 20000 142 20164 (142 -141) : (100√2 -141) = (20164-19881) : (20000-19881) の比例式を解く。
この比例式をつかって、√2 を小数点以下まで計算した結果はいくらになるか?何けたまで正しい値がえられただろうか?
これまではSmall BasicのTextWindowを利用するプログラムでおもに数値計算をやってきた。実用的なアプリケーションでは、図形や画像の処理が必要になる。Small Basicは、TextWindowのようにグラッフィクス窓 GraphicsWindow に出力することができる。Graphicsとsが付く。
エディタを新規で開いて、次の1行だけを入力して実行する。
GraphicsWindow.Show()
XY平面座標の点(0,0)から点(200,100)まで直線を引く。
GraphicsWindows.DrawLine(0, 0, 200,100)
GraphicsWindow.Show() s = 0 For i = 1 To 200 s = s + 2*i - 1 GraphicsWindow.DrawLine(0, i, s, i) EndFor
このプログラムだと、グラフが窓わくをはみだしてしまう。2次関数のグラフとしてうまく見せる工夫をしてみよう。
GraphicsWindow.Show()でグラフィックスの窓を開くと、背景は白のある決められた大きさの窓が開く。この窓の背景色、大きさなどを変えるには次のようにする。
GraphicsWindow.BackgroundColor = "色" GraphicsWindow.Title = "ウィンドウの表題" GraphicsWindow.Width = 横幅(ドット数) GraphicsWindow.Height = 高さ GraphicsWindow.Show()
Small Basicによる3目並べ(Tic tac toe)プログラムの1つに LBW762-3がある。
Small BasicのDownloadをクリックし、ダウンロードしインストールする。
インストール後、Small Basicを起動しメニュー「インポート」をクリックしてプログラムID「LBW762-3」を入れ実行する。
この3目並べは、人間に対してコンピュータはAI型プログラムで対戦する。
マイクロソフト社のソーシャルネットワーク プログラミングの「Small Basic フォーラム」を利用する。
Alexander Bogomolny, Plane Filling Curves from Interactive Mathematics Miscellany and Puzzles
http://www.cut-the-knot.org/do_you_know/hilbert.shtml, Accessed 09 November 2016
Mandelbrot set マンデルブロー曲線を描いたSmall Basic プログラムの例は、ここにある。
カリフラワー、ブロッコリのような3次元をつくることはできるだろうか。
Mandelbulb 3D - THe Depths of Europa
「何でも聞いてください (マイク)」の横にある「タスクビュー」のアイコンをクリックする。
デスクトップ1、デスクトップ2と仮想デスクトップを広げてゆくことができるようになった。Windows 10の新しい機能でデスクトップ右下の「+」をクリックすると仮想デスクトップを増やす。
日本語 Remix をココからダウンロードできます。
Ubuntuにインストールされている日本語フォントは、Ubuntuのコマンド fc-list で一覧できる。こちらのubuntu Japanese Team Wiki - InstallFont でフォントを目で確認できる。
もうハローワールド!には食傷気味、またかという人も。はじめての人も、これをコンパイル(javac)して実行(java)することができれば、新しい世界、プログラミングの世界を開いたことになるでしょう。
public class HelloWorld { public static void main(String[] args) { System.out.println("Hello World!"); } }
Windows PowerShellを起動する。これから自分でつくったプログラムを保存するフォルダ を作成する。
cd C:\Users\ユーザ名 mkdir src cd src
自分のなじみのエデイタで、このプログラムを、この通りに打ち込む。
文字列「Hello World!」出力は、System.out.println("Hello World!")
ファイル名をhelloworld.java にして、自分のソースコード用フォルダに保存する。
Windows PowerShellでソースコード用フォルダに移動し、コンパイルする。
Java のソースプログラムをコンパイルするためには、Java 開発キットが必要なので、Oracleの開発者用キットを提供しているサイトからダウンロードする。Java SE Development Kit のWindows x64版をダウンロードするためには、「Accept License Agreement」にチェックをし、目的の jdk-xxxxx-windows-x64.exe をクリックしダウンロードとインストールを実行する。
開発キット JDK をインストールすると、Java開発環境ができあがる。この中でこれから使うのは、javac とjavaである。
コンパイルするJavaソースの名前を確認しておく。
cd C:\Users\ユーザ名\src dir
javac と java が動作することを確かめておく。
javac java
次のようにjavacコンパイラに、ソースhalloworld.javaをあたえてコンパイルする。
javac helloworld.java
実行は、どうするか。
java HelloWorld
ここで、ちょっとJava世界のルールが見えてくる。
なぜ、helloworldでなくてHelloWorldなのか。
C言語と対比させてその理由考えてみよう。
Java言語で記述されたプログラムは、ひとつ以上の class(クラス) 定義から構成されている。それぞれのクラスは、それぞれの .class ファイルへとコンパイルされる。コンパイルされたクラスファイルは、Java 仮想マシンで実行されるオブジェクトファイルになる。
helloworld.java --> コンパイラ(javac) --> HelloWorld.class --> Java VM --> コンピュータが実行
helloworld.java --> HelloWorld.class
異なるオペレーティングシステムで同じHelloWorld.classが実行可能になる。
Windows JVM Linux JVM MacOS JVM Android JVM iOS JVM
Javaプログラムが動くためには 手続(メソッド)として一つmain() がなければならない。プログラムの出発点は、main()である。
Javaプログラムをコンピュータで動かすには、Javaインタプリタを起動しインタプリタにJavaクラスファイルを食べさせる。もちろんこのクラスファイルの中には、main()メソッドが一つなければならない。JavaインタプリタにJavaクラスファイルをあたえるときは、.classを省略する。次のように。
java HelloWorld
次にテキサス大学のコンピュータ科学科のコースで公開されているサンプルプログラムを実行してみる。内容は、以下順に解説する。
/* HelloWorld.java */ public class HelloWorld { ublic static void main(String[] args) { System.out.println("Hello World!"); }
/* CallingMethodsInSameClass.java * * illustrates how to call static methods a class * from a method in the same class */ public class CallingMethodsInSameClass { public static void main(String[] args) { printOne(); printOne(); printTwo(); } public static void printOne() { System.out.println("Hello World"); } public static void printTwo() { printOne(); printOne(); } }
For ループで階乗を計算する。
public class Factorial { public static void main(String[] args) { final int NUM_FACTS = 100; for(int i = 0; i < NUM_FACTS; i++) system.out.println( i + "! is " + factorial(i)); } public static int factorial(int n) { int result = 1; for(int i = 2; i <= n; i++) result *= i; return result; } }
For ループには、大きくわけ2つの種類がある。
Oracle の「The Java Tutorials - The for Statement」に2つのデモプログラムがある。
class ForDemo { public static void main(String[] args){ for(int i=1; i<11; i++){ System.out.println("Count is: " + i); } } }
class EnhancedForDemo { public static void main(String[] args){ int[] numbers = {1,2,3,4,5,6,7,8,9,10}; for (int item : numbers) { System.out.println("Count is: " + item); } } }
Enhanced for ループは、for loop の反復記述を単純化することができる。ただし、配列をはじめからおわりまで順に処理する場合に限られる。
enum で定義されたシンボルを配列に格納して、それを順にプリントする。
import static java.lang.System.out; class ListSymbols { enum Symbol { Sui, Kin, Chi, Ka, Moku, Do, Ten, Kai } public static void main(String args[]) { for (Symbol Wakusei : Symbol.values()) { out.println(leftReel); } } }
enum の使い方は、次のOracle The Java Tutorials - Enum Types にわかりやすい曜日の例がある。
enum タイプのDayを次のようにする。
public enum Day { SUNDAY, MONDAY, TUESDAY, WEDNESDAY, THURSDAY, FRIDAY, SATURDAY }
Day タイプの変数 day を使って、EnumTest クラスをつくる。
public class EnumTest { Day day; public EnumTest(Day day) { this.day = day; }
public void tellItLikeItIs() { switch (day) { case MONDAY: System.out.println("Mondays are bad."); break; case FRIDAY: System.out.println("Fridays are better."); break; case SATURDAY: case SUNDAY: System.out.println("Weekends are best."); break; default: System.out.println("Midweek days are so-so."); break; } } public static void main(String[] args) { EnumTest firstDay = new EnumTest(Day.MONDAY); firstDay.tellItLikeItIs(); EnumTest thirdDay = new EnumTest(Day.WEDNESDAY); thirdDay.tellItLikeItIs(); EnumTest fifthDay = new EnumTest(Day.FRIDAY); fifthDay.tellItLikeItIs(); EnumTest sixthDay = new EnumTest(Day.SATURDAY); sixthDay.tellItLikeItIs(); EnumTest seventhDay = new EnumTest(Day.SUNDAY); seventhDay.tellItLikeItIs(); } }
for (Planet p : Planet.values()) { System.out.printf("Your weight on %s is %f%n", p, p.surfaceWeight(mass)); }
Oracle の docs.oracle.com/javase/java/ ... のページからサンプルプログラムをコピーして実行する。
A星からAYUMI星までの距離が7光年以上となるのは、角度が何度以下になったときだろうか。その角度を小数点以下6けたまで計算するプログラムを書け。さらに、この絵をアニメーションとして動くプログラムを書け。
ヒント: law of cosines
/* Caesar Cipher */ public class Cipher { public static void main(String[] args) { String str = "The quick brown fox Jumped over the lazy Dog"; System.out.println( Cipher.encode( str, 12 )); System.out.println( Cipher.decode( Cipher.encode( str, 12), 12 )); } public static String decode(String enc, int offset) { return encode(enc, 26-offset); } public static String encode(String enc, int offset) { offset = offset % 26 + 26; StringBuilder encoded = new StringBuilder(); for (char i : enc.toCharArray()) { if (Character.isLetter(i)) { if (Character.isUpperCase(i)) { encoded.append((char) ('A' + (i - 'A' + offset) % 26 )); } else { encoded.append((char) ('a' + (i - 'a' + offset) % 26 )); } } else { encoded.append(i); } } return encoded.toString(); } }
zcode.comにあるJava ゲーム・チュートリアルからテトリスのソースコードを参考にしてテトリス ゲームをつくる。
準備
cd src mkdir tetris
チュートリアルにある3つのソースコードをそれぞれtetrisディレクトリに次のファイル名で保存する。
Shape.java Board.java Tetris.java
javacを使って、3つのソースをコンパイルする。
javac tetris\Shape.java javac tetris\Board.java javac tetris\Tetris.java
javaコマンドで、tetris.Tetrisを実行する。
java tetris.Tetris
パッケージは、アプリのことだ。パッケージの名前をコードのどこに書くかはきまっている。
ソースの一番先頭行で、「package 名」を記述しておく。先頭でなければならない。
3つのファイルのそれぞれの先頭行にパッケージ名を次のように書く。セミコロンを忘れないように。
package tetris;
Board.java を上から読むと、package書式につづいて、import書式が続いている。この「java.awt.Color」のようにドット(.)でつながれた文字列は「パッケージ名」であり、Javaシステムにはたくさんのパッケージがあらかじめ用意されている。
package tetris; import java.awt.Color; import java.awt.Dimension; import java.awt.Graphics; import java.awt.event.ActionEvent;
これらのインポート命令によって、それぞれ java.awt.Color, java.awt.Dimensionなどのパッケージがインポート(組込む)されることになる。
Javaシステムのパッケージ名は非常に種類が多い。全部おぼえるのは大変で、綴をまちがえないようにすることに神経を磨り減らすことになる。そこで、統合開発環境を使うと楽になるのだが、ここでは、あくまでシェルにこだわることにする。
jshell コマンドは、途中までタイプしたパッケージやクラスを補完してくれる。タブ機能がある。
$ jshell | Welcome to JShell -- Version 9-internal | For an introduction type: /help intro -> import java java javax -> import java.awt.Co Color Component ComponentOrientation Composite CompositeContext Container ContainerOrderFocusTraversalPolicy -> import java.awt.Color
java.awtは、「グラフィック、テキスト、ウィンドウ等用のクラス」を含むパッケージである。
次の「tetris.Shape.Tetrominoes」は、パッケージ tetrisのなかのShapeクラスで定義されている。
import tetris.Shape.Tetrominoes;
これらの、パッケージとクラスを実際にファイルとして保存するときは、パッケージとクラスの関係をディレクトリの構造として反映させる。
tetrisディレクトリの下に3つのShape.java, Board.java, Tetris.javaを作成する。
tetris ----- Shape.java | Board.java + Tetris.java
tetris.Tetris
ただし、Ubuntu ではopenjdk version "9-internal", Open JDK Runtime Environment (build 9-internal+0-2016-04-14-195246.buildd.src), Open JDK 64-Bit Server VM (build 9-internal+0-2016-04-14-195246.buildd.src, mixed mode) の環境でコンパイルは正常だったが、実行でシステムエラーになってしまった。
Windows 10 のJava 上で tetris 実行とgame over の画面。
次のロゼッタコードのサイトからTicTacToeのコードをダウンロードする。
Srcディレクトリーのなかに保存し、javacでコンパイルし、javaで実行する。
javac TicTacToe.java java TicTacToe
Get-ChildItem -force
Get-ChileItem が長すぎるコマンドと感じたら、
dir -force
でもよい。
実体は、
GetChildItem C:\Users\ユーザ名\AppData\Local\lxss
にある。