Subscribed unsubscribe Subscribe Subscribe

F# Monkey

about

Suave server から json を出力する

F#

こんな感じで

#r @"./packages/Newtonsoft.Json/lib/net45/Newtonsoft.Json.dll"
open Newtonsoft.Json

#r @"./packages/FsPickler/lib/net45/FsPickler.dll"
#r @"./packages/FsPickler.Json/lib/net45/FsPickler.Json.dll"
open MBrace.FsPickler
open MBrace.FsPickler.Json

#r @"./packages/Suave/lib/net40/Suave.dll"
open Suave
open Suave.Operators
open Suave.Successful
open Suave.Filters
open Suave.RequestErrors



// o はレコードとかリストとか
let jsonSerializer = FsPickler.CreateJsonSerializer(indent = false, omitHeader = true)
OK ( jsonSerializer.PickleToString(o) )
Remove all ads

インテリセンスを作ってみた

Vim

Summary

Vim(Neovim)F#のコード書くための実行環境を整えてみました!

01. コード実行結果の表示

02. インテリセンスによるコード補完

Motivation

vim-fsharpというすごく便利なプラグインがあるのですが

もっとシンプルなのが欲しかったのでつくってみました

ちょっとしたコードを即実行できる環境がほしかったのですよ

Like this

  コードを実行する

f:id:callmekohei00:20170205133525p:plain

コードを書くときはインテリセンスがききます

f:id:callmekohei00:20170211170918p:plain

Source

コードはこちらから〜

GitHub - callmekohei/deoplete-fsharp: Provides Intellisense completions for FSharp

感想

まだまだだと思いますけど

ゆっくりと作り込んでいきたいです

機能は増やさず安定した動作を

求めて行きたいです

Thanks

特に・・・

@ShougoMatsuさん, @_zchee_さん, @yukitosさん, @hafuuさん, @Haxeさん, @bleisさん, @kekyoさん, @omanukeさん, @pocketberserkerさん, @adacolaさん

本当にありがとうございます!

上記以外の方も本当にありがとうございます!

Remove all ads

deoplete.nvimのソースをつくってみた

Vim

やりたいこと

下記のような感じでオートコンプリートしたい

apと入力したらapple

baと入力したらbanana

chと入力したらcherry

f:id:callmekohei00:20170129233114p:plain

必要なもの

deoplete.nvim

# dein.toml の記入例
[[plugins]]
repo = 'Shougo/deoplete.nvim'
hook_add = 'let g:deoplete#enable_at_startup = 1'

ソースをつくる

ソースの置き場所

$XDG_CONFIG_HOME/nvim/rplugin/python3/deoplete/sources


まずフォルダをつくる

cd $XDG_CONFIG_HOME/nvim
mkdir -p rplugin/python3/deoplete/sources

ソース(パイソンファイル)を作成

cd rplugin/python3/deoplete/sources
vim callmekohei.py

callmekohei.pyの中身(さわるところは3ヶ所のみ!)

from .base import Base

class Source(Base):
    def __init__(self, vim):
        super().__init__(vim)
        self.name = 'callmekohei'           # なまえ
        self.mark = '[kohei]'               # mark のなまえ

    def gather_candidates(self, context):
        return ["apple","banana","cherry"]  # ポップアップのリスト






やりたいこと2

fruits.と入力したらapple, banana, cherry

f:id:callmekohei00:20170130111957p:plain

ソース

import re
from .base import Base

class Source(Base):
    def __init__(self, vim):
        super().__init__(vim)
        self.name = 'callmekohei'
        self.mark = '[kohei]'
        self.input_pattern = (r'^fruits\.')        # input_pattern で fruits. を指定する
        
    def get_complete_position(self, context):      # input_pattern を使うときは必須
        m = re.search(r'\w*$', context['input'])
        return m.start() if m else -1

    def gather_candidates(self, context):
        return ["apple","banana","cherry"]






やりたいこと3

appleを選択したらappleの説明を表示したい

f:id:callmekohei00:20170210005937p:plain

ソース

from .base import Base

class Source(Base):
    def __init__(self, vim):
        super().__init__(vim)
        self.name          = 'callmekohei'
        self.mark          = '[kohei]'

    def gather_candidates(self, context):
        return [
            {
                  'word' : "apple"
                , 'abbr' : "apple  : red, round and delicious!"
                , 'info' : "Apple is delicious"
                , 'kind' : "Food"
                , 'dup'  : 1
            }
        ]



参照

ヘルプ :help deoplete

CREATE SOURCE                    *deoplete-create-source*

To create source, you should read default sources implementation in
rplugin/python3/deoplete/source/*.py.

The files are automatically loaded and deoplete creates new Source class
object.
Source class must extend Base class in ".base".

Note: The sources must be created by Python3 language.

Note: If you call Vim functions in your source, it is not asynchronous.


qiita.com

Remove all ads

python 個人的チュートリアル

callmekoheiは今日からpythonをお勉強はじめました!

で、さっきまで学んだ内容のちょっとしたまとめをメモメモ

下準備

vimpythonを書くための下準備


python3で実行する(quickrunの設定)

let g:quickrun_config = {
\     , 'python': {
\           'command': 'python3'
\     },
}

オートコンプリートを効かせる(dein.toml)

[[plugins]]
repo = 'zchee/deoplete-jedi'

文法的ななにか

# Hello, World
print('Hello, World')


# dictionary  and tuple

d = dict(a = 1, b = 2, c = 3)

for key, value in d.items():
    print(key + ' - ' + str(value))


# function
def fizzbuzz(n):
    if n % 15 == 0:
        msg = 'fizzbuzz'
    elif n % 5 == 0:
        msg = 'buzz'
    elif n % 3 == 0:
        msg = 'fizz'
    else:
        msg = str(n)
    
    return msg

for v in range(1,100):
    print(fizzbuzz(v))


# class
class abc:
    x = 0
    def add100(self):
        return ( self.x + 100 )

cls = abc()
cls.x = 10
print(cls.add100())

# error handling
def test(n):
    try:
        print( 10 / n )
    except ZeroDivisionError as e:
        print(e)

test(0)
Remove all ads

チキンな自分向けのトレードルール

FX

ちゃんとFX初めて1年たったのですが、ええ、大負けですよ。お・お・ま・け。で昨年の11月から、もーいーやと半分投げやりな感じでトレードの方法を変えたら月度単位でプラスに転じたので一応メモメモ。自分にはあってるかもです。

トレードルール

チャート見て上か下かきめる
→ オーダー

テキトーな時間に確認
→ 利益が出てたら利確

それだけ

テクニカル

ボリンジャーバンド(σ2のみ表示)

EMA10, SMA13, EMA21

含み損のときに耐える方法

ツイッターつらと書き込む

英語の勉強をする

プログラミングをかく

お酒をのむ

部屋の片付けをする

利確するとき

マシーンになる

損切りするとき

マシーンになる

つねにおもふこと

たのしいときも

つらいときも

わらっとこう

Remove all ads

お酒飲みながら英語を勉強してみる

Food

callmekoheiは何回も英語の勉強に挑戦してるのですが、ことごとく失敗。というわけで、今年は勉強の仕方をかえてみます。お酒飲みながら英語を勉強してみますwww まぁ、うまくいくかわからないですけど。ただこの前、ちょっとフレーズ覚えてお店で使ったら「上達してる!」といわれたので多分フレーズ覚えたら何も考えずに使いまくるのがいいのかも?ですです。

教材

今すぐ言える! 英会話フレーズブック

今すぐ言える! 英会話フレーズブック

会話もメールも 英語は3語で伝わります

会話もメールも 英語は3語で伝わります

飲み屋さん

福岡市大名のラメーン一幸舎のとなりにある養巴コープという建物の2階のenuというお店

f:id:callmekohei00:20170119094616j:plain

店に入ったとき

// おつかれです
Hello! How are you?

// 今日は寒いですね〜
It's cold today!

// このまえの飲みどうでした?  
How did it go last day?

// やせたんじゃない?
Did you lose weight?

// 今日は1日家で読書してました
I read books all day at home.

着席するやいなや

// とりあえずビールにしよっと
// 生ビールいいですか?
I'll start with a beer!
Could I have some draft beer, please?

draft beer   生ビール
bottled beer 瓶ビール
craft beer   地ビール

注文するとき

// 今いいですか?
Excuse me. Let me know when you are ready.

// 注文しますね
Could I order?

// 今日はなにがおすすめです?
What's today's special?

// それってどんな感じです?
What’s that like?

// それってどんな感じです?
Could you give me some more detail?

// 自信のほどは?
How confident are you?

// おいしそう〜。それにします。
Sounds good. I’ll take it.

// うーん、やめときます
I'll pass.

// それと枝豆ください
I’d like a edamame, please.

// とりあえずこんなもんで
That's all.

// あせらなくていいよ
Take your time.

一杯目のビール飲んだ時の感想(ひとりごと)

// うまっ
It's tasty.

// なんとなく好き
I just like it.

// ビールに枝豆、うまっ
There's nothing like beer and edamame!

// なんといえばいいのかわからないけど
// まぁいえることは
// ビールはうまいということ
I don't know to put it, 
but I'm sure
this beer and you makes me happy.

おかわりするとき

// ドリンクのメニューはどこです?
Could I get a drink menu?


// おかわりですっ
Could I have another one, please?


// 次はウイスキーにしようかな
// ハーパーのソーダ割りで
I think I'll have whiskey next.
I'd like harper with soda.


// ジンベースの飲みやすいものをお願いします。
// フルーティーでアルコールが強くないものがいいいです。
I'd like something light with gin.
I want something fruity that's not too strong.

// ちょっとそのお酒を飲んでみようかと思います
I'll try to do some drink this one.

// このカクテルはうまそう
This cocktail has a nice look.

店員さんへのチップ

// よかったらいっぱいどうですか?
I'll get you an drink, if you wish.
You can have some drink.

// 乾杯!
cheers!

おあいそ

// すこし飲みすぎたみたい。酔っ払ったよ。
I think I drank a little too much. I'm drunk.

// おあいそいいですか?
Could I have the bill? Check please.

未整理

// 僕のいってることわかります?
Do you see what I mean?

// ずるい〜
That's not fair.

// 同じ意見〜
Same here.

// さっぱりわからないです
I have no idea.

// なんといえばいいのか・・・
How can I put it?

// まぁ、つまりこういうことです
Let me put it this way.

// つまりどういうことですか?
Could you keep it short?

// それおかしいでしょwww
It's funny.

// そうも考えれるけど
// 個人的にはそういう感じでは考えたくないです
I could think so,
but personally I don't want to go that route.

未整理2

// いまは仕事してません
I'm between jobs right now.

// かつては日本酒をのんでました
I used to do some drink sake.


Remove all ads

denite.vimの使い方

Vim

やりたいこと

denite.vimcolorsheme一覧を表示

一覧のなかからshineをえらぶ

手順

:Denite colorschemeと入力してリターン

f:id:callmekohei00:20170109163016p:plain


colorschemeの一覧が表示される

f:id:callmekohei00:20170109163024p:plain


ctlr oをおす(Normal modeにする)

f:id:callmekohei00:20170109171121p:plain


jをおして下まで移動してshineリターン

f:id:callmekohei00:20170109171136p:plain


shineになったー

f:id:callmekohei00:20170109171155p:plain

Remove all ads

Bashのことはじめ

Bash

Basic

Bashの基本的なことのおさらい

2つの立場

$ ls       // 一般ユーザー
$ sudo ls  // スーパーユーザー

2つのコマンド

$ type -a cd
cd is a shell builtin
cd is /usr/bin/cd

$ type -a ls
ls is /bin/ls

ヘルプ!

$ man cd
$ mono --help

3つのデーター

- file
d directory
l symbolic link

ワイルドカード・プレース展開

*
[abc]     abcのいずれか (char)
[a-z]     小文字のみ
[A-Z]     大文字のみ
[0-9]     0..9
{txt,py}  txt or py (string)

// 小文字のテキストファイルのみを表示
$ ls [a-z]*.txt
hello.txt

// .txt or .py のみ表示
$ ls *.{txt,py}
hello.txt  md_test.py

bashの変数

// check
$ env

// bind
$ export HOME=/Users/kohei



Commnd

Bashのコマンド

basic command

cd        // 今いるポジションを変更
ls        // ファイルの一覧
cat       // ファイルの中身をみる ファイルをひとつにする 
mkdir     // dir をつくる
touch     // file をつくる
cp        // コピー
mv        // dir, file を移動する 名前を変更する
rm        // dir, file をけす

option

-r  recursive  // ファイルがいっぱいのときつかう
-f  force      // 問答無用のときつかう

chmod (change mode)

permissionを変更できる

$ sudo chmod 777 test.exe

下記の表を参考にbitで設定するとやりやすい

bit dip rwx english
0 000 --- none
1 001 --x execute only
2 010 -w- write only
3 011 -wx write and execute
4 100 r-- read only
5 101 r-x read and execute
6 110 rw- read and write
7 111 rwx read, write and execute

default permission

$ umask
0022

file ---> 666 - 022 = 644 ( rw- r-- r-- )
dir  ---> 777 - 022 = 755 ( rwx r-x r-x )

chown ( change owner )

ownerを変更できる

$ sudo chown callmekohei test.exe

chgrp ( change group )

groupを変更できる

$sudo chgrp staff test.exe

ln

リンクをつくる

ハードリンクはよくわかってない。。。

$ ls
test.txt

$ ln -s test.txt test2.txt

$ ls
test.txt  test2.txt

$ l -al
--w--w--w-   1 kohei  staff     0 feb  7 06:41 test.txt
lrwxr-xr-x   1 kohei  staff     8 feb  8 16:44 test2.txt -> test.txt

type and which

コマンドの場所

$ type -a cd
cd is a shell builtin
cd is /usr/bin/cd

$ which cd
/usr/bin/cd

grep

文字列を検索する

grep pattern file

$ grep a hello.txt 
a

// regular expression
$ grep [a-z] hello.txt 
b
a
d
c

mdfind

ファイルを検索する

findよりすごく高速

SYNOPSIS
mdfind [-live] [-count] [-onlyin directory] [-name fileName] query

$ mdfind *.fsx
Remove all ads

Vimのことはじめ

Vim

Basic

左手小指に ctrl ( OSで設定 )

エスケープは ctrl [

基本はすべてnormal mode (つまり手がとまったらエスケープする)

Scroll

上方向にスクロール
ctrl u up ( 1 up )
ctrl f forward ( 0.5 up )

下方向にスクロール
ctrl d down ( 1 down )
ctrl b backward ( 0.5 down )

カーソルの位置を画面中央にする
zz

Move

検索で動く
/,?

カーソルを上中下で動かす
HML

カーソルを一文字単位で動かす
hjkl

カーソルを1行の中で動かす
f,F web(WEB)

Seek

/ abc
? abc

検索結果の移動
next n
previous p

ハイライトキャンセル
ctrl + l

Replace

かならず正規表現をつかう!

もしくはc (comfirm)をつかう!

: %s/abc$/zzz/gc

% ファイル全体
s substisute
g global
c confirm

insert mode

文字入力

i or a

Folding

まだよくわかってません。。。

ひらく zo

Runtimepath

確認のしかた

set runtimepath

結果

~/.config/nvim
,/etc/xdg/nvim
,~/.local/share/nvim/site
,/usr/local/share/nvim/site
,~/.config/nvim/dein/.cache/init.vim/.dein
,/usr/share/nvim/site
,/usr/local/Cellar/neovim/0.1.7/share/nvim/runtime
,/usr/share/nvim/site/after
,/usr/local/share/nvim/site/after
,~/.local/share/nvim/site/after
,/etc/xdg/nvim/after
,~/.config/nvim/after
,~/.config/nvim/dein/repos/github.com/Shougo/dein.vim
,~/.config/nvim/dein/.cache/init.vim/.dein/after

runtimepathの追加の仕方

set runtimepath+=[追加するランタイムパス(絶対パス)]

追加されたプラグインの確認

:scriptnames

$VIMRUNTIME(system runtime directory)

:so $VIMRUNTIME

/usr/local/Cellar/neovim/0.1.7/share/nvim/runtime
Remove all ads

Setting of Neovim

Vim

init.vim

英語メニュー

タブインデント

インサートモードのhjkl移動

"//////////////////////////////////////////////////////////
"// Neovim setting
"//////////////////////////////////////////////////////////

"----------------------------------------------------------
" Neovim's Python2 provider
"----------------------------------------------------------
let g:python_host_prog = '/usr/local/bin/python'

"----------------------------------------------------------
" General
"----------------------------------------------------------
set clipboard+=unnamedplus " use clipboard ( see : help clipboard )
set tabstop=4 shiftwidth=4 expandtab
set nowrap
set number
set noswapfile

"----------------------------------------------------------
" Seek
"----------------------------------------------------------
set wrapscan
set ignorecase
set smartcase
nnoremap <silent> <C-l> :nohlsearch<CR>

"----------------------------------------------------------
" Appearance
"----------------------------------------------------------
colorscheme birds-of-paradise

" English menu display
source $VIMRUNTIME/delmenu.vim
set    langmenu=none
source $VIMRUNTIME/menu.vim

if has("multi_lang")
    language en_gb
endif

"----------------------------------------------------------
" Char code
"----------------------------------------------------------
set encoding=utf-8
set fileencodings=utf-8,iso-2022-jp,euc-jp,sjis

"----------------------------------------------------------
" Key binding
"----------------------------------------------------------
" Tab indent, Tab unindent
inoremap <Tab>   <C-t>
inoremap <S-Tab> <C-d>
vnoremap <Tab>   0>>gv
vnoremap <S-Tab> 0<<gv

" hjkl in insert mode (see : https://github.com/neovim/neovim/wiki/FAQ#my-ctrl-h-mapping-doesnt-work )
inoremap <C-h> <Left>
inoremap <C-j> <Down>
inoremap <C-k> <Up>
inoremap <C-l> <Right>

How to use Ctrl-H by Neovim

see: https://github.com/neovim/neovim/wiki/FAQ#my-ctrl-h-mapping-doesnt-work

$ infocmp $TERM | sed 's/kbs=^[hH]/kbs=\\177/' > $TERM.ti
$ tic $TERM.ti
Remove all ads

Setting of Bash

Bash

.inputrc

bashの操作をviの操作に近づけます

// create .inputrc file
$ vim .inputrc

// in vim
set editing-mode vi
set show-all-if-ambiguous on
set completion-ignore-case on

set keymap vi-command
    "\C-p": history-search-backward
    "\C-n": history-search-forward

set keymap vi-insert
    "\C-p": history-search-backward
    "\C-n": history-search-forward
    "\C-h": backward-char
    "\C-l": forward-char

// check editing-mode
$ set -o | grep -E '(emacs|vi)'
emacs           off
privileged      off
vi                on

// check command
$ bind -p

.bashrc

promptの表示をgitbrunchを表示するようにします

#!/bin/bash

# Source global definitions
if [ -f /etc/bashrc ]; then
        . /etc/bashrc
fi

# http://qiita.com/caad1229/items/6d71d84933c8a87af0c4
function parse_git_branch {
    git branch --no-color 2> /dev/null | sed -e '/^[^*]/d' -e 's/* \(.*\)/ [\1]/'
}

function promps {
    local BLUE='\[\033[01;34m\]'
    local RED='\[\033[01;31m\]'
    local GREEN='\[\033[01;32m\]'
    local WHITE='\[\033[0;00m\]'
    local GRAY='\[\033[01;37m\]'
    PS1="${BLUE}\W${GREEN}\$(parse_git_branch)${BLUE}\$${WHITE} "
}

PROMPT_COMMAND='promps'
export CLICOLOR=1
export LSCOLORS=ExFxBxDxCxegedabagacad
export EDITOR=nvim

.bash_profile

その他のいろいろな設定

if [ -e ~/.bashrc ]; then
        . ~/.bashrc
fi

export LANG=ja_JP.UTF-8
export LESSCHARSET=utf-8
GREP_OPTIONS="--color=always"; export GREP_OPTIONS

# PATH( left first )
p=""
p=$p'/usr/local/bin'
p=$p':/usr/local/sbin'
p=$p':/usr/sbin'
p=$p':/usr/bin'
p=$p':/bin'
p=$p':/sbin'

export PATH=$p

# NeoVim
export XDG_CONFIG_HOME=$HOME/.config
alias vim='nvim'

# Git
eval "$(hub alias -s)"
alias gittree='git log --oneline --graph --all --format="%x09 %Cred%h %Cgreen%cd %Cblue%s %d"'
source /usr/local/etc/bash_completion.d/hub.bash_completion.sh

# mono
export PKG_CONFIG_PATH='/usr/local/lib/pkgconfig'
export AS="as -arch i386"
export CC="cc -arch i386 -framework CoreFoundation -lobjc -liconv"
export MONO_MANAGED_WATCHER=false
export MONO_IOMAP=all
export MONO_GAC_PREFIX="/usr/local"
unset USERNAME

# alias
alias rm='       rm -i'
alias loghttpd=' cd /var/log/httpd/$(date +%Y)/$(date +%m)/$(date +%d)/'
alias df='       df -h'
alias ll='       ls -la'
alias cd..='     cd ..'
alias tree='     tree -C'
alias lessc='lessc --clean-css'

location of files

上から順番に読み込みます
inpurtrcの読み込み場所はわかってません (^_^;;

/
├── etc
│   └── profile
└── Users/Kohei/
    ├── .inputrc       // ??? I don't know order .inputrc file.
    ├── .bash_login
    ├── .bash_profile
    ├── .bashrc
    └── .bash_logout 

Font

おこのみで

Mig 2M

Regular 13pt

Charactor Spacing: 0.85

Line Spacing: 0.95

Miguフォント : M+とIPAの合成フォント

Color Theme

おこのみで

BirdsOfParadise

github.com

Remove all ads

CSS for hatena blog

CSS

Summary

はてなブログ用のcssをつくる

less code

今回作成したコードです

github.com

CSSコードの作成手順

はてなブログ用のテンプレートをgit cloneする

$ git clone https://github.com/hatena/hatena-blog-themes/tree/master/boilerplate

boilierplate.lessをカスタマイズ

Hatena-Blog-Themes/
├── boilerplate
│   ├── LICENSE.md
│   ├── boilerplate.less  <----- this!!
│   ├── less
│   │   ├── _media-queries.less
│   │   ├── _mixin.less
│   │   ├── _normalize.less
│   │   └── _variable.less
│   └── readme.md
└── readme.md

less, less-plugin-clean-cssをインストール

$ npm install -g less
$ npm install -g less-plugin-clean-css

cssファイルをつくる

$ lessc --clean-css boilerplate.less abc.min.css

CSS custumize

01. web font    を指定
    
    font(global)  : Noto Sans Japanese 
    font(code tag): Source Code Pro

02. entry title のデザインを変更

03. head tag    のデザインを変更

04. code tag    で文字が折り返ししないように変更

05. img  tag    で写真をリサイズするように変更

07. blog title  をクリックしたら archive に行くように変更

08. blog titel下の@callmekoheiをクリックしたら about に行くように変更

common

// for hatena-blog responsive design
/* Responsive: yes */

// web font
@import url(http://fonts.googleapis.com/earlyaccess/notosansjapanese.css) ;
@import url(http://fonts.googleapis.com/css?family=Source+Code+Pro)       ;

html,
body {
    font-family      : 'Noto Sans Japanese', sans-serif ;
    color            : @text       ;
    background-color : @background ;
}

entry-title

.entry-title {
    font-weight      : bold           ;
    font-size        : 20px           ;
    padding          : 15px 10px      ;
    background-color : #eee           ;
    border-bottom    : 4px solid #ccc ;
}

head tag

.entry-content {

    .verticalBar {
        position         : absolute ;
        left             : 0        ;
        content          : ''       ;
        width            : 3px      ;
        height           : 90%      ;
        border-radius    : 1.5px    ;
        background-color : #3498db  ;
    }

    h1,h2,h3,h4,h5,h6 {
        margin           : 1.3em 0 0.8em 0 ;
        line-height      : 1.5             ;
        margin-top       : 50px            ;
        padding          : 4px 10px        ;
        position         : relative        ;
        &::before {
            .verticalBar ;
        }
    }

    h1 { font-size : 150% ; }
    h2 { font-size : 140% ; }
    h3 { font-size : 130% ; }
    h4 { font-size : 120% ; }
    h5 { font-size : 110% ; }
    h6 { font-size : 100% ; }
}

pre tag, code tag

pre {
    border           : 1px solid @border ;
    margin           : 0 0 10px          ;
    padding          : 20px              ;
    white-space      : pre               ;
    word-wrap        : normal            ;
    background-color : @bg-light         ;
    font-size        : 80%               ;
    font-family      : 'Source Code Pro', sans-serif ;
}

pre > code {}

img tag

// import media queries
@import "less/_media-queries.less";

@media (min-width: 480px)  {
    .entry-content {
        img {
            display    : block ;
            max-width  : 480px ;
            max-height : 350px ;
            width      : auto  ;
            height     : auto  ;
        } 
    }
}

@media (max-width: 480px) {
    .entry-content {
        img {
            display    : block ;
            max-height : 50%   ;
        } 
    }
}

Head Element

設定/詳細設定/検索エンジン最適化/headに要素を追加に下記のコードを入力

<meta name="viewport" content="width=device-width">

<script
    src         = "https://code.jquery.com/jquery-3.1.1.slim.min.js"
    integrity   = "sha256-/SIrNqv8h6QGKDuNoLGA4iret+kyesCkHGzVUUV0shc="
    crossorigin = "anonymous">
</script>

<script type="text/javascript">
$(document).ready(function(){
    $("#blog-description").append("<a href='http://callmekohei00.hatenablog.com/about'>@callmekohei</a>");
    $('#title a').attr("href","http://callmekohei00.hatenablog.com/archive")
});
</script>

Reference

はてなブログカスタマイズ手引き

less

Source Code Pro

Nota sans Japanese

jQuery CDN






h1 tag

いろはにほへと ちりぬるを わかよたれそ つねならむ うゐのおくやま けふこえて あさきゆめみし ゑひもせす 色はにほへど 散りぬるを 我が世たれぞ 常ならむ 有為の奥山 今日越えて 浅き夢見じ 酔ひもせず

h2 tag

いろはにほへと ちりぬるを わかよたれそ つねならむ うゐのおくやま けふこえて あさきゆめみし ゑひもせす 色はにほへど 散りぬるを 我が世たれぞ 常ならむ 有為の奥山 今日越えて 浅き夢見じ 酔ひもせず

h3 tag

いろはにほへと ちりぬるを わかよたれそ つねならむ うゐのおくやま けふこえて あさきゆめみし ゑひもせす 色はにほへど 散りぬるを 我が世たれぞ 常ならむ 有為の奥山 今日越えて 浅き夢見じ 酔ひもせず

h4 tag

いろはにほへと ちりぬるを わかよたれそ つねならむ うゐのおくやま けふこえて あさきゆめみし ゑひもせす 色はにほへど 散りぬるを 我が世たれぞ 常ならむ 有為の奥山 今日越えて 浅き夢見じ 酔ひもせず

h5 tag

いろはにほへと ちりぬるを わかよたれそ つねならむ うゐのおくやま けふこえて あさきゆめみし ゑひもせす 色はにほへど 散りぬるを 我が世たれぞ 常ならむ 有為の奥山 今日越えて 浅き夢見じ 酔ひもせず

h6 tag

いろはにほへと ちりぬるを わかよたれそ つねならむ うゐのおくやま けふこえて あさきゆめみし ゑひもせす 色はにほへど 散りぬるを 我が世たれぞ 常ならむ 有為の奥山 今日越えて 浅き夢見じ 酔ひもせず

pre > code tag

いろはにほへと ちりぬるを わかよたれそ つねならむ うゐのおくやま けふこえて あさきゆめみし ゑひもせす 色はにほへど 散りぬるを 我が世たれぞ 常ならむ 有為の奥山 今日越えて 浅き夢見じ 酔ひもせず

img tag

demensions: 932px × 614px (scaled to 480px × 316px)

f:id:callmekohei00:20161231123215p:plain






Remove all ads

VBA Exercise

VBA

Summary

VBAの問題をつくってみました!

これができたら中級者?

Exercise01

下記データーの累計をもとめてください

300
800
100

結果

300
1100
1200

Exercise02

リストの最後尾を取得してください

A B C D E F
1 A1 B1 C1 D1 F1
2 A2
3 A3
4
5 A5

結果

 5  'LastRow
 3  'LastRow(xlDown)
 4  'LastCol
 6  'LastCol(xlRight)

Exercise03

転記の欄にがついてるデーターを取得してください

転記 会社名 郵便番号 住所1 住所2 住所3
油須原郵便局 824-0499 福岡県 田川郡赤村 赤4657-5
甘木郵便局 838-8799 福岡県 朝倉市 甘木948
杷木郵便局 838-1599 福岡県 朝倉市 杷木池田542-1

結果

Array("甘木郵便局")
Array("838-8799")
Array("福岡県")
Array("朝倉市")
Array("甘木948")

Exercise04

得意先コード(TOKU_CD)0001の消費税の合計を求めてください
消費税区分SZEI_KBN21 = 0.05, 2 = 0.08, 3 = 0.10とします
売上区分URI_KBN1, Cは黒伝、それ以外は赤伝とします

TOKU_CD DEN_NO GYO_NO URI_KBN SYHN_CD HINMEI SUU_RYO TANKA SZEI_KBN2
0001 20150115 01 1 001 apple 10 300 2
0001 20150115 01 1 002 banana 16 250 2
0001 20150116 01 1 001 apple 20 300 2
0001 20150116 02 1 002 banana 1 250 2
0001 20150116 03 1 003 tomato 19 150 2
0002 20150117 01 B 001 apple 3 300 1
0002 20150117 02 B 002 banana 5 250 1
0003 20150118 01 1 001 apple 7 300 3
0003 20150118 02 1 002 banana 24 250 3
0003 20150118 03 1 003 tomato 11 150 3

結果

1288



Hints and Answers

解答の一例です

下記のヒントと解答にこだわる必要はないです

コードにはAriawasekoffeeVBAを使ってます

Ariawase

koffeeVBA

Hint2

RangeオブジェクトのEndメソッドを使います

Hint3, Hint4

データーをテーブルと見立ててSQLで処理します
まずスタイルですが、下記のように記入します

Private Function SQL() As String
    Dim str As String:  str = ""
    str = str & " SELECT  xxx "
    str = str & "   FROM  xxx "
    str = str & "  WHERE  xxx "
    str = str & "  GROUP  BY xxx "
    str = str & "  ORDER  BY xxx "
    SQL = str
End Function

テーブルに関しての別名は AS でつけます

FROM  [test$] AS T

項目(タイトル行)やテーブル名は角カッコ【】をつけます

 [T.SZEI_KBN2] 

分岐に関しては SWITCH もしくは IIF をつかいます

SWITCH (
            condition = a, a
          , condition = b, b
          , condition = c, c
          , true, null
       )
       
IIF( condition , a (when true) , b (when false))

テーブルの指定は [worksheet name $] という書き方になります

FROM  [test$]  '<---- ワークシート名が test

テーブルの範囲指定は [worksheet name $A1:F500] という書き方になります

FROM  [test$A1:F500]  '<---- ワークシート名が test 範囲が A1:F500

Answer1

Sub Sample()
    Dim arr As Variant: arr = Array(300, 800, 100)
    Debug.Print Dump(StepTotal(arr))
End Sub

Answer2

Sub Sample()
    Dim sh As Worksheet: Set sh = ThisWorkbook.Worksheets("test")
    Debug.Print LastRow(sh.Range("A1"))
    Debug.Print LastRow(sh.Range("A1"), True)
    Debug.Print LastCol(sh.Range("A1"))
    Debug.Print LastCol(sh.Range("A1"), True)
End Sub

Public Function LastRow(ByVal R As Range, Optional toDonw As Boolean = False) As Long
    Select Case toDonw
        Case True:  LastRow = R.End(xlDown).row
        Case False: LastRow = R.Worksheet.Cells(R.Worksheet.Rows.Count, R.Column).End(xlUp).row
    End Select
End Function

Public Function LastCol(ByVal R As Range, Optional toRight As Boolean = False) As Long
    Select Case toRight
        Case True:  LastCol = R.End(xlToRight).Column
        Case False: LastCol = R.Worksheet.Cells(R.row, R.Worksheet.Columns.Count).End(xlToLeft).Column
    End Select
End Function

Answer3

Sub Sample()

    Dim JagArr As Variant: JagArr = FetchSh(sql())

    Debug.Print Dump(JagArr(1))
    Debug.Print Dump(JagArr(2))
    Debug.Print Dump(JagArr(3))
    Debug.Print Dump(JagArr(4))
    Debug.Print Dump(JagArr(5))

End Sub

Private Function sql() As String
    Dim str As String
    str = ""
    str = str & " SELECT  * "
    str = str & "   FROM  [test$] "
    str = str & "  WHERE  [転記] = '●'"
    sql = str
End Function

Answer4

Sub Sample()
    Debug.Print Dump(FetchSh(SyohiZei_SQL("0001"))(0))
End Sub

Private Function SyohiZei_SQL(ByVal TokuCode As String) As String
    Dim str As String:  str = ""

     str = str & " SELECT "
     str = str & "   SUM( "
     str = str & "     IIF( [T.URI_KBN] IN ('1', 'C') "
     str = str & "          ,SWITCH( "
     str = str & "             [T.SZEI_KBN2] = '1' , [T.TANKA] * [T.SUU_RYO] * 0.05 "
     str = str & "            ,[T.SZEI_KBN2] = '2' , [T.TANKA] * [T.SUU_RYO] * 0.08 "
     str = str & "            ,[T.SZEI_KBN2] = '3' , [T.TANKA] * [T.SUU_RYO] * 0.10 "
     str = str & "            ,TRUE , NULL "
     str = str & "          ) "
     str = str & "          ,SWITCH( "
     str = str & "             [T.SZEI_KBN2] = '1' , [T.TANKA] * [T.SUU_RYO] * -0.05 "
     str = str & "            ,[T.SZEI_KBN2] = '2' , [T.TANKA] * [T.SUU_RYO] * -0.08 "
     str = str & "            ,[T.SZEI_KBN2] = '3' , [T.TANKA] * [T.SUU_RYO] * -0.10 "
     str = str & "            ,TRUE , NULL "
     str = str & "          ) "
     str = str & "        ) "
     str = str & "      ) "

     str = str & " FROM  [test$] AS T "
     str = str & "WHERE  [TOKU_CD] = '" & TokuCode & "'"

     SyohiZei_SQL = str
End Function

Public Function FetchSh(ByVal sql As String, Optional ByVal fPath As String = "", Optional ByVal isHeader As Boolean = False) As Variant

    Select Case fPath
        Case Is = "": fPath = ThisWorkbook.Path & "\" & ThisWorkbook.Name
        Case Else:    fPath = fPath
    End Select

    Dim ado As New AdoEx:   ado.Init adExcel, fPath
    Select Case isHeader
        Case False: FetchSh = ado.JagArrAdoRS(sql)
        Case True:  FetchSh = Array(ado.JagArrAdoRS(sql), ado.JagArrAdoRsHeader(sql))
    End Select

    Set ado = Nothing
End Function






Remove all ads

VBA Ariawase

VBA

Summary

  1. Ariawase is cool VBA library ( by @igeta )
  2. Example of core functions

Ariawase.Core

Core
├── Collections
│   ├── ArrConcat
│   ├── ArrFlatten
│   ├── ArrIndexOf
│   ├── ArrLen
│   ├── ArrRank
│   ├── ArrSlice
│   ├── ArrUniq
│   ├── Pop
│   ├── Unshift
│   ├── Arr2DToJagArr
│   ├── JagArrToArr2D
│   ├── ArrToClct
│   ├── ClctToArr
│   ├── CreateDictionary
│   ├── ArrCompare
│   ├── ArrEquals
│   └── BitFlag
│
├── Strings
│   ├── LeftA
│   ├── RightA
│   ├── SepA
│   ├── StringWidth
│   ├── ToStr
│   ├── CreateRegExp
│   ├── ReMatch
│   ├── ReMatchGlobal
│   ├── ReReplace
│   └── ReTrim
│
├── Numeric
│   ├── Around
│   ├── IncrPre
│   ├── IncrPst
│   ├── IsInt
│   ├── Max
│   └── Min
│
├── Date
│   ├── BeginOfMonth
│   ├── EndOfMonth
│   ├── BeginOfWeek
│   └── EndOfWeek
│
├── Display
│   ├── Formats
│   └── Dump
│
├── Equality
│   ├── Eq
│   ├── Equals
│   └── Compare
│
├── Eval
│   ├── EvalJS
│   └── EvalVBS
│
└── Others
    ├── CreateStdRegProv
    └── Init

Collections

Sub test()
    
    '2つの配列を一つの配列にします
    Debug.Print Dump(ArrConcat(Array(1, 2, 3), Array(10, 20, 30)))
    'Array(1%, 2%, 3%, 10%, 20%, 30%)
    
    'ネストを一段解除した配列にします
    Debug.Print Dump(ArrFlatten(Array(Array(1, 2, 3))))
    'Array(1%, 2%, 3%)
    
    '該当する文字(数字)の配列の場所を返します(なければ -1)
    Debug.Print Dump(ArrIndexOf(Array("A", "B", "C"), "B"))
    '1&
    
    '配列の長さを返します
    Debug.Print Dump(ArrLen(Array(1, 2, 3)))
    '3&
    
    '配列の次元を返します
    Debug.Print Dump(ArrRank(Array(1, 2, 3)))
    '1%
    
    '配列をスライスします
    Debug.Print Dump(ArrSlice(Array(1, 2, 3, 4, 5), 1, 3))
    'Array(2%, 3%, 4%)
    
    '配列の重複してる要素をまとめます
    Debug.Print Dump(ArrUniq(Array(1, 1, 1, 2, 2, 2)))
    'Array(1%, 2%)
    
    'コレクションの最後の要素をとりだします
    Debug.Print Dump(Pop(ArrToClct(Array(1, 2, 3))))
    '3%
    
    'コレクションの最初の要素を取り出します
    Debug.Print Dump(Unshift(ArrToClct(Array(1, 2, 3))))
    '1%

    'ジャグ配列をつくります
    Dim jagArray: jagArray = Array(Array("A"), Array("B"))
    'jagArray(0)(0) = "A"
    'jagArray(1)(0) = "B"
    
    'ジャグ配列から2次元配列をつくります
    Dim arr2D: arr2D = JagArrToArr2D(jagArray)
    'arr2D(0,0) = "A"
    'arr2D(1,0) = "B"
    
    '2次元配列からジャグ配列をつくります
    Dim jArray: jArray = Arr2DToJagArr(arr2D)
    'jArray(0)(0) = "A"
    'jArray(1)(0) = "B"

    '配列からコレクションをつくります
    Dim clct: Set clct = ArrToClct(Array(1, 2, 3))
    'Item1 = 1
    'Item2 = 2
    'Item3 = 3
    
    'コレクションから配列をつくります
    Debug.Print Dump(ClctToArr(clct))
    'Array(1%, 2%, 3%)
    
    '(key,value)という指定でディクショナリーをつくります
    Dim dict: Set dict = CreateDictionary("One", 1, "Two", 2, "Three", 3)
    'Item 1 = ("One, 1)
    'Item 2 = ("Two, 2)
    'Item 3 = ("Three, 3)

    'ビット演算をおこなう
    Debug.Print Dump(BitFlag(False, True))
    '1&
    
End Sub

Strings

Sub test()
    
    Dim str: str = "本日は晴天なり!"
    
    '文字列を左から指定の文字数で切り出します
    Debug.Print Dump(LeftA(str, 5))
    '"本日"
    
    '文字列を右から指定の文字数で切り出します
    Debug.Print Dump(RightA(str, 5))
    '"り!"
    
    '文字列を指定の文字数で2つに分け配列で返します
    Debug.Print Dump(SepA(str, 5))
    'Array("本日", "は晴天なり!")
    
    '文字列の長さをかえします
    Debug.Print Dump(StringWidth(str))
    '16$
    
    '文字列にします
    Debug.Print Dump(ToStr(99))
    '"99"
    
    'オブジェクトの場合はオブジェクト名称をかえします
    Debug.Print Dump(ToStr(CreateDictionary("One", 1)))
    '"Dictionary"
    
    Dim str2: str2 = "本日は晴天なり!晴天なり!"
    
    '正規表現オブジェクトを参照なしにつくります
    Dim reg: Set reg = CreateRegExp("晴天")
    Debug.Print reg.test(str2)
    'True
    
    '正規表現を使用します
    
    Debug.Print Dump(ReMatch(str2, "晴天"))
    'Array("晴天")
    
    Debug.Print Dump(ReMatcheGlobal(str2, "晴天"))
    'Array(Array("晴天"), Array("晴天"))
    
    Debug.Print Dump(ReReplace(str2, "晴天", "雨天"))
    '"本日は雨天なり!晴天なり!"
    
    Debug.Print Dump(ReTrim(str2, "晴天.*"))
    '"本日は"
    
End Sub

Numeric

Sub test()
    
    '数字を丸めます
    Debug.Print Dump(ARound(1.2345, 1))
    'CDec(1.2)
    
    'よくわかってません。。。。
    Debug.Print Dump(IncrPre(1)) '2%
    Debug.Print Dump(IncrPst(1)) '1%
    
    '数字の場合trueをかえします
    Debug.Print Dump(IsInt(1)) 'true

    '最大値・最小値をかえします
    Debug.Print Dump(Max(1, 2, 3)) '3%
    Debug.Print Dump(Min(1, 2, 3)) '1%

End Sub

Date

Sub test()

    '月・週の初末をかえします

    Dim day As Date: day = #10/24/2016#
    
    Debug.Print Dump(BeginOfMonth(day))
    '#10/1/2016#
    
    Debug.Print Dump(EndOfMonth(day))
    '#10/31/2016#
    
    Debug.Print Dump(BeginOfWeek(day))
    '#10/23/2016#
    
    Debug.Print Dump(EndOfWeek(day))
    '#10/29/2016#
    
End Sub

Display

Sub test()
    
    '指定したフォーマットで出力します
    Debug.Print Dump(Formats("{0:MM/dd}", #10/24/2016#))
    '"10/24"
    
    'Debug.Printで出力できない分も出力します
    Debug.Print Dump(Array(1, 2, 3))
    'Array(1%, 2%, 3%)
    
End Sub

Equality

    'よくわかってません。。。。

Eval

    'よくわかってません。。。。

Others

    'よくわかってません。。。。

Ariawaseはこちらから

github.com

余談

Ariawase Coreモジュールの関数一覧の作り方

$ cat core.bas | grep "Public Function" | awk -F' ' '{print $3}' | sed -e 's/(.*//g'






Remove all ads

VBA LINEST

VBA

Summary

LINEST関数を2次以上でもつかう

サンプルコード

Sub SampleLinEst2()

    'Linest againt 'y = ax + b
    DP LinEst2(Array(10, 20, 30), Array(1, 2, 3)), Array("a", "b"), Array("m", "stddev", "R2", "F/df", "SS"), , 5
    
    '     |m    |stdde|R2   |F/df |SS   |
    '------------------------------------
    'a    |   10|    0|    1|Error|  200|
    'b    |    0|    0|    0|    1|    0|

    
    
    'Linest againt 'y = ax^2 + bx +c
    DP LinEst2(Array(10, 20, 30), PowerScan(Array(1, 2, 3), 2)), Array("a", "b", "c"), Array("m", "stddev", "R2", "F/df", "SS"), , 5

    '     |m    |stdde|R2   |F/df |SS   |
    '------------------------------------
    'a    |    0|    0|    1|Error|  200|
    'b    |   10|    0|    0|    0|    0|
    'c    |    0|    0|Error|Error|Error|


    'Linest againt 'y = ax^3 + bx^2 +cx +d
    DP LinEst2(Array(1, 2, 3), PowerScan(Array(1, 2, 3), 3)), Array("a", "b", "c", "d"), Array("m", "stddev", "R2", "F/df", "SS"), , 5

    '     |m    |stdde|R2   |F/df |SS   |
    '------------------------------------
    'a    |-0.09|    0|    1|Error|    2|
    'b    |0.545|    0|    0|    0|    0|
    'c    |    0|    0|Error|Error|Error|
    'd    |0.545|    0|Error|Error|Error|
    
End Sub

ちょっとした解説

ポイントと思っているところは、xのところに2次以上の場合はPowerScanで渡してるところです。

Sub SamplePowerScan()

    Debug.Print Dump(PowerScan(2, 3))
    'Array(Array(2#), Array(4#), Array(8#))
    
    Debug.Print Dump(PowerScan(Array(1, 2, 3), 3))
    'Array(Array(1#, 2#, 3#), Array(1#, 4#, 9#), Array(1#, 8#, 27#))

    
End Sub

サポート関数

Public Function LinEst2(ByVal y As Variant, ByVal x As Variant) As Variant
    LinEst2 = Arr2DToJagArr(Application.WorksheetFunction.LinEst(y, x, True, True))
End Function

Public Function PowerScan(ByVal x As Variant, ByVal n As Long) As Variant
    Dim wf As WorksheetFunction: Set wf = Application.WorksheetFunction
    PowerScan = Arr2DToJagArr(wf.Transpose(Application.Power(wf.Transpose(x), ArrRange(1, n))))
End Function

Ariawaseが必要

github.com






Remove all ads