/// BANGBOO BLOG ///

  • 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
  • 28
  • 29
  • 30
  • 31


January 2016 List
通話SIM on Jan 04, 2016 12:29 PM
Laravel on Jan 04, 2016 12:00 AM
XSS, CSRF, JSOP, SSO on Jan 03, 2016 10:53 PM
Git on Jan 03, 2016 12:00 AM
Fucking tire on Jan 02, 2016 8:00 PM
Agile on Jan 02, 2016 12:00 AM
PHP Developer on Jan 01, 2016 10:47 PM
11 Tips of Excel on Jan 01, 2016 12:00 AM

January 4, 2016

通話SIM


あけおめとう。感謝・諦観の年にしたいかと思う。病院、関係各所では世話してもらって、
巡礼「マジ感謝」ができない分、あと改宗する!?留守電がないのが駄目だが、
アプリSmart talkを入れると留守電が使えるようであるので元電話を転送する。

楽天電話 10円/30秒
SmartTalk 8円/30秒
楽天の留守電契約300円/月(これを節約)

■Smart talkのWEBサイトのマイページで留守電設定、無料?
https://smart.fusioncom.co.jp/sfkr/mypage/top
 留守電までの時間を10sや即時にする(即時?)
 メールで送られてくるらしい
 60秒までの伝言を、10件まで、7日間のみ保存
 差出人メールアドレス mail-noreply@fusioncom.co.jp

■楽天通話SIMの転送設定、無料
まずサポートページでオプションとして転送を設定する
http://mobile.rakuten.co.jp/support/
http://mobile.rakuten.co.jp/support/option/call_forwarding/
設置後数日経つと以下の4桁番号が繋がる、開始・停止番号を忘れない
 転送先電話番号の設定・変更
 1429に掛ける
 呼出時間設定(0 ~ 120s の間)13s?
 1429に掛ける
 転送電話サービスの設定内容確認
 1429に掛ける
 転送電話サービス開始
 1421に掛ける
 転送電話サービス停止
 1420に掛ける

楽天モバイルカスタマーセンター
 0800-600-0000(繋がらず無駄遣い)
 ここに問い合わせフォームがある
 http://mobile.faq.rakuten.ne.jp/app/home

Posted by funa : 12:29 PM | Gadget | Comment (0) | Trackback (0)


January 4, 2016

Laravel

https://coinbaby8.com/laravel-php-dekirukoto.html
https://laravel10.wordpress.com/
ルーティング:  URLと対応 .phpで終わせず処理をひとつのファイルやクラスにまとめる
Blade:  テンプレートエンジン
ミドルウェア: URL前後に処理を付加
エラーハンドラ: 例外やエラーが発生した際の処理
DI : サービスコンテナというのを用いクラスインスタンスの依存度を極力下げて、実行時に外部から与えてもらえるように
バリデーション:  入力値のチェックを設定のみで自動的に
データベース連携
認証の自動化

■XAMPP 7.4.1 インスコ(X-platform/Apache/MySQL/PHP/Perl)
 https://www.apachefriends.org/jp/index.html
 Win用Exeでインスコ C:\xampp\htdocs ← http://localhost/
 xamppコンパネのショートカットをデスクトップに作成
Composer PHPのパッケージ管理システム
 https://getcomposer.org/download/
 Win用Exeで通常(devでなく)でインスコ
 PHPはC:\xampp\php\php.exe、ユーザパスはC:\xampp\php
Laravel インスコ(プロジェクト作成)
 コマンドを打つと自動でインスコ
 cd C:\xampp\htdocs
 composer create-project laravel/laravel prj_laravel --prefer-dist
 5分位掛かる
 Laravelプロジェクト起動はコマンドを打つ
 cd C:\xampp\htdocs\prj_laravel
 php artisan serve
  次のURLへアクセスする http://localhost:8000/
   ルートはここみたい C:\xampp\htdocs\prj_laravel\public


■ララベルの基本
gitの管理対象から外す
.gitignore ファイルに追加
環境毎に変更したい情報
.env ファイルにステージング環境、本番環境の情報をまとめる
設定情報は下記以下、DB接続/メール/サービスプロバイダ登録/ファサード登録等
config/
バリデーションメッセージの日本語化
resources/lang/ja/validation.php

===============

├── app
│   └── Article.php
│   └── Http
│       └── Controllers
├── resources
│   └── views
└── routes

//php artisanコマンド(独自作成も可)
何ができるかリスト確認cmd
php artisan list
使い方確認cmd
php artisan help コマンド名
cmdでララベル機能が使える
php artisan tinker
古いパッケージをチェック
composer update --dry-run
古いパッケージをチェック(グローバルの場合)
composer global update --dry-run

コントローラを作成cmd
php artisan make:controller WelcomeController
モデルを作成cmd
php artisan make:model Article
Form Request を生成
php artisan make:request ArticleRequest
CRUDはリソースコントローラで一気作成ができる
php artisan make:controller PostsController --resource
認証用ビューとルートを作成(認証機能はプロジェクト作成時点で既成)
php artisan make:auth

//ルーティング routes/web.php
Route::get('/', 'WelcomeController@index');
Route::get('contact', 'WelcomeController@contact');
正規表現を配列にして、複数指定
Route::get('foo/{id}/{name?}', function($id, $name = 'init') {
    return "パラメータ $id, $name";
})->where(['id' => '[0-9]+', 'name' => '[a-z]+']);
これはnamed rootで名付け
Route::get('articles', 'ArticlesController@index')->name('articles.index');
Route::get('articles/{id}', 'ArticlesController@show');
Route::post('articles', 'ArticlesController@store')->name('articles.store');

//コントローラ app/Http/Controllers/WelcomeController.php
namespace App\Http\Controllers;
use Illuminate\Http\Request;
class WelcomeController extends Controller{
    public function index(){
        return view('welcome');
    }
    public function contact(){
        return view('contact');
    }
}
class ArticlesController extends Controller {
    public function create() {
        return view('articles.create');
    }
    public function store(ArticleRequest  $request) {
 //コントローラはメソッドの引数にタイプヒントでクラスを記述するとインスタンスを自動生成して渡してくれます
        //$inputs = \Request::all(); //フォームの入力値を取得
        //dd($inputs); //デバッグ: $inputs の内容確認
        Article::create($request->validated());//マスアサインメントで記事をDBに作成
        return redirect()->route('articles.index')->with('message', '作成!'); //記事一覧へリダイレクト
    }
}

//ビュー resouces/views/welcome.blade.php
resources/view/contact.blade.php
blade では PHP で評価した結果を表示する場合、ダブルカーリー {{ }}
@で別ファイルを読み込む
{{!! XXXX !!} はPHP評価をエスケープ処理を行わず表示、{{ XXXX }} のエスケープ
@csrfでCSRFトークン(hidden)を挿入
{{-- コメント文 --}}
@extends('layout')
 <h1>About Me: {{ $first_name }} {{ $last_name }}</h1>
    {{-- エラーの表示を追加 --}}
    @if ($errors->any())
        <div class="alert alert-danger">
            <ul>
                @foreach ($errors->all() as $error)
                    <li>{{ $error }}</li>
                @endforeach
            </ul>
        </div>
    @endif
 {!! Form::open() !!}
<div class="form-group">
    {!! Form::label('title', 'Title:') !!}
    {!! Form::text('title', null, ['class' => 'form-control']) !!}
</div>
<div class="form-group">
    {!! Form::label('body', 'Body:') !!}
    {!! Form::textarea('body', null, ['class' => 'form-control']) !!}
</div>
<div class="form-group">
    {!! Form::label('published_at', 'Publish On:') !!}
    {!! Form::input('date', 'published_at', $published_at, ['class' => 'form-control']) !!}
</div>
<div class="form-group">
    {!! Form::submit($submitButton, ['class' => 'btn btn-primary form-control']) !!}
</div>

 大元のレイアウトビュー resouces/views/layout.blade.php
 <!DOCTYPE HTML>
 <html lang="ja">
 <body>
       @if (session('message'))
            <div class="alert alert-success">{{ session('message') }}</div>
        @endif
     @yield('content')
 </body>
 </html>

//モデル app/Article.php
DBとモデルオブジェクトを対応付ける機能を Eloquent という
Eloquent の機能を継承しビジネスロジックを加えたクラスがモデル
Eloquentのリレーションには、1対n、1対1やn対n等が
$this->hasMany('App\Article');
$this->belongsTo('App\User');

//バリデーション
class ArticleRequest extends Request {
    public function authorize(){
        return true;
    }
    public function rules(){
        return [ //バリデーションルール
            'title' => 'required|min:3',
            'body' => 'required',
            'published_at' => 'required|date',
        ];
    }
}

//ミドルウェアでフィルタリングを実行 
 記事の作成や編集、削除はログインしていないと実行出来ないように制限する等
 app/Http/Middleware/ でフィルタを設定
 app/Html/Kernel.php の中でミドルウェアをシステムに登録
 コントローラにミドルウェアの設定
 View もログイン状態に応じて表示制御
 Middleware の新規作成(基本的なものは元々ある)
 php artisan make:middleware MyMiddleware

//ファサード
サービスコンテナで利用可能なクラスへのstaticインターフェースを提供
サービスコンテナからオブジェクトへのアクセスを提供するクラス
Route::get('/', 'WelcomeController@index'); で呼ぶがファサードがあり実際は下記
$this->app->make('router')->get('/', 'WelcomeController@index');
<?php namespace Illuminate\Support\Facades;
class Route extends Facade {
    protected static function getFacadeAccessor() {
        return 'router';
    }
}
実際に作成↓
対象となるクラスの作成 class Payment {
サービスプロバイダの作成 php artisan make:provider PaymentServiceProvider
サービスコンテナに paymentキーでPaymentクラスをバインド
class PaymentServiceProvider extends ServiceProvider {
    public function boot(){  }
    public function register()    {
        $this->app->bind(
        );
    }
}
config/app.php に PaymentServiceProviderを追加
ファサードクラスを作成
namespace App\Facades;
use Illuminate\Support\Facades\Facade;
class Payment extends Facade {
    protected static function getFacadeAccessor() {
        return 'payment';
    }
}
config/app.php に Paymentファサードのエリアスを追加
    'aliases' => [
        'Payment' => App\Facades\Payment::class,
    ],
app/Http/route.php 内で Paymentファサードを使用
Route::get('pay/{money}', function($money){
    return \Payment::pay($money);
})->where('money', '[0-9]+');
この場合はここへアクセス http://localhost:8000/pay/10000
            'payemnt', 'App\Services\Payment'


===============
■その他の機能
オートローダー
 require "vendor/autoload.php";
 autoload設定はcomposer.json を修正
ロガー
 Monolog\Logger
エラーログ
 storage/logs/*.log
メール送信
 Mail::raw()
 Laravel 5.3 からは artisan make:mail でMailable の派生クラス
  php artisan make:mail Hello
  app/Mail/Hello.php が作成される、Viewで本文
  Mail::to('reciver@example.com')->send(new Hello($name));
データベース管理(migrationファイルを作成→migration実行)
 php artisan make:migration create_users_table --create=users
 php artisan migrate
  database/migrations/2014_10_12_000000_create_users_table.php ができる
  php artisan migrate:rollback でロールバック
Bootstrap
 靴紐のソースを npm でダウンロードしLaravel Mixで public に配置
デバッガー
 composer require barryvdh/laravel-debugbar でインスコ
  config/app.php のサービス・プロバイダーとファサードに以下の設定を追加
  Barryvdh\Debugbar\ServiceProvider::class,
  'Debugbar' => Barryvdh\Debugbar\Facade::class,
デバッグ
 dd($articles->first());  // dump and die ダンプして停止
   Log::debug("incoming: GET hello");
   Log::info("incoming: GET hello");
   Log::warning("incoming: GET hello");
  debug,info,notice,warning,error,critical,alertの7つ、storage/logs/に出力
全件
 $articles = Article::all();
作成日の降順に記事をソート
 $articles = Article::orderBy('published_at', 'desc')->orderBy('created_at', 'desc')->get();
$articles = Article::latest('published_at')->latest('created_at')->get();
現在より以前
 $articles = Article::latest('published_at')->latest('created_at')->where('published_at', '<=', Carbon::now())->get();
フラッシュメッセージ
 composer require laracasts/flash
Named rootはURLでなくルーティングに別名をつける
 return redirect()->route('articles.index')
CRUDはリソースコントローラで一気作成ができる
 php artisan make:controller PostsController --resource
 // routes/web.php
 Route::resource('posts', 'PostsController')->only(['index', 'show']);
 Route::resource('posts', 'PostsController')->expect(['create', 'store', 'update', 'destroy']);
IDEでファサードの補完を行う
 composer require barryvdh/laravel-ide-helper
 php artisan ide-helper:generate
ページネーションで1ページに表示するデータ数を指定
$articles = Article::latest('published_at')->paginate(15);
 render() でページネーションリンクをビューに生成 {!! $articles->render() !!}
サービスコンテナ
 サービスコンテナへクラスをバインドすると(キー名とクラスの紐付け)、クラス間の依存性を管理しやすい
 インターフェイスでバインドとタイプヒントで依存性注入
 $this->app->bind('SenderInterface', 'MailSender');
  singleton()でバインドすると何度コンテナが呼び出されても同じインスタンスが返されメモリ効率が良い
  $this->app->singleton('sender_single', 'MailSender');
 Route::get('send/{message?}', function(Messenger $messenger, $message = '合格') {
    return $messenger->send($message);
 });
サービスプロバイダー
 config/app.php にリストアップされ起動時に読込
 Composerを使ってパッケージをインストールしたもの
 vendor/laravel/framework/src/illuminate/Auth\AuthServiceProvider等を見ると
 register()に登録を実装、boot()でそのサービス固有の初期処理を自由に実装
  作成は php artisan make:provider MessengerProvider

■依存性の注入という概念を核とするフレームワーク
依存性の注入,Dependency Injection(DI),Inversion of Control(制御の反転)とも言われ(IoC)
DI コンテナでクラスの生成を1箇所に集約、保守性、柔軟性、テスト性が上がる
composerでカレントディレクトリにPimpleをインストール
 composer require pimple/pimple:~3.0
Illiminate\Foundation\Application クラスが DI コンテナにあたります
<?php
require "vendor/autoload.php";
interface SenderInterface {
    public function send($message);
}
 
class MailSender implements SenderInterface {
    public function send($message) {
        return "メールで送りました。";
    }
}
class GMailSender implements SenderInterface {
    public function send($message) {
        return "GMailで送りました。";
    }
}
class Messenger {
    protected $sender;
    public function __construct(SenderInterface $sender) {
        $this->sender = $sender;
    }
    public function send($message) {
        return $this->sender->send($message);
    }
}
//Config(DIコンテナにバインドすると言う)
$container = new Pimple\Container();
$container['mail'] = function($container) {
    // return new MailSender();
    return new GMailSender();
};
// メールで送る
$messenger = new Messenger($container['mail']);
echo $messenger->send("合格通知") . "\n";
?>

■ジョブキュー(Job Busというのもあるらしい)
時間の掛かる処理を非同期で実行、下記の6種類くらい
sync: デフォルト設定で、実際には同期処理として動きます
database: データベースをジョブキューとして使います
beanstalkd: beanstalkd オープンソースのジョブキューです
sqs: Amazon Simple Queue Service 有料サービスです
データベースの場合
.env、config/queue.phpを編集
ジョブテーブルが必要
php artisan queue:table
php artisan queue:failed-table
php artisan migrate
ジョブの作成
php artisan make:job SendReminderEmail --queued
app/Jobs/SendReminderEmail.php にできるので処理
コンストラクタでこのコマンドに必要なデータを受け取る
handle() メソッドでこのコマンドがやることを実装
routes.phpでQueue::push()やコントローラを作成しdispatch()を使う
データベースの jobs テーブルを確認
select * from jobs;
キューの中のジョブを実行するには、キューリスナーを動かす必要がある
php artisan queue:listen
キューの最初のジョブだけ実行したい場合(リスナーならずっと動くから)
php artisan queue:work

■タスクスケジューラ(Cronの代わり)
app/Console/Commands/Kernel.phpに記載
$schedule->command('auth:clear-reminders')->daily();
$schedule->call('YourClass@someMethod')->hourly();
$schedule->exec('cp oldThing newThing')->weekly()->mondays()->at('13:00');
毎分のcronエントリー1つだけ必要
* * * * * php /path/to/artisan schedule:run 1>> /dev/null 2>&1

■イベントとリスナー
app/Providers/EventServiceProvider.phpに登録
class EventServiceProvider extends ServiceProvider {
    protected $listen = [
        'App\Events\UserWasRegistered' => [ //イベント
            'App\Listeners\SendWelcomeMail', //リスナー
        ],
    ];
}
イベントとリスナーの生成
php artisan event:generate
 event:generateは、app/Providers/EventServiceProvider.phpを参照してイベントクラスとリスナークラスを生成
 app/Listeners/SendWelcomeEmail.php、app/Listeners/SendWelcomeEmail.phpに処理を追加
トリガーは \Event::fire(new UserWasRegistered($user));
手動でphp artisan optimizeを実行してcompiled.phpが生成されるディレクトリは vender から bootstrap/cache にv5.1で変わった
追記したサービスプロバイダよりも、compiled.php内のクラスの方が優先して読み込まれます
rm vendor/compiled.php か artisan clear-compiledで削除


Posted by funa : 12:00 AM | Web | Comment (0) | Trackback (0)


January 3, 2016

XSS, CSRF, JSOP, SSO
■XSS対策、CSRF対策、脆弱性チェック
情報処理推進機構にチェックリスト有
https://www.ipa.go.jp/security/vuln/websecurity.html
XSS対策
 フォーム送信後の確認画面ではHTMLエスケープ等でサニタイズされた内容の結果を表示
 DBへのクエリについてはプレースホルダやエスケープ等でSQLインジェクションを防ぐ
CSRF対策
 前ページでhidden値を入れる
クッキーに具体的なものは入れない、CookieにHttpOnly属性、HTTPS通信ではsecure属性
エラーメッセージを表示しない
不要なファイルは削除

■JSONP
scriptタグを使用してクロスドメインなデータを取得する仕組みのことである。 HTMLのscriptタグ、JavaScript(関数)、JSONを組み合わせて実現される

GoogleAnalyticsのクッキーは1stパーティでサイト側がオーナでありGoogleがオーナーではない
 サイト側のJSでクッキーが作成されるようなっている
 クッキーが送信される相手はどこか?が重要でGoogleでなくサイト側に送信される
 アクセス履歴は別途データをGoogleに送信しており、クッキーはセッション管理に使用される


■SSO
色々な方法がある、SAMLや、サイトにエージェントを組み込み+SSO認証サーバ等
ロジックを確認しないと詳しくは分からない

Posted by funa : 10:53 PM | Web | Comment (0) | Trackback (0)


January 3, 2016

Git

■Git
https://backlog.com/ja/git-tutorial/intro/01/

Gitクライアント、Sourcetree/TortoiseGit etc
リモートリポジトリとローカルリポジトリ
ワークツリー(作業)とインデックス(中間)
バグ修正や機能追加などの異なる意味を持つ変更は、できるだけ分けてコミット
コメント 1行目 : 変更内容の要約 2行目 : 空行 3行目以降 : 変更した理由

Staged changes(index)に入れる → コメントを付記しCommitする
PushしリモートリポジトリにUPする(fast-forwardマージ)

cloneで、リモートリポジトリの内容を丸々ローカルリポジトリとしてDL
Pullで、リモートリポジトリから最新の変更履歴をローカルリポジトリにDL

///ブランチ運用モデル https://backlog.com/ja/git-tutorial/stepup/05/
master(デフォ)
hotfix
release
develop
feature
 masterとdvelopの2つがメインブランチで大きな流れ
 releaseブランチでリリースの調整、ブランチ名にrelease-をprefix
 緊急修正の場合hotfixブランチで調整、hotfix-をprefix
 featureブランチで機能追加しdevに纏める



ブランチを切り替えるにはチェックアウト
HEADとは現在使用しているブランチの先頭を表す(更新の先頭のイメージ)

stashでコミットしていない変更を退避させ、今すぐやりたい作業をしてから、退避させていた変更を取戻して作業を再開することができる

mergeは複数のブランチを統合し両方の変更を取り込んだマージコミットが作成されます。masterブランチの先頭はそのコミットに移動。non fast-forwardを行うとブランチがそのまま残る

rebaseはmasterブランチの前に別ブランチの内容を付与する。先頭はmasterブランチのままなので、mergeもする。トピックブランチに統合ブランチの最新のコードを取り込む場合はrebaseを使う。iオプションでコミット書換、入替、削除、統合の制御可

pullを実行してから次のpushをするまでの間に、ほかの人がpushをしてリモートリポジトリを更新してしまっていた場合、マージを行なって他の履歴での変更を取り込むまで自分のpushは拒否されます(競合)マージは自動統合を行うが同じ箇所の場合はエラー。解決をして自分でコミットする必要がある

fetchは単にリモートリポジトリの内容を確認したいだけの時。ローカルに統合したい時はFETCH_HEADをマージするか、改めてpullを実行します

軽量タグと注釈付きタグの2種類。軽量タグはローカルで一時的に使用。タグで過去に戻せる

amend:直前のコミットを修正
revert:指定したコミットを打ち消すコミット
reset:コミットを捨てる
 変更したインデックスの状態を元に戻す(mixed)
 最近のコミットを完全に無かったことにする(hard)
 コミットだけを無かったことにする(soft)
cherry-pick:指定のコミットを現在のブランチに取り込む
mergeのsquashオプション:該当ブランチの全コミットを一つのコミットに纏めて統合

プルリクエスト https://backlog.com/ja/git-tutorial/pull-request/03/
機能追加や改修など作業内容をレビュー・マージ担当者やその他関係者に通知する
 プッシュされたコミットは自動的にプルリクエスト上に反映
 プルリクエストは一覧され未完了のプルリクエストを確認しレビュー・マージ担当者は漏れなく処理可
 ソースコードの変更箇所をわかりやすく表示、コメントのやり取り可
1[開発者] 作業対象のソースを clone または pull
2[開発者] 作業用のブランチを作成
3[開発者] 機能追加、改修といった開発作業
4[開発者] 作業が完了したら push
5[開発者] プルリクエストを作成
6[レビュー・マージ担当者] 通知されたプルリクエストから変更を確認しレビュー
7[レビュー・マージ担当者] レビュー結果を判断し必要ならば開発者にフィードバック
8[レビュー・マージ担当者] レビューの結果、問題がない場合はマージ
9[レビュー・マージ担当者] レビューの結果、対応自体が不要となるなど、プルリクエスト自体が必要ない場合はクローズ




====================
Gitクライアント Sourcetree
https://eng-entrance.com/sourcetree-use
https://tracpath.com/bootcamp/learning_git_sourcetree.html

新しいverのSourcetreeではインストールができなかった ver 2.6.10.0ならOK
https://www.sourcetreeapp.com/download-archives
 IEは上手く動かず Chromeを使う こちらでもインスコはできなかったが
 SSH鍵をputtyで https://webkaru.net/linux/putty-ssh-login-public-key/
 データフォルダに.gitフォルダがあるので別のGITクライアントでもデータフォルダをDDするだけ
 文字化けはKB4074906では直らなかった、UTF8⇔Shift-jisでも直らん?

Posted by funa : 12:00 AM | Web | Comment (0) | Trackback (0)


January 2, 2016

Fucking tire
自転車タイヤのチューブ、アウチ。監視カメラ付けよ。20インチ

Panaracerタイヤチューブ 20x1.50~1.75 英式バルブ 0TH20-15E-NP 170g
701円で去年買ったが1年も経たずに駄目。日本製はダメかも。→しかしやはり横を安全ピンでヤラレてましたな、トレッドでなかった。日本製ではなく日本が駄目なのでは。

TIOGA TIT12700 20×1.50-1.75 英式チューブ 130g
やったらどうや、909円(本体475円)。重さどおり少し薄いな。

---------------------

サイドウォールが補強されているというタイヤだが十分に柔らかいな、MTBに比べてだが。なおビードは硬い模様。ロゴは良いが、タイオガ使いたいな

---------------------

■ノーパンクタイヤ
ムース/ウレタン系、クッション性や重さ、脱輪、経年劣化等の問題:街乗ならOKだな
http://hamamuratakuo.blog61.fc2.com/blog-entry-915.html
http://55net1.com/wp/post-314/
発砲ウレタン
http://www.monotaro.com/p/4108/2343/?gclid=CL7GzYWEscsCFYwHvAodPRICmA&utm_medium=cpc&utm_source=Adwords&cm_mmc=Adwords-_-cpc-_-PLA-_-41082343&ef_id=VY-Y1QAAAaoBz58O:20160308115508:s

タイヤ穴開けられるの嫌なので試した。ウレタンを詰めたが、ビードストッパが無いためタイヤがリム落ちした(脱輪)。失敗。そーいやオートバイはビードストッパ2つやったな。
ホイルナット15mm。ワックスはちゃんと事前に塗る。

HIPHOP踏み絵的なアレをまた始めたか、師弟制の牽制も効いてるし。NE似ー合わねんだー

Posted by funa : 08:00 PM | Bike | Comment (0) | Trackback (0)


January 2, 2016

Agile
■アジャイル
http://codezine.jp/article/detail/5465
スコープを柔軟化するため、スプリントで区切り、スプリント後は動作するようにする、しかしスケジュール/リソースは固定
ボトムアップとして(ストーリー、タスクなどの)バックログ。WBSはトップダウンだった
スクラムやXP等を使う
- 要求機能はストーリーとして表現される
- プロダクトバックログを作成し、直近のリリース(スプリント数個分)ごとにリリースバックログを作成する
- スプリントごとにスプリントバックログとして作業を詳細化(時間単位)する
- スプリントの完了時には、テストされ、デモが可能な状態でなければならない
スプリントを導入しても、設計、実装、単体テスト、結合テストとタスクを分割していたのでは、ミニウォーターフォール
 逆に管理工数がかかったり品質が下がるかも。継続的統合やテスト駆動開発などが要る

1.計画を簡易的に行なう(スプリント単位で等)
2.その代わり定期的に見直す
3.簡易な計画/管理ツールを利用する
4.チームとしてスケジュールを組む

粗い要求までもリストアップするプロダクトバックログ(エクセルレベルで可)
次のリリースのためのリリースバックログ(エクセルレベルで可)
直近のスプリントのためのスプリントバックログ(タスク管理システムにすると意識しなくても良いかも)

初日にプランニングミーティングを行い、直近(2週間等)のタスクを計画
そして、毎日デイリースクラムを実施し、最終日にレトロスペクションミーティングで締めて
スプリントの1サイクルとなる

ミーティングでは、タスク管理システムないしは、
ホワイトボードに張られたタスクやバックログリスト(場合によってはガントチャート)などの
タスクを一覧できるツールを用いる

 ///プランニングミーティング
 プロダクトバックログから優先順位に従って選択したストーリーをタスクにブレークダウン
 ミーティング前
  1.タスクを決定する
 ミーティング時
  2.前スプリントのタスク完了を確認する
  3.メンバーの予定作業時間を確認する
  4.スプリントのゴールを共有する
  5.タスクを説明し工数を見積もる
 ミーティング後
  6.タスクを割り当てる

 ///デイリースクラム
昨日何をしたか?
今日何をするか?
進捗を妨げている問題は何か?

 ///レトロスペクションミーティング
 何をしたかについて、1人数分から十数分説明する
 何ができないか、どのような課題が残っているかに言及する


↓↓↓↓↓↓アジャイルから明確にスクラム

■スクラム
https://qiita.com/gold-kou/items/90ba982a14ca79d843c9
///対話の価値(左が要らないとは言っていない)
プロセスやツール < 個人と対話
包括的なドキュメント < 動くソフトウェア
契約交渉 < 顧客との対話
計画に従う < 変化への対応

透明性:スクラムチームの現状や問題点を見える化すること
検査:見える化により問題点を見つけること
適応:スクラムチームに問題があった場合に、改善策を考えて対処すること

個人はスクラムチームのゴールの達成を確約しなければならない
メンバーは正しいことをする勇気を持ち困難な問題に取り組まなければいけない
全員がスプリントの作業とスクラムチームのゴールに集中しなければいけない
スクラムチームとステークホルダーは仕事や課題とその遂行の様子を公開する
メンバーはお互いを能力のある独立した個人として尊敬しなければいけない

 ///プロダクトオーナー(PO)
- プロダクトバックログアイテム(PBI)の管理
- リリース計画策定
- 市場調査
- ステークホルダとの対話
- 開発チームとの対話
- 予算管理
- スプリントレビューで"DONEの定義"にしたがって受け入れ判断をする
注意点:POを複数人で実施することも可能だが、その場合は代表者を1人決めておく必要がある。

 ///スクラムマスター(SM)
- 妨害リストの管理
- 妨害の除去
- POのサポート
- 開発チームのサポート
注意点:チームが自己組織化するために、SMはメンバーに直接的な指示(タスク割り当てなど)や管理(進捗管理など)をしてはいけない。スクラムにはPMは存在しない。

 ///開発チーム
- 開発、インクリメント(成果物)を完成
- プロダクトバックログの追加
- 妨害リストの追加
注意点:開発チームは自己組織化されており、外部から仕事の進め方やタスクを指示されるようなことがあってはならない。1つの開発チームは3-9人で構成されなければならない。それより少ないと機能横断的でなくなる可能性が高くなるためNG。多すぎると調整が大変になってしまうためNG。多すぎる場合は別のスクラムチームをもう1つ作るべき。開発チーム内で年齢や役職、会社の違いがあったとしても全員フラットな関係でなければならない。開発チームに専門能力の高いメンバーがいて、その分野ではその人に頼りがちだけど、そこで問題が起きたとしてもそれはそのメンバーだけの責任でなく開発メンバー全員の責任であることに注意する。

 ///ユーザーストーリー形式 
「〜として、〜したい。それは、〜だからだ。」を書きます。これは、INVEST(Independent, Negotiable, Valuable, Estimable, Small, Testableの頭文字をとったもの)を満たす必要があります。プロダクトバックログのDoneの定義も定義

 ///スプリントバックログ
開発チームにより作成される。スプリント期間中での修正、追加、削除も可能である。スプリントバックログの管理を行えるのは開発チームだけである。規模や工数はバラバラで問題ないが、1つのスプリントバックログアイテムの見積もりは1日以下の大きさに分割すること。スプリントバックログアイテムは"未着手"、"着手中"、"完了"などのいずれかのステータスがラベル付けされており、そのステータスが可視化されている必要がある。JIRAでも付箋とホワイトボードによるアナログ方式でもどちらでも問題ない。自己組織化されているので、誰かに割り当てられるものではなく自ら挙手する。設計、コーディング、テストコードの作成だけでなく、結合テストなどの実施、CI環境改良、ノウハウを残すなどもスプリントバックログとして分割するべきである。

 ///妨害リスト
スクラムチーム内外で、妨害になっていることを優先度順にリスト化したものである。どのロールの人でも追加できるが、妨害リストの管理の責任者はSMである。いつでも追加可能だが、特にデイリースクラムやスプリントレトロスペクティブで課題(妨害)の共有が行われやすい。

 ///スプリント
1ヶ月以内の固定した開発期間を何度も繰り返す。1週間、2週間、1ヶ月のいずれかが一般的。スプリント期間内に完了しなかったプロダクトバックログアイテムがあったとしても、スプリントを延長してはいけない。スプリントの中止はよっぽどのことが無い限り、行われるべきでないが、もしものときは実行権限を持つのはPOだけである。

 ///スプリント0
自己紹介、スクラム理論の勉強会(認識合わせ必須)、当面のプロダクトバックログの作成と共有、必要技術スキルの勉強会、開発環境構築などを行うスプリント開始前の準備期間のこと。必要期間はチームにより異なる。

 ///リリーススプリント
インクリメントの統合テストや通常スプリントで残ったタスクを実施してリリースを行うための特別なスプリント。 原則、このスプリントは存在しません。スプリント毎にリリース可能なものを作成するので、リリーススプリントが無いことが理想だが、そうでない場合に用意される。リリーススプリントはPOがリリース準備が整ったと判断するまで続く。

 ///イベント
開発チームでイベント以外のミーティングができるだけ行われないようにする。全てのイベントはタイムボックス化されている(何分とか、何時間までとかが決まっている)。もし、タイムボックスを超えてしまった場合、議論をそこで打ち切る必要はないが、タイムボックスを越してしまったという事実は妨害リストに追加したり、スプリントレトロスペクティブで話し合う必要がある。

 ///スプリントプランニング
第一部は全てのロールが参加する。ただし、第二部はPOは連絡がつく状態であれば参加しなくてもよい。第一部では、ベロシティをもとに今回のスプリントで対応できそうな範囲でプロダクトバックログを開発チームが選択する。(POが選択してはいけない)
プロダクトバックログはリファインメントによってすでに見積もりがされている状態のはずだが、リファインメント後に新規追加されたプロダクトバックログアイテム(つまり見積もりがまだされていないもの)が含まれている場合は、この場でリファインメントを実施する。第二部では、開発チームは選択したプロダクトバックログアイテムをスプリントバックログに分割する。これにより、POとSMにどのようにプロダクトバックログアイテムを消化できるかを伝えられる状態になる。分割したスプリントバックログに時間数を見積もり、その総計が1スプリントでのチームが開発できる時間をオーバーした場合は優先度の低いプロダクトバックログから外していく。逆に余裕がある場合なプロダクトバックログを追加する。POの予想より多すぎたり少なすぎたりする場合は、開発チームとPOは話し合う。開発チームは選択したプロダクトバックログアイテムを完了することに全力を注がなければならないが、完了することを約束するわけでない。なぜならば、見積もり時にはわからなかった技術的に困難な事象が発生することはよくあるからである。無謀な長期の残業は行わない。

 ///デイリースクラム
- いつ?⇒毎日同じ時間(一般的には朝)
- どこで?⇒どこでもいいがいつも同じ場所
- 誰が?⇒開発メンバー。SMは必要に応じて参加する。POは見学(発言は基本的にNG)してもよい。
- 目的は?⇒開発チームの検査
- どれくらい?⇒最大15分
昨日やったこと、今日やること、あれば課題(妨害)の共有。課題は共有に留めること。管理職の見学は避けたい。なぜならば、共有でなく管理職への報告になりがちで自己組織化が損なわれやすいのと、課題共有がしにくい雰囲気になりやすいからである。もし管理職にエスカレーションするべき課題があるならば、デイリースクラム後に報告すること。

 ///プロダクトバックログリファインメント
- いつ?⇒スプリント期間中であればいつでも良い。
- 誰が?⇒全てのロール
- 目的は?⇒プロダクトバックログの透明性の獲得
- どれくらい?⇒最大1日(8h)
POはプロダクトバックログの説明(前回からの変更分、追加分、削除分、詳細決定部分、順序変更部分など)を行う。リファインメントの対象は、次のスプリントあるいはさらにその次のスプリントで開発対象となりそうなくらいの範囲となる。優先度低いプロダクトバックログの説明までは行う必要はない。本当に実施するかも不透明だし変更も発生しやすいため。開発チームはプロダクトバックログへの意見(追加アイディアや順序変更や質問など)、新しいプロダクトバックログアイテムの見積もり、必要であれば再見積もりを行う。

 ///プランニングポーカー
プロダクトバックログの見積もりには"プランニングポーカー"と呼ばれる手法が一般的に使われる。プ開発チーム全員がフィボナッチ数列(0, 0.5, 1, 2, 3, 5, 8, 13,...∞)の値が書かれたカードを持ち、プロダクトバックログアイテムごとに「いっせーのせ!」でカード(見積もり)を提示する。この見積もりは単位のない"相対見積もり"である。見積もりの値が似たような値で均等に分散したとき(例えば5が3人で8が3人の場合)は、悲観的に考えて大きい値(ここでは8)をストーリポイントとして計算したほうがよい。

 ///スプリントレビュー
- いつ?⇒スプリントの終わり
- 誰が?⇒全てのロールとPOが招待した重要な関係者(ステークホルダーなど)
- 目的は?⇒インクリメントの検査とプロダクトバックログの適応
- どれくらい?⇒最大2時間(スプリント2週間の場合)
開発チームはインクリメントのデモを実施して、質問に答える。また、完了できなかったプロダクトバックログがあれば説明する。開発チームはデモをやることと受け入れに通ることばかり考えがちだが、大切なのはスプリントレビューを通して、よりよいプロダクトを得るための手がかりを見つけることである。デモはそのための手段であって目的ではないことに注意しよう。また、デモの説明スライドは作るべきでない。そこに労力が割かれがちだからだ。POはDONEの定義に従い、インクリメントが受け入れ可能かを判断する。

 ///スプリントレトロスペクティブ
- いつ?⇒スプリントレビュー後かつ次のスプリントが開始される前
- 誰が?⇒SMと開発チーム。POは参加してもよいが必須でない。
- 目的は?⇒スクラムチームの検査と適応
- どれくらい?⇒最大1.5時間(1スプリント2週間の場合)
スプリントで人・プロセス・ツールの観点から問題がなかったか、もっと成果を出すためにできることがないかを議論し、次回のスプリント以降の改善策を考える。手法として、KPT(Keep, Problem, Tryを出し合うこと)がよく使われる。

 ///ベロシティ
ベロシティとは、そのスプリントで開発したプロダクトバックログのストーリーポイントの合計である。スクラムチームはベロシティを高めて安定させることを目指す。そもそもストーリーポイントがいい加減な値。フィボナッチ数列の値しかだせないし、開発者は技術的な不安点があるからとりあえず大きな値をしばしば出しがちである。さらに、スプリントの日数は祝日、メンバの休暇などでスプリント毎に異なるものである。

スクラムではテスト専門チームの存在を許していない。スプリントの中で徹底的にバグを発見して潰すべきなのである。


■マネジメント向け アジャイルの利点
https://www.ryuzee.com/contents/blog/13147

Posted by funa : 12:00 AM | Web | Comment (0) | Trackback (0)


January 1, 2016

PHP Developer

■スクラム
https://www.bangboo.com/cms/blog/page_321.html
https://www.ryuzee.com/contents/blog/7137
プロダクトオーナー(バックログ並び)
スクラムマスター(外部からチームを守る)
デイリースクラム(毎朝)
プロダクトバックログをスプリントバックログに
ベロシティ(工数)
レビューをしてリリース可能な状態に(実際のリリースはビジネス判断)
スプリントレビュー(デモ)
スプリントレトロスペクティブ(チーム改善)

■PHP開発
http://www.objective-php.net/
オブジェクト指向(クラス、メソッド、プロパティ)、MVCについて
 まずプログラムが動くようにしてから必要ならクラス化やMVCにすればよい、大体は不要だが
  fatコントローラならページ化した方がいいのだが
  MVCのモデルMをロジックとデータの2段構成→ファイル増え逆に一元管理ができないしょ
   利点:オブジェクト指向は他言語への応用力鍛錬、MVCはVの役割分担、参入障壁
    Cを無くしVがハンドルする、Page-Objectモデルが、レスポンスも早く、込み入った処理/デザインも出来てよいけど
       靴紐やら枠嵌よりHTMLやら言語やらはネイティブがいい
 SPA(Single Page Application)はJSがサーバに欲しいデータを要求する、MVCがダメだからPOモデル

■オブジェクト指向のルール
カブセル化:隠蔽するべくできるだけpublicメンバを使わない
継承:親クラスのプロパティやメソッドが引き継がれる(private以外の)、ルールが多くありOOにできる
ポリモーフィズム(多態性):オーバライドやオーバロードでメソッドを状況で使分ける
//// アクセス修飾子
 public オブジェクト外からアクセス可
 private オブジェクト外からアクセス不可、継承されない
 protected オブジェクト外からアクセス不可、継承される
//// コンストラクタ
 __construct()はインスタンスの生成時に一度だけ自動的に実行される
 アクセス修飾子は基本的にはpublic
//// オーバーライド
 継承クラスで親クラスのメソッドを上書きし乗っ取る
//// 静的メンバ
 static修飾子をつける
 インスタンスを生成しなくてもアクセス可能(publicにしておくと)
 「クラス名::メソッド名()」で呼び出す
 staticメソッドはインスタンスから呼び出せない(クラス自体に属する)
  クラスのメソッドでなく関数のような役割
//// クラス定数
 const 定数名 = 値
 アクセス修飾子は付けられません(クラス定数はpublic扱い)
 定数名には「$」は付けません、define関数と同じ
 設定値の格納用として普通使う、クラスで纏め分類しておくとdefine関数より管理がし易い
 静的フィールドとの違いは値の変更が出来るか出来ないかだけ
//// 抽象クラス
 abstractをつける
 直接インスタンスを生成できず必ず継承して使用するクラス
 継承先のクラスで必ずオーバーライドする必要がある
 抽象メソッドとは処理内容を持たずに名前だけ定義されたメソッド
  共通で行う処理を抽象クラスとして定義し各画面の処理は抽象メソッドとしておく使い方
//// インターフェイス
 インターフェイスとは抽象メソッドのみ定義可能なクラス
 抽象メソッドだがabstractはいらない
 アクセス修飾子にはpublicしか指定できない
 直接インスタンスの生成はできない
 実装にはインターフェイスで定義されているメソッドは全て実装する必要があり、アクセス修飾子はpublicで引数の数も名前も完全一致が必要
  インターフェイスの実装でポリモーフィズムであることを保障できる
  インターフェイスは多重実装可
   class FoodProduct implements IProduct, IFood
//// タイプヒンティング
 引数で受取るクラスやインターフェイスを制限できる
  public function addProduct(Meet $product) ←Meetクラスを指定
  public function addProduct(IProduct $product) ←Iproductインターフェイスを指定
//// 名前空間
 異なる名前空間同士では同じ名前のクラスが定義できるようになる(長名になりがちなので)
 名前空間未指定はグローバル空間、\をつけるとグローバル throw new \Excetpion('hogehoge');
 クラス定義ファイルの頭にnamespaceキーワードで名前空間を定義 namespace Food;
 使用は2つの方法
 1)namespaceを含めたフルパスでクラス名を指定し使用 $item = new \Food\Product();
 2)前空間の利用宣言をあらかじめする use Food\Product; $item = new Product();
  同名だと衝突するので別名や階層化やオートローダ http://www.objective-php.net/basic/namespace
//// 例外
PHPは勝手に例外を投げないので自分で書くのであまり意味がない(新しい関数やクラスは例外を投げてくれるが)
try {
    if($a!==1){ throw new Exception('Bad'); }
    echo "End";
} catch (Exception $e) {
    Logger::write($e->getMessage());
    echo "ERror";
}
-> ERror

//// サンプル
<?php
//カプセル化、アクセス修飾子、コンストラクタ、セッター/ゲッターのメソッド、継承
class Product{
    protected $name; // 商品名
    protected $price; // 価格
    public function __construct($name){
        $this->name = $name;
    }
    public function getPrice(){
        return $this->price;
    }   
    public function setPrice($price){
        $this->price = $price;
    }
}
class FoodProduct extends Product{
    private $expire;
    public function setExpire($expire){
        $this->expire = $expire;
    }
    public function getExpire(){
        return $this->expire;
    }
}
$food = new FoodProduct('肉');
$food->setPrice(100);
$food->setExpire(30);
echo '価格を' . $food->getPrice() . '円に設定しました。';
echo '賞味期限を' . $food->getExpire() . '日に設定しました。';
?>
<?php
//静的メンバ(静的メソッド)
class PriceFormater{
    private static $fee = 10;
    public static function formatJapanese($price){
        $price = number_format($price + self::$fee);
        $price = $price . '円';
        return $price;
    }
}
$price = PriceFormatter::formatJapanese(3000);
?>
<?php
//クラス定数
class Tax{
    const IMPORT_TAX_RATE = 0.08;
}
class Product{
    const TAX_RATE = 0.05;
    private $price = 100;
    public function getSalePrice(){
        $tax = $this->price * self::TAX_RATE;
        $tax2 = $this->price * Tax::IMPORT_TAX_RATE;
        $price = $this->price + $tax + $tax2;
        return $price;
    }
}
var_dump(Product::TAX_RATE);
$prd = new Product();
$price = $prd->getSalePrice();
?>
<?php
//抽象クラス(文字追加の処理所要時間測定)
abstract class TimeMeasurer{
    abstract protected function process();
    public function exec(){
        $startTime = $this->getMicrotime();
        $this->process();
        $endTime = $this->getMicrotime();
        $procSecs = $endTime - $startTime;
        echo sprintf('処理所要時間は%s秒でした。', $procSecs);
    }
    private function getMicrotime(){
        $splitedMt = explode(' ', microtime());
        return $splitedMt[0] + $splitedMt[1];
    }
}
class TestClass extends TimeMeasurer{
    protected function process() {
        for ($i = 0; $i < 1000000; $i++) {
            $str .= 1;
        }
    }
}
$test1 = new TestClass();
$test1->exec();
?>
//インターフェイス、タイプヒンティング、(ポリモーフィズム)
---- Car.php
interface Car{
    public function start();
}
GasolineCar.php
class GasolineCar implements Car{
    public function start(){
        echo sprintf('%s エンジンOK', $this->gasolineIgnition());
    }
    //関数の戻り値の型をstringで指定
    private function gasolineIgnition(): string
    {
        return 'brrr';
    }
}
---- DieselCar.php
class DieselCar implements Car{
    public function start(){
        echo sprintf('%s エンジンOK', $this->DieselIgnition());
    }
    private function DieselIgnition(): string
    {
        return 'vvvv';
    }
}
---- driver.php
class driver{
    public function on(Car $car){
        $car->start();
    }
}
index.php
$driver = new driver();
$driver->on(new GasolineCar());
$driver->on(new DieselCar());

//// OO設計
index.php
 Dispacherを呼ぶ

abstract class Dispatcher
 URL引数を取得
class siteDispatcher extends Dispatcher
 URL引数から適切なコントローラを呼ぶ

↓abstract class RequestVariables
↓ $_POST、$_GETを取得
↓class Post extends RequestVariables
↓ Post変数
↓class QueryString extends RequestVariables
↓ Get変数
↓class Request
↓ Post変数とGet変数を纏める

↓class ModelBase
↓ モデルの共通機能(DB接続等)をstaticメソッド、継承してもいい

class CartController extends ControllerBase
 カート用コントローラ(ヘッダーやコンテント)
abstract class ControllerBase
 カート以外でも使用する共通機能(Post/Get取得やビュー呼出)

class CartHeader
 ユーザ情報等のカートのヘッダー情報のモデル
class CartContent
 リスト取得や追加や削除の操作のモデル

====

-> (クラスのフィールド名、メソッド名) アロー演算子 メンバ変数やメンバ関数を使う
:: (クラスのメソッド名) スコープ演算子 インスタンスを生成していないクラスのメンバ関数を使う事が出来る

    class Pet{
        var $dog = "wan";
        var $cat = "nyan";
        function func(){
            echo "Welcome";
        }
    }
    echo Pet::cat;
    $obj = new Pet();
    echo $obj->func();

phpにおける :: と ->に違いについて
アロー(->)演算子を使う場合 インスタンスプロパティとインスタントメソッドにアクセスする echo $a->name
スコープ定義(::)演算子を使う場合  静的プロパティと静的メソッドにアクセスする
https://qiita.com/mpyw/items/41230bec5c02142ae691

インスタンスプロパティインスタンスメソッド静的プロパティ静的メソッド
外部から$v->name$v->name()クラス名::$nameクラス名::name()
インスタンスメソッド内から$this->name$this->name()self::$nameself::name()
静的メソッド内からself::$nameself::name()

クラス名に変数が使えるので注意 $con = new AAA(); は下と同じ
 $className = 'AAA';
 $con = new $className();

$_SERVER['REQUEST_URI']等はグローバル変数なのでどこへでも書ける(クラスやメソッド内等)

====

可変変数
$test = "aaa";
$var  = "test";
echo $$var;     //"aaa"が出力
echo ${"test"};  //これも"aaa"が出力
echo ${$var};  //これでも"aaa"が出力
${"name_$test"}
$this->{$test}
$foo->{$start . $end}
$foo->{$arr[1]}

連想配列はforeach
 $preflist = array('Tokyo' => '東京', 'Osaka' => '大阪');
 foreach ($preflist as $key => $value){
   echo $key . ':' . $value;
 }
 $fruits = array("Orange","Apple","Berry");
 for($i = 0 ; $i < count($fruits); $i++){
  echo $fruits[$i];
 }

配列を指定した値で埋める
 array_fill (インデックス, 要素数, "値");
 $ar = array_fill (4, 3, "PHP");
 Array ( [4] => PHP [5] => PHP [6] => PHP )

配列の中で最も大きい数値を返します
 max( array(100, 200, 300) )
 min( 100, 200, 300 )

変数の整数としての値を取得する integer
 intval('122.34343The') = 122

平方根/べき乗を取得するには、sqrt()、pow()関数
 pow(8, 2) = 64
 sqrt( 16 ) = 4

NULLか変数ありか空か
 (is_null($val01) ? 'TRUE' : 'FALSE')
 (isset($val01) ? 'TRUE' : 'FALSE')
 (empty($val01) ? 'TRUE' : 'FALSE')

値の出現回数の総ざらい
 $array = array(1, "hello", 1, "world", "hello");
 print_r(array_count_values($array));
  [1] => 2, [hello] => 2, [world] => 1

asort($A)値で昇順にキー保持しソート、連想配列向き arsot($A, SORT_STRING)降順にソート,文字のモード
sort() / rsort() ソート後にキーが添字配列が付け直される

文字列を配列に変換する
 str_split('hel')
  [0] => H
  [1] => e
  [2] => l

配列に追加
 $hoge['key2'] = 'value2';
 $hoge[] = 'AAA';
 array_push($hoge,'CCC','DDD');

array から要素を削除、ループ中のcount()現象に注意
 unset($arr[1]);
 $arr = array_values($arr);//添字が0から振られ直す

breakはデフォルトでは一番内側のwhile文を抜けて次の処理へ移る
 ネストの場合は抜けたい階層の数を指定 break 2;
 現在のループ処理を抜けて、次のループ continue;

配列のキー・添字を確認
 $ar = array("PHP" => 4, "CGI" => 5);
 if(array_key_exists("PHP", $ar)){

配列の値の有無をチェック
 $ar = array("PHP", "CGI", "PERL");
 if(in_array("PHP", $ar)){

■Javascript
varを省略した場合、関数内での宣言であってもグローバル変数
関数外のvarはグローバル変数
関数内のvarのみローカル変数(だが、関数の中に関数を作ると
スコープチェーンによって内側のローカル変数から順に探していくので、
関数の外からは見えないが関数の内からはアクセスされる恐れがある)
関数を変数の様に書く、スコープチェーンやレンダリングが関係していると思う
//関数定義(objを返す)、objを受け取ってその中のメソッドを使う
create_row = function(){
 var tbody = document.getElementById("input_tbody");
 var new_row = tbody.insertRow(num_row+1); 
 var cell1 = new_row.insertCell(0); 
 var copy = function(cell,tb,arg){
  cell.innerHTML = tb.rows[num_row].cells[arg].innerHTML;
 }
 return {tbody: tbody, cell1: cell1, copy: copy};
};
copy_cell = function(obj_create_row){
 obj_create_row.copy(obj_create_row.cell1, obj_create_row.tbody, 0);
};
//ここからフロー
loading();
setTimeout(function(){
  obj_cr = create_row();
  copy_cell(obj_cr);
  num_row++;
 }, 200);

■CSSレイアウト
https://www.bangboo.com/cms/blog/page_307.html
Grid 格子状のレイアウト
flexbox 1行の横並び、縦並び
float テキストの回りこみ
https://speakerdeck.com/tonkotsuboy_com/2019nian-madenijian-zhi-siteokitai-cssjavascriptfalseshou-fa
https://qiita.com/kura07/items/e633b35e33e43240d363
https://idotdesign.net/blog/web/htmlcss/css-grid-layout/
http://www.htmq.com/css3/

■Laravel ララベル
https://coinbaby8.com/laravel-php-dekirukoto.html
https://laravel10.wordpress.com/
ルーティング:  URLと対応 .phpで終わせず処理をひとつのファイルやクラスにまとめる
Blade:  テンプレートエンジン
ミドルウェア: URL前後に処理を付加
エラーハンドラ: 例外やエラーが発生した際の処理
DI : サービスコンテナというのを用いクラスインスタンスの依存度を極力下げて、実行時に外部から与えてもらえるように
バリデーション:  入力値のチェックを設定のみで自動的に
データベース連携
認証の自動化

インスコ~機能~使い方
https://www.bangboo.com/cms/blog/page_324.html

■IDE/Editor
VS code, Atom, PhpStorm, etc.
HTMLエディタ: Dreamweaver, Brackets etc.
 https://hota1024.com/2018/02/19/php%E3%81%AE%E3%81%8A%E3%81%99%E3%81%99%E3%82%81%E3%82%A8%E3%83%87%E3%82%A3%E3%82%BF5%E9%81%B8/
Visual studio codeにPHP intelephense、PHP Debugを入れる?

■Git
https://www.bangboo.com/cms/blog/page_322.html

■XSS対策、CSRF対策、脆弱性チェック
https://www.bangboo.com/cms/blog/page_267.html

■SQL
https://www.bangboo.com/cms/blog/page_151.html
https://www.bangboo.com/cms/blog/page_154.html

Posted by funa : 10:47 PM | Web | Comment (0) | Trackback (0)


January 1, 2016

11 Tips of Excel
■エクセル操作の注意点
  1. コピー等をする場合はフィルターを一旦解除して、フィルターを操作し直してから行うとミスがすくない
  2. フィルターをかけてコピーしたものを、フィルターが掛かった枠にはペーストできない→そのコピペは連続カラムに貼られる
  3. しかし、フィルターを掛けた状態で、セルを同じ値でドラッグして埋めることはできる
  4. 可視状態のものをコピー: ALT+; 押しながらコピー
  5. 相対パス A1 絶対パス $A$1 これは適切に指定
  6. 計算式で出したものはコピー>値で実体値をペーストする列を作ってそっちを操作するとミスが少なくなる
  7. フラグ対象の値を取り込み =COUNTIF($Q$1:$Q$3500,A2)>=1 で判定しフラグを付与 TRUEが付く
  8. IDリストと付与値を取り込み =IFERROR(VLOOKUP(A2, $C$2:$D$3500, 2,FALSE),"") で該当IDに値を付与する
  9. 優先順に判定する IF文を使用、空欄の場合はB2,C2,D2と移動し一番左を採用 =IF(B2<>"", B2, IF(C2<>"", C2, IF(D2<>"", D2, "")))
  10. 動画リンクを作るために文字を足す ="http://aaaa?id="&A2
  11. リンクを付ける =HYPERLINK(C3) 直接リンクを貼る事は出来ず別カラムが必要、マクロの方法もあるが

Posted by funa : 12:00 AM | Gadget | Comment (0) | Trackback (0)


PhotoGallery


TWITTER
Search

Mobile
QR for cellphone  QR for smart phone
For mobile click here
For smart phone click here
Popular Page
#1Web
#2Hiace 200
#3Gadget
#4Column
#5RSS Radio
#6Ressentiment
#7Being The Ideal Boss
#8Estimation
#9Flavor
#10PC SPEC 2007.7
#11Watch Out
#12Darwinian Theory Of Evolution
#13Doing?
#14Re-install my OSXP
#15Europe
#16Make your front wheel right
#17Cache
#18通話SIM
#19セレブ
#20GoogleMap Moblile
#21Plasticity
#22People never say truth, Just do it, observe them, Anything is impossible
#23The black sheep to the black ship
#24The team that always wins
#25Optimost
#26Who's BAT? (Batch file)
#27Automobile Inspection
#28α7Ⅱ
#29Detected as bad site by virus company
#30Windows env tips
#31/// BANGBOO BLOG /// From 2016-03-01 To 2016-03-31
#32Ora Ora Ora Ora Ora
#33ahe-ahe is goooood for your brain
#34Summer time blues
#35SN
#36Win7 Insco
#37Great games before VR
#38無料ストレージ
#39RAMちゃ~ん
#40Wifi security camera with solar panel & small battery
#41ライブ
#424 Pole Plug
#43I want to ride my bicycle
#44System designing
#45It tests you
#46Hiace oil change
#47/// BANGBOO BLOG /// From 2012-08-01 To 2012-08-31
#48Bike
#49Norton Internet Security
#50F☆ck CSS
#51ZETA Pivot
#52Fail Safe & Fault Tolerance
#53株式取引モバイルサイト - TOKIO Shock Exchange
#54CSS Selectors
#55Shooting star
#56Information privacy & antispam law
#57Contaminated
#58映像制作
#59/// BANGBOO BLOG /// From 2015-08-01 To 2015-08-31
#60Sharpen up
#61角印
#62Google Sitemap
#63Tools - free icon etc
#64Bank transfer fee
#65Positive
#66Oxcelo
#67Victorinox PLI traveller
#68Ant
#69XSS, CSRF, JSOP, SSO
#70Politics
#71Emancipation Proclamation
#72Street fighter 4
#73/// BANGBOO BLOG /// From 2016-07-01 To 2016-07-31
#74Fork OH
#75My mic
#76ウェブサイトサムネイルAPI
#77Big D
#785-year-old shit
#79True April Fool
#80Spy Extraction
#81ApacheBench
#82/// BANGBOO BLOG /// From 2017-12-01 To 2017-12-31
#83Tora Tora Tora
#84Engine OH
#85After Effects
#86The beginning of CSSレイアウト
#87Online softwares
#88Rope
#89PC SPEC 2011.10
#90Cisco Catalyst
#91Photo Boo
#92How to make a bomb - 爆弾の作り方
#93着メロの掲載っていくらかかんの?
#94Assertive Behavior
#95Movable Type
#96Personal Information Privacy Act
#97Link Bait
#98Availability
#99One of the net service TVCM
#100/// BANGBOO BLOG /// From 2014-07-01 To 2014-07-31
Category
Recent Entry
Trackback
Comment
Archive
<     January 2016     >
Sun Mon Tue Wed Thi Fri Sat
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 28 29 30
31
Link