SQLの窓

2017年05月26日


Android Studio : BroadcastReceiver を Anonymous Inner Class で使用し、バッテリーの状態をエミュレータで簡単にテスト

▼ log.i の出力
I/lightbox: android.intent.action.BATTERY_CHANGED
I/lightbox: level : 10 ( / 100 )
I/lightbox: GOOD
I/lightbox: android.intent.action.BATTERY_CHANGED
I/lightbox: level : 50 ( / 100 )
I/lightbox: GOOD
I/lightbox: android.intent.action.BATTERY_CHANGED
I/lightbox: level : 100 ( / 100 )
I/lightbox: GOOD
内部クラスや、サブクラスで実装してもいいですが、内容としてはあまりしょっちゅう行うものでも無いし、テストとしては、telnet で adb に power capacity するほうが重要なのでこのような感じになりました。 BroadcastReceiver に代入する処理は、通常のイベント作成と同じく、new の後で CTRL+SPACE で候補を表示させて、BroadcastReceiver を選択すれば自動的に public void onReceive が作成されるので、その中に処理を記述するたけです。
package com.example.lightbox.broadcasttest;

import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;
import android.content.IntentFilter;
import android.os.BatteryManager;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.util.Log;

public class MainActivity extends AppCompatActivity {

    private BroadcastReceiver broadcastReceiver;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

    }

    @Override
    protected void onResume() {
        super.onResume();
        Log.i("lightbox", "onResume");

        broadcastReceiver = new BroadcastReceiver() {
            @Override
            public void onReceive(Context context, Intent intent) {

                String action = intent.getAction();
                Log.i("lightbox", action);

                int level = intent.getIntExtra(BatteryManager.EXTRA_LEVEL,-1);
                int scale = intent.getIntExtra(BatteryManager.EXTRA_SCALE,-1);
                Log.i("lightbox", String.format("level : %d ( / %d )",level,scale));
                int health = intent.getIntExtra(BatteryManager.EXTRA_HEALTH,-1);
                switch( health ) {
                    case BatteryManager.BATTERY_HEALTH_COLD:
                        Log.i("lightbox", "COLD");
                        break;
                    case BatteryManager.BATTERY_HEALTH_DEAD:
                        Log.i("lightbox", "DEAD");
                        break;
                    case BatteryManager.BATTERY_HEALTH_GOOD:
                        Log.i("lightbox", "GOOD");
                        break;
                    case BatteryManager.BATTERY_HEALTH_OVER_VOLTAGE:
                        Log.i("lightbox", "OVER_VOLTAGE");
                        break;
                    case BatteryManager.BATTERY_HEALTH_OVERHEAT:
                        Log.i("lightbox", "OVERHEAT");
                        break;

                }

            }
        };

        IntentFilter intentFilter = new IntentFilter();
        intentFilter.addAction(MainActivity.this.getIntent().ACTION_BATTERY_CHANGED);
        // レシーバーを登録
        MainActivity.this.registerReceiver(broadcastReceiver,intentFilter);

    }

    @Override
    protected void onPause() {
        super.onPause();
        Log.i("lightbox", "onPause");

        MainActivity.this.unregisterReceiver(broadcastReceiver);
    }
}

実際には switch 部分すら必要ありませんが、Android のドキュメントを覘くためのヒントとして使っています。

1) BatteryManager
2) BatteryManager.EXTRA_LEVEL

adb.exe がある場所

Android Studio で実行して、エミュレータ上で実行されたら、タスクマネージャでプロセスを表示してから、イメージ名をクリックしてソートすると、adb.exe がほぼ一番上に表示されるので、右クリックから『ファイルの場所を開く』を選択すると、でエクスプローラで開く事ができます



さらに、エクスプローラでそのフォルダを選択して SHIFT キーを押しながら右クリックして、『コマンドウインドウをここで開く』を選択します。

telnet を使えるように

既に使用している場合は必要無いですが、昨今めったに使う事が無いので Windows で使用できないようになっています。『プログラムと機能』の左サイドにある『Windows の機能の有効化または無効化』で開いたツリーで telnet を有効にします



コマンドプロンプトより adb にアクセス

まず、adb devices をコマンドプロンプトで実行して、現在のエミュレータの id を確認します。
List of devices attached
emulator-5554   device
次に、telnet localhost 5554 を実行して、telnet で adb にアクセスします。
Android Console: Authentication required
Android Console: type 'auth ' to authenticate
Android Console: you can find your  in
'C:\Users\lightbox\.emulator_console_auth_token'
ここで、まず auth コマンドでトークンを入力する必要があります。表示された場所にある、.emulator_console_auth_token をテキストエディタで開いてトークンを取得し、auth コマンドで実行します。
auth トークン文字列
Android Console: type 'help' for a list of commands
OK
これでコマンドが使えるようになるので、help と入力して確認します
help
Android console command help:

    help|h|?         print a list of commands
    event            simulate hardware events
    geo              Geo-location commands
    gsm              GSM related commands
    cdma             CDMA related commands
    crash            crash the emulator instance
    kill             kill the emulator instance
    network          manage network settings
    power            power related commands
    quit|exit        quit control session
    redir            manage port redirections
    sms              SMS related commands
    avd              control virtual device execution
    qemu             QEMU-specific commands
    sensor           manage emulator sensors
    finger           manage emulator finger print
    debug            control the emulator debug output tags
    rotate           rotate the screen clockwise by 90 degrees

try 'help ' for command-specific help
使用するのは、power コマンドです。
power
allows to change battery and AC power status

available sub-commands:
    display          display battery and charger state
    ac               set AC charging state
    status           set battery status
    present          set battery present state
    health           set battery health state
    capacity         set battery capacity state
power capacity 10 のようにして、バッテリーの量を変更するコマンドをクリップボードにコピーしておいて、貼り付けて実行してみて下さい。エミュレータの右上のバッテリーアイコンの量の表示が変わります。 すると、LogCat にも表示されるはずです
posted by lightbox at 2017-05-26 21:58 | Comment(0) | Android Studio 2017 | このブログの読者になる | 更新情報をチェックする

2017年05月25日


Java で JSON 文字列を オブジェクトに変換する Google Gson の基本 4 パターン

ほぼ Google Gson のユーザガイドに記述されている内容です。
一般 JSON オブジェクトフォーマット

JSON 文字列のルートがいきなり、 JSON オブジェクトの一般プロパティになっている場合です。
{
    "link": "http://www.yahoo.co.jp/",
    "name": "Yahoo! JAPAN"
}
一番使う事の多いパターンの基本で、そのフォーマットのクラス定義を作成して、Gson に展開してもらいます。 一般 配列フォーマット JSON 文字列のルートがいきなり、 JSON オブジェクトの配列になっている場合で、データとしては特殊な部類になります。
[
    "http://www.yahoo.co.jp/",
    "Yahoo! JAPAN"
]
ですが、Gson 側では以下のように比較的簡単に扱えます String[] data = gson.fromJson(json, String[].class); また、これは Java での作業の都合で、ArrayList に変更する事も可能です。(但し、少し面倒です) Type arrayListType = new TypeToken<ArrayList<String>>(){}.getType(); ArrayList<String> al = gson.fromJson(json, arrayListType); 配列の中のデータ毎に型が違うフォーマット
[
    "サイトデータ",
    1,
    {
        "link": "http://www.yahoo.co.jp/",
        "name": "Yahoo! JAPAN"
    }
]
このタイプが一番面倒です。通常使われる事は無いと思いますが、使用する場合は一つ一つ対応する事になると思います。( Gson でのオリジルサンプルコードはここにあります ) オブジェクト内にオブジェクト配列
{
    "title": "サイトデータ",
    "number": 2,
    "urlList": [
        {
            "link": "http://www.yahoo.co.jp/",
            "name": "Yahoo! JAPAN"
        },
        {
            "link": "https://www.google.co.jp/",
            "name": "Google"
        }
    ]
}
データフォーマットとしてはこれが一番優れており、全てクラスを定義する事によって容易に対応できます。
import java.lang.reflect.Type;
import java.util.ArrayList;

import com.google.gson.Gson;
import com.google.gson.JsonArray;
import com.google.gson.JsonParser;
import com.google.gson.reflect.TypeToken;


public class Main {

	// メンバ用クラス
	class LinkFormat {
		String link;
		String name;
	}
	
	// メンバに配列
	class SiteData {
		String title;
		int number;
		
		LinkFormat[] urlList;
	}
	
	// メンバに ArrayList
	class SiteDataList {
		String title;
		int number;
		
		ArrayList <LinkFormat> urlList;
	}
		
	public static void main(String[] args) {
	
		String json = null;
		
		// 一般 JSON オブジェクトフォーマット
		System.out.println("-----------------------------------------");
		
		json = "";
		json += "{";
		json += 	"\"link\":\"http://www.yahoo.co.jp/\",";
		json += 	"\"name\":\"Yahoo! JAPAN\"";
		json += "}";
		System.out.println(json);

		Gson gson = new Gson();

		// オブジェクトに変換
		System.out.println("-----------------------------------------");
		
		LinkFormat linkFormat = gson.fromJson(json, LinkFormat.class);

		System.out.println(linkFormat.link);
		System.out.println(linkFormat.name);

		// 一般 配列フォーマット
		System.out.println("-----------------------------------------");
		
		json = "";
		json += "[";
		json += 	"\"http://www.yahoo.co.jp/\",";
		json += 	"\"Yahoo! JAPAN\"";
		json += "]";
		System.out.println(json);

		// 配列に変換
		String[]  data = gson.fromJson(json, String[].class);

		System.out.println(data[0]);
		System.out.println(data[1]);

		// ArrayListに変換
		System.out.println("-----------------------------------------");
		
		Type arrayListType = new TypeToken<ArrayList<String>>(){}.getType();
		ArrayList<String>  al = gson.fromJson(json, arrayListType);

		System.out.println(al.get(0));
		System.out.println(al.get(1));

		// 特殊 JSON オブジェクト配列フォーマット
		System.out.println("-----------------------------------------");
		
		json = "";
		json += "[";
		json += 	"\"サイトデータ\",";
		json += 	"1,";
		json += 	"{";
		json += 		"\"link\":\"http://www.yahoo.co.jp/\",";
		json += 		"\"name\":\"Yahoo! JAPAN\"";
		json += 	"}";
		json += "]";
		System.out.println(json);

		// JSON 文字列配列内の型が違う場合はひとつひとつ対応
		JsonParser parser = new JsonParser();
		JsonArray array = parser.parse(json).getAsJsonArray();
		String title = gson.fromJson(array.get(0), String.class);
		int number = gson.fromJson(array.get(1), int.class);
		LinkFormat lf = gson.fromJson(array.get(2), LinkFormat.class);

		System.out.println( title );
		System.out.println( number );
		System.out.println( lf.link );
		System.out.println( lf.name );

		// JSON オブジェクト内にオブジェクト配列
		System.out.println("-----------------------------------------");
		
		json = "";
		json += "{";
		json += "\"title\" : \"サイトデータ\",";
		json += "\"number\" : 2,";
		json += "\"urlList\" : [";
		json += 	"{";
		json += 		"\"link\":\"http://www.yahoo.co.jp/\",";
		json += 		"\"name\":\"Yahoo! JAPAN\"";
		json += 	"},";
		json += 	"{";
		json += 		"\"link\":\"https://www.google.co.jp/\",";
		json += 		"\"name\":\"Google\"";
		json += 	"}";
		json += "]";
		json += "}";
		System.out.println(json);
		
		// 配列バージョン
		SiteData sd = gson.fromJson(json, SiteData.class);
		System.out.println( sd.title );
		System.out.println( sd.number );
		System.out.println( sd.urlList[0].link );
		System.out.println( sd.urlList[0].name );
		System.out.println( sd.urlList[1].link );
		System.out.println( sd.urlList[1].name );

		// ArrayList バージョン
		SiteDataList sdl = gson.fromJson(json, SiteDataList.class);
		System.out.println( sdl.title );
		System.out.println( sdl.number );
		System.out.println( sdl.urlList.get(0).link );
		System.out.println( sdl.urlList.get(0).name );
		System.out.println( sdl.urlList.get(1).link );
		System.out.println( sdl.urlList.get(1).name );

	}

}


※ 整形したい場合は以下のようにします
// オブジェクトを整形して JSON 文字列に変換する
Gson gsonPretty = new GsonBuilder().setPrettyPrinting().create();
String jsonString = gsonPretty.toJson(sd);


タグ:java JSON
posted by lightbox at 2017-05-25 21:41 | Java | このブログの読者になる | 更新情報をチェックする

2017年05月20日


デスクトップのアイコン表示を切り替えるバッチファイル

デスクトップを右クリックして表示されるポップアップメニューの、『表示』サブメニューから、『デスクトップアイコンの表示』で切り替える事ができる機能をコマンドプロンプトから可能にします

di.bat
@echo off
cmd "/c echo set o=CreateObject("Shell.Application"):Set osw=o.Windows:Set oie=osw.Item:oie.Document.FolderFlags=CLng(oie.Document.FolderFlags) Xor ^&H00001000 > %TEMP%\_.vbs & wscript.exe %TEMP%\_.vbs"

echo コマンドで、vbscript のコードをテンポラリフォルダに作成して実行するという手法を用いています。

関連する記事

PATH 環境変数の内容をパス毎に改行して表示する pathx.bat ファイルの内容
管理者権限のコマンドプロンプトを開くバッチファイル
バッチファイル : クリップボードからデータを読み込んで表示

VBScript のコード
Set Shell = CreateObject( "Shell.Application" )

Set objShellWindows = Shell.Windows

Set objIE = objShellWindows.Item

objIE.Document.FolderFlags = CLng(objIE.Document.FolderFlags) Xor &H00001000

1) Shell.Application
2) ShellWindows
3) ShellWindows.Item
4) InternetExplorer
5) FOLDERFLAGS enumeration

※ 結局のところ、IE の Document と FolderFlags の関係を記したドキュメントは見つける事ができていません。

Windows 10 でも動作します。また、VBScript のコードをどこかに保存して(di.bat のままだと、コマンドウイドウが一瞬表示されてしまうので)、Wscript で実行するショートカットを作成して、『新規ツールバー』を作成して登録すれば、Quick Launch として使用可能です。







posted by lightbox at 2017-05-20 14:29 | Comment(0) | コマンド : バッチファイル | このブログの読者になる | 更新情報をチェックする

2017年05月19日


Windows 環境の MySQL から日本語名のテーブルを コマンドプロンプトでエクスポート(mysqldump.exe)する

Windows であっても、MySQL Community Edition(GPL) に対する操作はコマンドプロンプトから行います。Windows では、日本語は SHIFT_JIS( MySQL では cp932 を使用します )で表現されるので、一般的にサーバ側で UTF-8 で構築される MySQL では日本語のテーブル名を mysqldump.exe で認識してくれません。
(mysql.exe では cp932 で最初から調整されています)

show variables like 'cha%'


そこで、mysqldump で以下のようなコマンドラインを作成してデータのエクスポートを行います
mysqldump.exe --host=localhost --user=root --password=パスワード --add-drop-table --force --quote-names --default-character-set=cp932 lightbox 商品マスタ 得意先マスタ > export.sql
▼ 上記コマンドラインに改行を入れて解りやすく並べています
mysqldump.exe
 --host=localhost
 --user=root
 --password=パスワード
 --add-drop-table
 --force
 --quote-names
 --default-character-set=cp932
 lightbox 商品マスタ 得意先マスタ > export.sql
lightbox は、DB名で、商品マスタと得意先マスタはテーブル名です この結果取得される export.sql は以下のようになります
-- MySQL dump 10.13  Distrib 5.7.17, for Win64 (x86_64)
--
-- Host: localhost    Database: lightbox
-- ------------------------------------------------------
-- Server version	5.7.17-log

/*!40101 SET @OLD_CHARACTER_SET_CLIENT=@@CHARACTER_SET_CLIENT */;
/*!40101 SET @OLD_CHARACTER_SET_RESULTS=@@CHARACTER_SET_RESULTS */;
/*!40101 SET @OLD_COLLATION_CONNECTION=@@COLLATION_CONNECTION */;
/*!40101 SET NAMES cp932 */;
/*!40103 SET @OLD_TIME_ZONE=@@TIME_ZONE */;
/*!40103 SET TIME_ZONE='+00:00' */;
/*!40014 SET @OLD_UNIQUE_CHECKS=@@UNIQUE_CHECKS, UNIQUE_CHECKS=0 */;
/*!40014 SET @OLD_FOREIGN_KEY_CHECKS=@@FOREIGN_KEY_CHECKS, FOREIGN_KEY_CHECKS=0 */;
/*!40101 SET @OLD_SQL_MODE=@@SQL_MODE, SQL_MODE='NO_AUTO_VALUE_ON_ZERO' */;
/*!40111 SET @OLD_SQL_NOTES=@@SQL_NOTES, SQL_NOTES=0 */;

--
-- Table structure for table `商品マスタ`
--

DROP TABLE IF EXISTS `商品マスタ`;
/*!40101 SET @saved_cs_client     = @@character_set_client */;
/*!40101 SET character_set_client = utf8 */;
CREATE TABLE `蝠・刀繝槭せ繧ソ` (
  `蝠・刀繧ウ繝シ繝荏 varchar(4) NOT NULL,
  `蝠・刀蜷港 varchar(50) DEFAULT NULL,
  `蝨ィ蠎ォ隧穂セ。蜊倅セ。` int(11) DEFAULT NULL,
  `雋ゥ螢イ蜊倅セ。` int(11) DEFAULT NULL,
  `蝠・刀蛻・。杼 varchar(3) DEFAULT NULL,
  `蝠・刀蛹コ蛻・ varchar(1) DEFAULT NULL,
  `菴懈・譌・` datetime DEFAULT NULL,
  `譖エ譁ー譌・` datetime DEFAULT NULL,
  `蛯呵?チ mediumtext,
  `蜑企勁繝輔Λ繧ー` varchar(1) DEFAULT NULL,
  PRIMARY KEY (`蝠・刀繧ウ繝シ繝荏)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
/*!40101 SET character_set_client = @saved_cs_client */;

--
-- Dumping data for table `商品マスタ`
--

LOCK TABLES `商品マスタ` WRITE;
/*!40000 ALTER TABLE `商品マスタ` DISABLE KEYS */;
省略(cp932 の insert)
/*!40000 ALTER TABLE `商品マスタ` ENABLE KEYS */;
UNLOCK TABLES;

--
-- Table structure for table `得意先マスタ`
--

DROP TABLE IF EXISTS `得意先マスタ`;
/*!40101 SET @saved_cs_client     = @@character_set_client */;
/*!40101 SET character_set_client = utf8 */;
CREATE TABLE `蠕玲э蜈医・繧ケ繧ソ` (
  `蠕玲э蜈医さ繝シ繝荏 varchar(4) NOT NULL,
  `蠕玲э蜈亥錐` varchar(50) DEFAULT NULL,
  `蠕玲э蜈亥玄蛻・ varchar(1) DEFAULT NULL,
  `諡・ス楢?・ varchar(4) DEFAULT NULL,
  `驛オ萓ソ逡ェ蜿キ` varchar(7) DEFAULT NULL,
  `菴乗園・疏 varchar(100) DEFAULT NULL,
  `菴乗園・蛋 varchar(100) DEFAULT NULL,
  `菴懈・譌・` datetime DEFAULT NULL,
  `譖エ譁ー譌・` datetime DEFAULT NULL,
  `邱&#63728;譌・` int(11) DEFAULT NULL,
  `邱&#63728;譌・蛹コ蛻・ int(11) DEFAULT NULL,
  `謾ッ謇墓律` int(11) DEFAULT NULL,
  `蛯呵?チ varchar(100) DEFAULT NULL,
  PRIMARY KEY (`蠕玲э蜈医さ繝シ繝荏)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
/*!40101 SET character_set_client = @saved_cs_client */;

--
-- Dumping data for table `得意先マスタ`
--

LOCK TABLES `得意先マスタ` WRITE;
/*!40000 ALTER TABLE `得意先マスタ` DISABLE KEYS */;
省略(cp932 の insert)
/*!40000 ALTER TABLE `得意先マスタ` ENABLE KEYS */;
UNLOCK TABLES;
/*!40103 SET TIME_ZONE=@OLD_TIME_ZONE */;

/*!40101 SET SQL_MODE=@OLD_SQL_MODE */;
/*!40014 SET FOREIGN_KEY_CHECKS=@OLD_FOREIGN_KEY_CHECKS */;
/*!40014 SET UNIQUE_CHECKS=@OLD_UNIQUE_CHECKS */;
/*!40101 SET CHARACTER_SET_CLIENT=@OLD_CHARACTER_SET_CLIENT */;
/*!40101 SET CHARACTER_SET_RESULTS=@OLD_CHARACTER_SET_RESULTS */;
/*!40101 SET COLLATION_CONNECTION=@OLD_COLLATION_CONNECTION */;
/*!40111 SET SQL_NOTES=@OLD_SQL_NOTES */;

-- Dump completed on 2017-05-19 17:34:14

このテキストファイルは、SHIFT_JIS として表示した場合、CREATE TABLE の部分が化けたように見えますが、その直前で /*!40101 SET character_set_client = utf8 */; として utf8 として判断されるようになっているので、MySQL サーバであれば Windows でもレンタルサーバでも正しく動作します(インポート時はレンタルサーバの phpmyadmin で SHIFT_JIS として読み込む)

コマンドプロンプト環境の作成

仮に、c:\user\dos というフォルダにパスを通したとして、この中に以下のバッチファイルを保存します

1) MySQL のコマンドプロンプトからの処理用バッチファイル
(MySQL のコマンドが保存されているパスは PC によって変わります)

2) 管理者権限のコマンドプロンプトを開くバッチファイル

そして、普段 MySQL のサービスは停止しているとして、コマンドプロンプトからサービスを開始する為、ファイル名を指定して実行から、admin と入力して管理者権限でコマンドプロンプトを開きます。

1) sc start MySQL57


2) sc query MySQL57

※ MySQL57 は、システムに登録されたサービス名

表示結果より、『STATE : 4  RUNNING』である事を確認したら、mysql_cmd と入力します(サービスが起動済みならば、ファイル名を指定して実行より、mysql_cmd と入力)。

そして、mysqldump を使用してバックアップを行います。

補足

MySQL で使用可能なキャラクタセット文字列は、SHOW CHARACTER SET で取得できます




posted by lightbox at 2017-05-19 18:05 | Comment(0) | MySQL | このブログの読者になる | 更新情報をチェックする

Windows で Laravel を試す際、PHP の Windows バージョンが 5.6.30 なので、Laravel 5.2 をインストールします

おそらくは、5.4 でも動作するのでは無いかと思いますが、世の中の情報がそれほど最新に対応してるわけでも無く、最新だと、ルーティングするファイルも違うので Laravel 5.2 でテストを行いました。

Laravel 5.2 公式ページ(英文)
バージョン対象PHP バージョンBladeテンプレートルーティングリリース
5.4PHP >= 5.6.4OKroutes/web.php2017/1/24
5.3PHP >= 5.6.4OKroutes/web.php2016/8/23
5.2PHP >= 5.5.9OKapp/Http/routes.php2015/12/21
5.1PHP >= 5.5.9OKapp/Http/routes.php2015/6/9
5.07 > PHP >= 5.4なしapp/Http/routes.php2015/2/4
Laravel 5.2 日本語ドキュメントページ

composer global ... による Laravel のインストール

試してみましたが、これは最新の Larvel がインストールされるため、laravel new ... でプロジェクトを作成する方法はできません。以下のように Composer で行う必要があります。
composer create-project --prefer-dist laravel/laravel プロジェクト名 "5.2.*"
※ プロジェクト名は英数字 上記コマンドは長いので、以下のようなバッチファイルにして php がインストールされているフォルダに保存するといいでしょう ( Composer のインストールで、php インストールフォルダにパスが通っているはずなので )
@echo off
composer create-project --prefer-dist laravel/laravel %1 "5.2.*"

※ laravelx.bat だとすると、laravelx プロジェクト名 で実行できます

それ以降は、一般的な情報通りに、プロジェクトディレクトリでコマンドプロンプトを開いて、以下のコマンドを実行します。
php artisan serve
※ Larvel のインストールされたバージョンの確認は、php artisan -V で確認 ※ Composer のインストールで、PHP のディレクトリが検索パスに追加されています Larvel 5.2 のドキュメントでは、php artisan serve の記述がなくなっていますが、5.3 では復活しています。5.3 では、Homestead も使えますよと一行だけ書かれていますが、Homestead が主流にはなりえなかったのでしょう。 関連する記事 Laravel を試す為に Windows に Composer をインストール
タグ:PHP Laravel
posted by lightbox at 2017-05-19 09:34 | Comment(0) | PHP + WEBアプリ | このブログの読者になる | 更新情報をチェックする
container 終わり

フリーフォントで簡単ロゴ作成
フリーフォントでボタン素材作成
フリーフォントで吹き出し画像作成
フリーフォントではんこ画像作成
ほぼ自由に利用できるフリーフォント
フリーフォントの書体見本とサンプル
画像を大きく見る為のウインドウを開くボタンの作成

Android SDK ポケットリファレンス
改訂版 Webデザイナーのための jQuery入門
今すぐ使えるかんたん ホームページ HTML&CSS入門
CSS ドロップシャドウの参考デモ
PHP正規表現チェッカー
Google Hosted Libraries
cdnjs
BUTTONS (CSS でボタン)
イラストAC
ぱくたそ
写真素材 足成
フリーフォント一覧
utf8 文字ツール
右サイド 終わり
base 終わり