心の旅 blog

心だけでも旅に出れる

テレビはアプリであるべきか?

最近、またテレビブームが来そうな兆しがある。

AppleGoogleAmazonなどなど、いろんなメーカーがこぞってテレビに接続できるデバイスを発表している。

また、動画配信サービスが日本でも充実してきている。netflix、Hulu、Amazon、日本のサービスもいろいろとでてきた。

これは、テレビメーカーも嬉しいところだろう。リモコンにnetflixボタンが付く日もそう長くはないのかもしれない。

 

テレビは、まさに今進化するべきところにあると思う。もう、テレビが登場してからずいぶんと変わっていない部分もある。見たい時に、好きな番組が見れないし、CMもあるし、地域によっても変わってくる。

テレビがアプリになることで、そういうのを全部変えてくれそうな気がしている。ていうか変えて欲しい。ネットワークとか、いろいろ問題が出てくるのだろうが、基本的にはマイナスことはないと思っている。まぁ、大人の事情みたいなことがいろいろあるんだろうが、一部の人しか得しない構造より、みんなが楽しめるエンターテイメントを作っていって欲しいものだ。

 

今後どういう方向になっていくのか楽しみだ。

 

 

【いろんな言語で書いてみた】文字列内に出現するすべての空白文字を”%20”で置き換える関数

今回は、与えられた文字列に空白があった場合は、その空白部分を「%20」に置換する関数を作成する。 与えられた文字列の中で、特定の文字を置換する処理はよくあることだと思うが、じっさいに自分で書いてみるとどうなるのだろうか。

PHP

PHPだと文字列の長さを取得して、for文で1文字ずつ取得その1文字が空白がどうか調査する。

<?php

function replaceSpaces($str)
{
  $length = mb_strlen($str, "UTF-8");
  $rs = "";
  for($i=0; $i<$length; $i++) {
    $val = mb_substr($str, $i, 1, "UTF-8");
    if($val == " ") {
      $rs .= "%20";
    } else {
      $rs .= $val;
    }
  }
  return $rs;
}

$str = "a b cd e";
var_dump(replaceSpaces($str));

JavaScript

  • JSの場合だと、splitで配列にできるので、その配列を長さ分for文で回し、空白判定する。
function replaceSpaces(str) {

  var strs = str.split("");

  var i, rs="";
  for(i=0; i<strs.length; i++) {
    if(strs[i] == " ") {
      rs += "%20";
    } else {
      rs += strs[i];
    }
  }

  return rs;
}


var str = "a b cd e"
console.log(replaceSpaces(str));

Ruby

# coding: utf-8

def replace_spaces(str)
  rs = ""
  str.chars { |s|
    if s == " " then
      rs += "%20"
    else
      rs += s
    end
  }
  return rs
end

str = "a b cde "
puts replace_spaces(str)

Python

#!/usr/bin/env python
# -*- coding: utf-8 -*-

def replace_spaces(str):
  rs = ""
  for num in range(len(str)):
    if str[num] == " ":
      rs += "%20"
    else:
      rs += str[num]

  return rs

if __name__ == "__main__":
  str = "ab c d e "
  print replace_spaces(str)

Go

ackage main

import "fmt"

func replaceSpaces(str string) string {
>-var rs string = ""
>-for _, s := range str {
>->-if (string(s)) == " " {
>->->-rs += "%20"
>->-} else {
>->->-rs += string(s)
>->-}
>-}
>-return rs
}

func main() {
>-var str string = "a b c d e f"
>-fmt.Println(replaceSpaces(str))
}

Elixir

#
# 文字列の中にスペースがあれば、「%20」に置き換える
#

defmodule ReplaceSpaces do

  def main(str) do
    length = String.length(str)
    replace(str, 0, length, [])
  end

  defp replace(str, count, length, replace_strs) do
    if count < length do
      val = String.at(str, count)
      if val == " " do
        val = "%20"
      end
      replace(str, count+1, length, [replace_strs|val])
    else
      replace_strs
    end
  end
end


str = "a  bcd ef g "
IO.puts String.length(str)
IO.puts str
IO.puts ReplaceSpaces.main(str)

ALLANDのターバン

そろそろ寒くなってくる季節、首周りとか暖かくてカッイイやつないかなぁと思って時、なにやら良さげなモノを偶然発見しました!
ALLANDというところが出しているターバン。

f:id:nyokonyoko999:20151005190029j:image

ターバンとしても使えのだが、いろんな使い方ができて、ネックウォーマーにもなるみたい。
しかも、デザインの種類がめちゃくちゃ多い。シンプルなものから、チェック柄、ネイティブアメリカンっぽいのまで。
1つ、1900円だったので、思いきって2つ選んでみました。
他にもこれほしーって柄がたくさんあったので、来年とかもまた違う柄で挑戦したいと思った。

皆さんも、今年の首周りとかのオシャレにいかがでしょうか?

ゆげ塾の構造がわかる世界史

世界史の勉強でもしようと、この本を買ってみた。

Amazonでも評価が高かったし、Podcastで人気の「世界一周!チラ見の世界史」でも紹介されていたので、読んでみた。

f:id:nyokonyoko999:20150930205201j:image

 

いきなり、坂本龍馬南北戦争の関わりからはじまり、なるほどそういうことか!と、一見関係なさそうな話題から始まり歴史を遡っていくという展開。

とてもわかりやすく、しかも、飽きないように面白く書いてあった。

もちろん、まとめまくっているので、完全な歴史とは程遠いが、それでも要点は付いていると思うので、なるほどー、そういうことかーと思うことがあって、とてもおすすめできる本だと思う。

 

歴史を知るというのはとても大事なことだと思う。なんで今争いが生まれているのか?とか、文化の違いなど、それぞれに理由があるのだということ。

歴史とか、ぜんぜん好きではなかったのに、年をとると興味がでてきますね(笑)

【いろんな言語で書いてみた】パッケージ管理

それぞれの言語で、もちろんいろんな人が作ったライブラリ等を使いたい場合がある。その時に、どうやってそのソースを持ってきて、どうやって管理するか?という問題がある。

もちろん、自分でダウンロードして、適所に置くでもいいのだが、一人で開発する場合、これでもいいかもしれない。

でもやっぱり、複数人で開発するとなるとパッケージ管理が必要になってくる。今回は、各言語ではどのようなパッケージ管理の仕組みが用意されているのか調べていこう。

PHP

  • composer
    PHPではpearが有名だが、最近はcomposerが主流になっている気がする。
    pearだとOS単位でインストールしないといけないのだが、composerだと、プロジェクト単位でインストールできるのがいいところ。

  • composerダウンロード

$ curl -sS https://getcomposer.org/installer | php
  • composer.pharがダウンロードさせる。こいつを使ってパッケージ管理していく。

  • composer.jsonにインストールしたいパッケージを記述

{
    "require": {
        "mockery/mockery": "*",
        "facebook/php-sdk": "v3.2.3"
    }
}

 

  • composer.pharを使ってインストール
$ php ./composer.phar install

上記のコマンドでライブラリがダウンロードされる。
もう一つは、「composer.lock」というファイルが作成される。
 

  • composer.lockファイル インストールしたときに、パッケージの実際のバージョンのリストをこのファイルに書き込みます。
    これでプロジェクトを特定バージョンにロックすることができるようになり、新しいバージョンがあってもアップデートしないようになる。  

  • では、新しいバージョンにアップデートしたい場合はどうするか?

$ php composer.phar update

上記の「update」コマンドでjsonファイルに書いてある最新のバージョンにアップデートし、lockファイルを更新してくれる  

  • 最後にダウンロードしたライブラリをオートロードできる
<?php
require 'vendor/autoload.php';

  * composerも、jsonの書き方とか、様々な書き方ができるので、公式ページ等で調べていただけたらと思う。

JavaScript

npm

  • node.jsのパッケージを管理するためのツール
  • npmのインストールは、最近のnode.jsをインストールすれば一緒に入ります

Bower

  • フロントエンド用のパッケージを管理するためのツール
  • Bowerのインストールはnpmから
$ npm install bower -g

Ruby

Bundleとは

  • Ruby on Railsをインストールすれば、Gemfileというファイルが作成される
  • このGemfileに必要なパッケージを記述していく。これを周りに配布することで同じ環境を構築することができる。
  • bundleは、この仕組を提供してくれるもの。Gemfileに記載したパッケージをインストールしてくれる。
$ bundle install

 

  • インストールされたらGemfile.lockが生成される

Python

  • pipというパッケージ管理ツールがある
$ pip install --user virtualenv

Go

  • ソースファイルに直接、パスを記述する
import (
        "os"
        "github.com/codegangsta/cli"
)
  • go get コマンド
go get github.com/kr/goven

Elixir

  • Hex というパッケージ管理ツールがある。mixコマンドインストールする
$ mix archive.install https://github.com/phoenixframework/phoenix/releases/download/v0.16.1/phoenix_new-0.16.1.ez

【いろんな言語で書いてみた】与えられた2つの文字列がアナグラムであるか判定する関数

PHP

<?php

/**
 * アナグラム判定(ただし、半角英数字のみ)
 *
 * @param string $str1
 * @param string $str2
 * @return boolean
 */
function isAnagram($str1, $str2)
{
  $strs1 = _sort($str1);
  $strs2 = _sort($str2);

  if($strs1 !== $strs2) {
    return false;
  }

  return true;
}

/**
 * 文字列の中のスペースを除去して、aから順にソートする
 * @param string $str
 * @return array
 */
function _sort($str)
{
  $str = str_replace(" ", "", trim($str));
  $strs = str_split($str);
  $strs = array_filter($strs);
  sort($strs);
  return $strs;
}

$str1 = "anagrams";
$str2 = "ars magna";

var_dump(isAnagram($str1, $str2));

JavaScript

/**
 * アナグラム判定
 */

/**
 * Anagramクラス
 *
 * @param [string] str1
 * @param [string] str2
 */
Anagram = function(str1, str2) {
  this.str1 = str1;
  this.str2 = str2;
}

/**
 * アナグラムかどうか判定
 *
 * @return [bool]
 */
Anagram.prototype.isAnagram = function() {

  strs1 = this._sort(this.str1);
  strs2 = this._sort(this.str2);

  if(strs1.toString() != strs2.toString()) {
    return false;
  }

  return true;
}

/**
 * 文字列を配列にしてソート
 * @param [string] str
 * @return [array]
 */
Anagram.prototype._sort = function(str) {
  return str.trim().replace(" ", "").split("").sort();
}


var str1 = "anagrams";
var str2 = "ars magna";
var anagram = new Anagram(str1, str2);
console.log(anagram.isAnagram());

Ruby

# coding: utf-8
#
# 与えられた2つの文字列がAnagramかどうか判定する
#

# 与えられた2つの文字列がAnagramかどうか関数(ただし英数字のみ しかも小文字)
# @param [string] str1 文字
# @param [string] str2 文字
# @return [bool]
def is_anagram(str1, str2)

  strs1 = _sort(str1)
  strs2 = _sort(str2)

  if strs1 != strs2
    return false
  end

  return true
end

# 文字列を配列にし、aから順にソートして返す
# @desc timrして空白除去して、配列にして、ソート
# @param [string] str
# @return [array]
def _sort(str)
  return str.strip.delete(" ").split("").sort
end

str1 = "anagrams"
str2 = "ars magna"
puts is_anagram(str1, str2)

Python

#!/usr/bin/env python
# -*- coding: utf-8 -*-

def is_anagram(str1, str2):

  strs1 = _sort(str1)
  strs2 = _sort(str2)

  if strs1 != strs2:
    return False

  return True

def _sort(str):
  str = str.strip().replace(' ', '')
  strs = list(str)
  strs.sort()
  return strs

if __name__ == "__main__":
  str1 = "anagrams"
  str2 = "ars magna"
  print is_anagram(str1, str2)

Go

package main

import "fmt"
import "strings"
import "sort"
import "reflect"

func _Sort(str string) []string {

>-str = strings.Trim(str, " ")
>-str = strings.Replace(str, " ", "", -1)

>-strs := strings.Split(str, "")
>-sort.Strings(strs)

>-return strs
}

func IsAnagram(str1 string, str2 string) bool {

>-strs1 := _Sort(str1)
>-strs2 := _Sort(str2)

>-if reflect.DeepEqual(strs1, strs2) == false {
>->-return false
>-}

>-return true
}

func main() {
>-var str1 string = "anagrams"
>-var str2 string = "ars magna"
>-// 文字列を逆にする
>-fmt.Println(IsAnagram(str1, str2))
}

Elixir

#
# 2つの文字がアナグラムかどうか判定する
#

defmodule IsAnagram do
  def main(str1, str2) do
    strs1 = _sort(str1)
    strs2 = _sort(str2)

    if strs1 != strs2 do
      false
    else
      true
    end
  end

  defp _sort(str) do
    str = String.strip(str)
    str = String.replace(str, " ", "")
    strs = String.split(str, "")
    strs = Enum.sort(strs)
    strs
  end
end


str1 = "aanagrams"
str2 = "ars magna"
IO.puts IsAnagram.main(str1, str2)

月を撮影してみた

十五夜ということもあり、せっかく子供を撮るためにかった、良いカメラで月を撮影しようと思い撮ってみた。

今までコンデジ使ったことない僕が、デジタル一眼を購入し、子供ばっかとっているのだが、月を撮影してみて、改めてビビりました。


f:id:nyokonyoko999:20150928172044j:image

こんなに綺麗に撮影できるとは、、

コンデジとか、ましてやスマフォなんかではなかなか撮影できないだろうが、素人の僕でも簡単に撮ることができた。。

 

カメラで思い出を残すことは大事だと思うけど、綺麗に撮るってことはあんまりこだわってなかったので、これからは、カメラにもこっていきたいなぁーと思った。