Code Log

プログラミングの勉強メモを残していきます。

Chromeのアドレスバーの検索結果をとにかく英語にする方法


右上の設定ボタンから設定画面に移動します。

それから、「検索エンジンの管理」をクリック。

で、その他の「検索エンジン」の一覧のところにある「追加」をクリック。

検索エンジン:google_en
キーワード:google_en
のように入れて、

URLに以下をコピペして「追加」を押します。

https://www.google.com/search?q=%s&{google:RLZ}{google:originalQueryForSuggestion}{google:assistedQueryStats}{google:searchFieldtrialParameter}{google:iOSSearchLanguage}{google:searchClient}{google:sourceId}{google:instantExtendedEnabledParameter}{google:contextualSearchVersion}ie={inputEncoding}


んで、追加された検索エンジンの右側の縦丸3つのボタンを押して、「デフォルトに設定」

これでアドレスバーから検索した結果はだいたい英語になります。
日本語のサイトを探したいときは、日本語を入れればけっこう出てきます。

「~とは」みたいな。

NW.jsでhello worldアプリを作ってみる


NW.jsはHTML、CSS、JavaScriptでデスクトップアプリケーションを作るためのフレームワークです。
2011年にRoger Wangによって作られました。

RogerはNode.jsとChromiumを融合させる試みの中で、単にHTMLやJavaScriptを読み込むだけではなく、JavaScript APIを使ってOSのリソースにアクセスする方法を考えました。

これは従来のウェブアプリケーションではできなかったことです。

それでは、NW.jsのサンプルを作ってみましょう。

まずはNW.jsをインストールします。

npm install -g nw

次に作業ディレクトリを作り、package.jsonを置きます。


package.jsonはこんな感じ。

{
	"name": "hello-world-nwjs",
	"main": "index.html",
	"version": "1.0,0"
}

package.jsonと同じディレクトリでindex.htmlを作りましょう。

<html>
  <head>
  	<title>hello world</title>
  	<style>
	  	body {
	  		background-image: linear-gradient(45deg, #EAD790 0%, #EF8C53 100%);
	  		text-align: center;
	  	}

	  	button {
	  		background: rgba(0,0,0,0.40);
	  		box-shadow: 0px 0px 4px 0px rgba(0,0,0,0.50);
	  		border-radius: 8px;
	  		color: white;
	  		padding: 1em 2em;
	  		border: none;
	  		font-family: 'Roboto', sans-serif;
	  		font-weight: 100;
	  		font-size: 14pt;
	  		position: relative;
	  		top: 40%;
	  		cursor: pointer;
	  		outline:none;
	  	}

	  	button:hover {
	  		background: rgba(0,0,0,0.30);
	  	}

  	</style>
  	<link href='https://fonts.googleapis.com/css?family=Roboto' rel='stylesheet' type='text/css'>
  	<script>
  		function sayHello() {
  			alert('Hello world');
  		} 
  	</script>
  </head>
  <body>
  	<button onclick="sayHello()">Say Hello</button>
  </body>
</html>


で、同じディレクトリで

nw

というコマンドを実行すれば、以下のような画面が表示されます。

f:id:sho322:20170702094716j:plain

Pythonでファイルの読み書きを行う

Pythonでファイルの読み書きを行ってみます。
フォルダ構成はこちらです。


service.file_operation_service.py

class FileOperationService:

    def __init__(self, name):
        self.name = name
        print("FileOperationService is created")

    def file_read(self):
        try:
            text = open("C:\\0.dev\\sample.txt", encoding="utf-8")
            contents = text.read()
        finally:
            text.close()

        print(contents)

    def file_write(self):

        try:
            file = open("C:\\0.dev\\write.txt", mode="w", encoding="utf-8")
            file.write("僕の名前はキラだ \n")
            file.write("私の名前はLだ \n")
            file.write("私はニアだ \n")
        finally:
            file.close()

    def file_write2(self, fileName):
        with open(fileName, mode="w") as f:
            f.write("信頼せよ。\n")
            f.write("そうすれば彼らはあなたに正直になる\n")

withを使っても使わなくてもファイル処理は賭けますが、with構文を使うことで、try~finallyを使うことなく、自動的に処理の最後にclose()メソッドを呼んでくれます。

次に上のサービスを実行するスクリプトです。

from service.file_operation_service import FileOperationService


fileService = FileOperationService("test")
fileService.file_read()
fileService.file_write()

fileName = "C:\\0.dev\\write2.txt"

fileService.file_write2(fileName)

open()関数のmode引数に与える値は以下のとおりです。
w:書き込みモード
r:読み込みモード(デフォルト)
a:書き込み用に開き、ファイルが存在すれば末尾に追記
b:バイナリモード
t:テキストモード

TypeScriptの関数の使い方

TypeScriptのインストール方法

TypeScriptをインストールするには以下のコマンドを実行します。

npm install -g typescript

-gオプションは、TypeScriptコンパイラをグローバルにインストールするということです。

TypeScriptコンパイラのバージョンを確認するには以下のコマンドを実行します。

$ tsc --version
Version 2.2.1

TypeScriptで書かれたコードをJavaScriptに変換するには、以下のコマンドを実行します。

tsc main.ts

生成されたJavaScriptとTypeScriptをマッピングするには、以下のコマンドを実行します。

tsc --sourcemap main.ts

TypeScriptコンパイラに-wオプションを渡せば、ソースコードが変更されるたびに自動的にJavaScriptファイルに変換します。

tsc -w *.ts

関数の書き方

TypeScriptでは関数に型を指定することができます。

function calcTax(state: string, income: number, dependents: number): number {
    if (state == 'NY') {
        return income * 0.06 - dependents * 500;
    } else if (state == 'NJ') {
        return income * 0.05 - dependents * 300;
    }   
}

var tax: number = calcTax('NJ', 50000, 2);
console.log(tax);

無名関数の使い方

無名関数を使うときはfunctionキーワードは必要ありません。

function StockQuoteGeneratorArrow(symbol: string) {
    this.symbol = symbol;
    setInterval(() => {
        console.log("StockQuoteGeneratorArrow the price quote for is " + Math.random());
    }, 1000);
}

var stockQuoteGeneratorArrow = new StockQuoteGeneratorArrow("IBM");

Spring Bootで簡単なRESTアプリを作成する


Spring Bootを使ってREST Serviceを作るのは非常に簡単です。


まず、Beanクラスを作成します。

package com.example;

import java.io.Serializable;

public class Message implements Serializable {
	private String text;

	public String getText() {
		return text;
	}

	public void setText(String text) {
		this.text = text;
	}
	
}

次に、RESTコントローラーを作ります。

package com.example;

import java.util.List;
import java.util.concurrent.CopyOnWriteArrayList;

import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.RestController;

@RestController
@RequestMapping("/messages")
public class MessageController {
	final List<Message> messages = new CopyOnWriteArrayList<>();
	
	@RequestMapping(method = RequestMethod.GET)
	public List<Message> getMessages() {
		if (messages.size() == 0) {
			Message msg = new Message();
			msg.setText("this is example");
			messages.add(msg);
		}
		return messages;
	}
	
	@RequestMapping(method = RequestMethod.POST)
	public Message postMessages(@RequestBody Message message) {
		messages.add(message);
		return message;
	}
}

これだけ。
で、

http://localhost:8080/messages

にリクエストを投げると、

[{"text":"this is example"}]

というJSONが返ってきます。

C#でシャットダウンのイベントを受け取って処理を実行する

シャットダウンする直前に処理を走らせる作業を実行したいと考えています。

ProエディションならGroup Policyに記述を追加すればシャットダウンに引っかけてスクリプトを実行することができるのですが、Home Editionだとうまくいきません。
なので、自作スクリプトでなんとかするしかなさそうです。

こんな感じで.NETのプログラムを作ります。
これで出力したexeを走らせておけば大丈夫です。

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
using Microsoft.Win32;

namespace folder_backup
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
            this.Hide();
        }
        private void SystemEvents_SessionEnding(object sender, SessionEndingEventArgs e)
        {
            string s = "";
            if (e.Reason == SessionEndReasons.Logoff)
            {
                s = "ログオフしようとしています。";
            }
            else if (e.Reason == SessionEndReasons.SystemShutdown)
            {
                s = "シャットダウンしようとしています。";
            }
            if (MessageBox.Show(s + "\n\nキャンセルしますか?",
                "質問", MessageBoxButtons.YesNo) == DialogResult.Yes)
            {
                //キャンセルする
                e.Cancel = true;
            }
        }

        private void Form1_Load(object sender, EventArgs e)
        {
            SystemEvents.SessionEnding +=
            new SessionEndingEventHandler(SystemEvents_SessionEnding);
        }
    }

}

MacにTomcatをインストールしてEclipseから動かしてみる。


Homebrewでインストールできます。

``
$ brew install tomcat

==> Using the sandbox
==> Downloading https://www.apache.org/dyn/closer.cgi?path=tomcat/tomcat-8/v8.5.9/bin/apache-tomcat-8.5.9.tar.gz
==> Best Mirror http://ftp.jaist.ac.jp/pub/apache/tomcat/tomcat-8/v8.5.9/bin/apache-tomcat-8.5.9.tar.gz
######################################################################## 100.0%
🍺 /usr/local/Cellar/tomcat/8.5.9: 634 files, 12.5M, built in 6 seconds
``

以下のコマンドでTomcatを起動させることができます。

``
/usr/local/Cellar/tomcat/8.5.9/bin/catalina start
``

localhost:8080

でTomcatのホーム画面を見ることができます。


CATALINA_HOMEですが、以下にあります。

``
$ pwd
/usr/local/Cellar/tomcat/8.5.9/libexec
```

Eclipseの「環境設定」でTomcat > で、Tomcatホームに設定するのも上記のディレクトリです。
Macの場合、左上の「Eclipse」というところをクリックすると、環境設定画面に飛ぶことができます。

環境設定でTomcatを設定したあとに、パッケージエクスプローラーのプロジェクト名を右クリックします。
そこで、Properties > ServerでTomcatを選択し、

「Run As」 > 「Run on Server」

でEclipseのTomcatアプリをTomcatで起動させることができます。

f:id:sho322:20161210181138p:plain

SCSSで変数を定義したり、@mixinを使ってみる

変数を定義する

変数を定義するのは簡単です。 [$変数名]を[:]で区切って、値を入れます。

後は、変数名をプロパティに指定すれば、その値が反映されます。

@charset 'utf-8';

$mainColor : #2576E5;

header {
  background-color: $mainColor;
}

.main {
  p {
    color : $mainColor;
  }
}

CSSには以下のように出力されます

header {
  background-color: #2576E5; }

.main p {
  color: #2576E5; }

mixin

mixinを使えば、定義の塊を作ることができます。

@charset 'utf-8';

@mixin blueText {
  color:blue;
  font-size:20px;
}

@mixin redText {
  color:red;
  font-size:30px;
}

.textBlue {
  @include blueText;
}


.textRed {
  @include redText;
}

.textRed2 {
  @include redText;
}

@mixinと書いて、そこにそこにCSSのかたまりを定義します。 それを、@includeとすることで、取り込むことができます。

XCodeがUpdateされたときは、Swiftのバージョンを確認する方法

以下のコマンドで確認できる。

$ /Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/swift -v

Apple Swift version 3.0 (swiftlang-800.0.46.2 clang-800.0.38)
Target: x86_64-apple-macosx10.9
/Applications/Xcode.app/Contents/Developer/usr/bin/lldb "--repl=-target x86_64-apple-macosx10.9 -enable-objc-interop -sdk /Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.12.sdk -color-diagnostics"

Swift3にアップデートしたらCGRectMakeが使えず、'CGRectMake' is unavailable in Swiftとエラーが出るようになった。

XCodeをUpdateしてから、本に書いてあるサンプルのほとんどが陳腐化してしまった。
CGRectMakeという、座標を指定する関数が使えなくなっていた。

「'CGRectMake' is unavailable in Swift」というエラーが出るようになってしまったのだ。
このエラーに対応するには、CGRectをWrapする関数を作ればよい。


http://stackoverflow.com/questions/30692096/using-variables-in-cgrectmake-swift-uikit

func CGRectMake(_ x: CGFloat, _ y: CGFloat, _ width: CGFloat, _ height: CGFloat) -> CGRect {
    return CGRect(x: x, y: y, width: width, height: height)
}

これを使って、Labelを移動させたりLabelを作る処理を買いてみる。

//関数名は変になったすまん。clickMoveが適切
@IBAction func clickMake(_ sender: AnyObject) {

    let rect = CGRectMake(
        labelMove.frame.origin.x,
        labelMove.frame.origin.y + 30,
        labelMove.frame.width + 50,
        labelMove.frame.height + 30)
    labelMove.frame = rect
    labelMove.text = "move label"
    
}

@IBAction func clickCreate(_ sender: AnyObject) {
    let label = UILabel()
    let rect = CGRectMake(
        100,
        100,
        150,
        30)
    label.frame = rect
    label.text = "create label"
    self.view.addSubview(label)
}

func CGRectMake(_ x: CGFloat, _ y: CGFloat, _ width: CGFloat, _ height: CGFloat) -> CGRect {
    return CGRect(x: x, y: y, width: width, height: height)
}
    

Xcodeではじめる 簡単iPhoneアプリ開発[Xcode 8 & Swift 3対応]

Xcodeではじめる 簡単iPhoneアプリ開発[Xcode 8 & Swift 3対応]