Haskellで素数を出力


このエントリーをはてなブックマークに追加

codeIQで素数の数を出力する問題があったのでHaskellでやってみてたけど

言語選択しようと思ったらHaskellはなかったorz

ので、とりあえず書いてみたので記載



といっても難しいので色々と参考にした

Haskell で素数

Haskellで素数列生成




あと調べてみると、Melissa O’Neillさんの書いたコードがかなり高速らしいが読んでもわからなかったのでひとまず保留

haskell wikiのPrime numbersページ

ONeillPrimes の実行速度




いつか読めるようになるのだろうか



ひとまずコードを読む練習

まだまだHaskellはわからないのでひとまず人のコードを読んでみたのでコメントがてら残しておく
まだ理解が足りてないので間違えてるとは思うがこういうの残しておかないと

Main.hs
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
import Control.Applicative
import System.IO (isEOF)
import Data.Char
-- 参考: http://tsumuji.cocolog-nifty.com/tsumuji/2009/12/haskell-d3ed.html
-- primeListはInteger型の引数を取ってInteger型のリストを生成する
primeList :: Integer -> [Integer]
-- primeList n は 3以上の奇数のリスト(n-2まで)を篩にかけて2を先頭に加えたもの
primeList n = 2:sieve[3,5..(n-2)]
where
-- isqrtは、nの平方根を取ってtruncateで小数点を端折ったもの
isqrt = (truncate.sqrt.fromIntegral) n
-- sieveをガードで場合分け
sieve (p:xs)
| p > isqrt = p:xs
-- xを奇数の配列から取り出した値で割った余りが0で無い場合をリスト内包表記でフィルタリングして、さらにsieveを再帰させる. p > isqrtまで続く
| otherwise = p : sieve [x | x <- xs, rem x p /= 0]
main :: IO ()
main = do
eof <- isEOF
if not eof then do
s <- getLine
print $ length (primeList (read s :: Integer))
main
else return ()

これで、標準入力から数字を入力すると与えた数字より小さい値の素数の数が求められる


このエントリーをはてなブックマークに追加

Visual Studio Codeでタブディスプレイ表示


このエントリーをはてなブックマークに追加

Visual Studio Code (VScode)を使ってて結構便利だけど

Sublime Textみたいにタブ表示(タブディスプレイ)があると便利だと思ったのだが
現時点のversion 1.2 ではその機能は無いっぽい

と思って探してたら、現在開発中のバージョンに搭載されている模様
stack overflowで見つけた

Is there a tabbed view for VSCode?

Insiders release(開発中?)のバージョンでは搭載されているみたいで
一応ダウンロードも出来るし設定もできるけど
2016年7月ごろにその機能を搭載したproduct版(おそらくバージョン1.3)で搭載されるとのことなので

1.3版もしくは現段階でinsider版をダウンロードした場合は下記方法で使用可能

まずアプリを立ち上げる
(ひとまずInsider版で試してみる)

Macだと、command + , もしくはメニューのCode-Insiderから基本設定->ユーザー設定でユーザー設定画面を開いて

settings.jsonのファイルに

“workbench.editor.showTabs”: true

を記載する
これだけで、タブ機能がつく

参考リンクのstack overflow内だと "workbench.showEditorTabs": true にしろと書いているが
規定の設定を見てみたらshowEditorTabsじゃなくてshowTabsになっていたので
products版になった場合は一応確認する必要あり

tab表示機能があるとmarkdownでメモ代わりに使えるのでとても便利でありがたい


このエントリーをはてなブックマークに追加

30分間React入門「いいねボタン」作成チュートリアルの`npm run build`でエラーが起きる

下記チュートリアル

30分間React入門「いいねボタン」作成チュートリアル

をやってみてる
が、最初の npm run build のところでエラーを吐いてしまう

結論から書くと、以下のページを参考にしたらうまくいった

Babel 6リリースで、ES7を使っているとwebpackが動かなくなる

現在使っているbabelのバージョンが6に上がっているので、どうもwebpackの設定を変更しないといけないみたい
なので、解決策としては、参考リンク先通り babel-corebabel-preset-es2015babel-preset-stage-0 をいれて

1
$ npm install babel-loader babel-core babel-preset-es2015 babel-preset-stage-0 --save-dev

webpack.config.js も下記のように書き換えてやれば良い

webpack.config.js
1
2
3
4
5
6
7
8
9
10
11
12
module.exports = {
entry: __dirname + "/src/main.js",
output: {
path: __dirname + "/dist",
filename: "like-button.js"
},
module: {
loaders: [
{test: /\.js$/, loader: "babel", query: {presets: ["es2015", "stage-0", "react"]}}
]
}
};

Read More

RaspberryPiにnode.jsを導入する


このエントリーをはてなブックマークに追加

結局nodebrewを使うのが楽そう

node.jsを入れるのには、nvmやnodebrewなどバージョンやパッケージを管理してくれるツールを
使うのがいいのだけどRaspberryPiでもLinuxでもMacでも、nodebrewが一番楽(だと思ってる)ので

nodebrewをインストールしてから、node.jsをインストールしてやる
ラズパイのOSはRaspbian wheezyを使用してる. jessieでも大丈夫だと思われる

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
$ sudo curl -L git.io/nodebrew | perl - setup
$ sudo echo 'export PATH=$HOME/.nodebrew/current/bin:$PATH' >> ~/.bashrc
$ source .bashrc
# バージョンの確認ができたら成功
$ nodebrew -v
nodebrew 0.9.5
...
# 使えるnode.jsのバージョン確認
$ nodebrew ls-all
...
# ひとまずversion 5系の2016年4月時点最新版を入れてみる
$ nodebrew install-binary v5.11.0
...
$ nodebrew use v5.11.0
# nodeコマンドやnpmコマンドでバージョンが確認出来たら成功
$ node -v
v5.11.0
$ npm -v
3.8.6

以上、簡単にnode.jsを導入することができた


このエントリーをはてなブックマークに追加

How to put pictures and change sizes on your Hexo Blog


このエントリーをはてなブックマークに追加

_config.yml configuration

change post_asset_folder: true in your _config.yml

_config.yml

1
post_asset_folder: true

and check your blogs permalink
maybe the default is like this

1
permalink: :year/:month/:day/:title/

for example, this blog title is "How to put pictures and change sizes on your Hexo Blog"

in this case, write img tag like under sheme is good for change image size

1
<img src="/2016/04/05/How-to-put-pictures-and-change-sizes-on-your-Hexo-Blog/example.jpg" width="300px" height="200px">

like this


このエントリーをはてなブックマークに追加

mbed Nucleo STM32F401始め


このエントリーをはてなブックマークに追加

mbedでHello World

今更ながらmbedを扱ってみることに、ひとまずHello Worldをやってみる
格安boardであるmbed Nucleoがあったのでそれで練習

下記ページを参考にした
mbedではじめよう

PCの環境はMac OSX 10.9です

必要なもの
・mbed(なんでもいいですが今回はNucleoを使ってみた)
・PC(なんでもいいですが今回はMacを使ってみた)
USB Aオス-miniBオス(amazonでもパーツショップでもそのへんの電気屋サンでもなんでもいいので手に入れておく)

まずはつないでみてみる

STM32F401 Nucleoを箱から取り出してみると、ボードしかありません
パソコンとの接続にはUSBのminiBが必要となります

で、つないでみるとディスクとしてマウントされます

ディスクの中にmbed.htmというファイルがあるはずなので
ブラウザで開きます(たぶんブラウザにファイルをドラッグ&ドロップしてやればOKです)

そしたら、右側に Open mbed Compiler ってのがあるはずなのでクリックすると

IDE(統合開発環境)が開きます

プログラムを書き込んでみる

んで、まずはhello_worldをシリアルコンソールに出すサンプルプログラムをインポートしてあげれば動くのが確認できます

mbedのメニューバーから「インポート」をクリックして
「プログラム」タブにした状態で「Nucleo_hello_world」とやってやればサンプルプログラムが出てくるので

ダブルクリックしてやれば、プログラムがインポートされます
あとは、メニューバーの「コンパイル」をクリックしてやれば、コンパイルがうまくいけば
ファームウェアがダウンロード出来るので
デスクトップなどに一旦保存してあげます
で、その後ドラッグ&ドロップでNucleoディスクにプログラムを書き込んであげます
(直接Nucleoディスクにダウンロードするとなぜか動きませんでした)

後は、Macの場合はターミナルでscreenコマンドを打てばいいので

1
$ screen /dev/tty.usbmodem1423 9600

のように打ってあげると、5秒に一回 hello world と表示されるはずです

(/dev/tty.usbmodem1423 の部分は、tty. 以降が環境によって異なると思われますので)

1
$ ls /dev/tty.usb*

と打ち込んで出てきたやつを使用してください

macでUSBの穴(ソケット)を1つしか使ってない状態ではおそらく1つしか出てこないので

これでmbedの簡単な使い方が出来たので後はプログラムを書いていったり、他の人のソースをインポートしたりすれば
マイコンの練習が出来ます!

ちなみに、screenコマンドだと改行の位置がどんどんずれていってると思いますが
これはscreen側の改行コードが CR+LF の設定になってるため(たぶん)なので

Nucleo_hello_worldのプログラムだと2箇所、14行目と17行目の \n となってるところを \n\r としてやればよいです

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
#include "mbed.h"
//------------------------------------
// Hyperterminal configuration
// 9600 bauds, 8-bit data, no parity
//------------------------------------
Serial pc(SERIAL_TX, SERIAL_RX);
DigitalOut myled(LED1);
int main() {
int i = 1;
pc.printf("Hello World !\n\r"); /*ここの行*/
while(1) {
wait(1);
pc.printf("This program runs since %d seconds.\n\r", i++); /*ここの行*/
myled = !myled;
}
}

このエントリーをはてなブックマークに追加

second_page


このエントリーをはてなブックマークに追加

second page of hexo

one of the site generator

syntax

Qiitaのようにsyntax highlightされる

1
2
3
4
5
6
var http = require('http');
http.createServer(function (req, res) {
res.writeHead(200, {'Content-Type': 'text/plain'});
res.end('Hello World\n');
}).listen(1337, '127.0.0.1');
console.log('Server running at http://127.0.0.1:1337/');

confirm on local server


このエントリーをはてなブックマークに追加