shie2’s diary

仕事とかエフェクターとかもろもろのために

Javaが嫌い。

JAVAの人と話してると思うんだけど
技術とか手法とかの話しは
ばんばん出てくるけど
お客さん目線での話しになるとうっすくなる。

いいコードを書くと
改修のコストを抑えられる。
いいプログラマだと早くコードがかけるから
コストを抑えられる。

う~ん確かにそうだね間違いじゃ無い。

あぁ~。 コストを抑える話しばかりですぜ。
それが悪いわけじゃない。
でもいいシステムを提案できて、
コストかけてくれるように持っていければ 抑えた分のコストぐらいなら
プラスアルファでかけてくれますぜ。
その上でコストを抑えてもらえれば
メッチャ助かります。

あぁ!
お客さんと話しできないんだね。
可哀想に、下請けさん?

より良い物が何か自分で判断して
提案できないから、
求められた物をより良く作るしかできないんだね。

誰かが企画し物で
使う人の顔や不満を知らないまま
システムを作るんだね。
面白くないよね。
んで、小手先の技術を追い求めるんだね。
解る。
俺なら1日でやめるね。 この機能でどんな事ができるようになって、この機能がない今はどんな不満があるのか。
を知ると、この機能で本当に良いのか?
って話になるから僕はこう言う話がしたいんだけど そういう話じゃないんだね。

そしてエンドユーザー、(実際にシステムを使う人)が喜ぶのは
いいコードのシステムじゃないからね。 求めてたドンピシャの機能があるシステムだからね。 ドンピシャの機能があるならソースなんてなんでも良いと思うよ。 改修の時にめんどくさく無いように 最低限キレイにするべきだけどね。

お客さんに向いて仕事しようよ。 コードや同業じゃなくてさ。

と思うPHPの技術者でした。

システムやって何?

今日大発見をした。 僕がしたい事っていいコードが書きたい訳じゃ無くって、 お客さんがソフトに求めてる事以上の事を 提案する事でお客さんにお前スゲぇ〜な~。 って言われたいだけなんです。

お客さんが思う以上の物を作る為には 自社の不利な事も言うし、 あえて自社で仕事しないという結果を選んだ事もあります。

今日ねぇ〜。 高い技術力で正しいコードを書く事が正しい事やって言ってる人と話したんだけど、 その人が言うには、正しいコードを正しく書くことがコストに繋がると言うんですが、 お客さんに対する目線の無さに笑いそうになった。

あー。
お客さん(作ったシステムを日々使うシステムの事は詳しく無い人)と話した事ないんだなぁ〜と。
この人のお客さんはシステム屋で実際に使う人はお客さんじゃないんだなぁと。

一生下請けwww

そして何故僕が、そういう技術屋を馬鹿にしてしまいかと言うと、ど素人の僕はキレイに治すよりもその時の僕に合った方法を提案してくれる車屋のほうが良いと思うから。
新車だったりあと10年乗る気満々ならチョット高くても、後から手を加えるときに余計な費用が掛からないようにキレイに作業して欲しい。
でも次の車検で乗り換えを検討してるならとりあえず乗れるように最低限の修理で安く抑えたい。
もしくはずっと乗ってたいけどお金が無い。
その時々にあった方法を一緒に考えて教えてくれる車屋にお願いしたいと思うから。

車が好きだから車で例えるけど、 正直作業の結果なんて普段見えないし、見えない所をメッチャキレイにする為の費用を払うなら、 チョット汚いです。って宣言してくれて そこで安くします!とか。 普通は邪道なんだけどこうしたら安く仕上がりますよ。 その代わり何年か後にこうなる可能性があるけど、ぶっちゃけ今までのお客さんでこっちを選択人はどうだったとか。 車屋としてはおすすめしないけど次の車検まではぎりぎり持つと思うとか。 そっちの方が絶対に納得できると思うんです。 もう10年乗るならこんな故障が起こる可能性が高いのでここはこんなふうに直した方がその時にいい目見ますよ。でも予算的にこうなります。

僕はそれをシステムやソフトウェアで実現したいのね。
僕はそうして欲しいから、
そんなふうにできたらお客さんは お前スゲぇーな~ ってなると思うんですよね。

Vue.jsを使ってみた。ていうか使いたいから勉強中

先に今回作ったソース

HTML

<!DOCTYPE html>
<html lang="jp">
<head>
   <meta charset="UTF-8">
   <title>vue_test</title>
</head>
<body>
    <div id="app">
    <!-- 1 -->
        <p>{{message}}</p>
        <!-- 2 -->
        <div>{{aaa}}</div>
        <!-- 3 -->
        <button class="btn" v-on:click="btnClick">ボタン</button>

    </div>
    <!-- 4 -->
    <script src="https://unpkg.com/vue"></script>
    <script>JSが入る
   </script>
</body>
</html>

JS

// 5
var testViewModel = new Vue({
    //6
    el: '#app',    
    //7
    data: {
        //8
        message: 'テストテスト',
        aaa:'123456789'
    },
    //9
    methods:{
        //10
        btnClick:function(){
            this.aaa = 'qwerr';
            this.message='asdfghhj';
        }
    }
})
// end testViewModel

処理の流れ

初期表示時の動き

  • //6で指定したDOMに対して操作することにするよ~
    この場合はIDがappっていうDivやね。
  • //7で指定したdataの中のkeyを{{key}}といれかえるよ。
    この場合は{{message}}をテストテストに入れ替える。

これで、初期表示は終了

クリックイベント

クリックイベントを登録したいやつにv-n:clickを入れておく

<button class="btn" v-on:click="btnClick">ボタン</button>

これです。

v-on:click:VueのイベントにこのDomのclickイベントを登録するよ~
btnClick:クリックしたときにmethodsのbtnClickっていう関数を実行してね~

です!!!

以上!

大変だ! Jqueryに戻りたい(泣)

AIについて調べてみた。

今はやりのAIについて調べてみた。

AIってどうなのよ!

IT系のニュースでは「○○○○をAIで作る」みたいな事がよくやってるけど、

俺にできないのかな?

とか思ったわけです。

結論

できる。

 

googleのtensorflowとkerasっていうFWと

大量の画像で、自作で自動きゅうり選別機を作った人もいてるみたい。

こちら

すんげぇ~です。

先輩!!!

 

 

 

typeScriptに興味を持ってみる

わたし、WEBエンジニアなんですが、
JSのうざさってなんだろう

  • 処理が多くなってきたらJSファイルがくちゃる
  • 処理が多くなってきたらJSファイルがくちゃる
  • 処理が多くなってきたらJSファイルがくちゃる
  • 処理が多くなってきたらJSファイルがくちゃる

とまぁ~
こんな感じで4つ思いつたwww

ごめん

でも、くちゃるのが本当にうざい。
リリースして半年後とかにJSを見るとほんと大変なのよ

これがちょっとでも楽になるなら使ってみたいと心から思う。

でも、基本コンパイラーはVisual Studioなのよねぇ~。
普段つかってるのってsublimeTextなのよね~。
jsのプログラムだけ、Visual Studioとかなんのこっちゃなのよね~。

でもコンパイラーのためにnode.js入れるのもなぁ~
とかおもっていましたが、
Gulpなるものを発見した。
こちらの記事を読むと
ちょっと!!!奥さん!SCSSのコンパイルとかJSの圧縮とかファイル監視ができるって!!!

うん。やってみよう!

node.js + gulp + typeScript + jquery + SCSS +Ruby + compass

でソースCSSとJSを沸かして

codeigniter + css + jquery + js + apache

でwebシステム構築かな?

なんじゃそれ!

うぅ~ん。

昔は秀丸とapachでサイトつくってたのに、
便利(うざい)ツールたっぷりで
逆に環境作るのがちょ~めんどい

新人に教えるのめんどいなぁ~

【codeigniter】codeigniter3でsqlite3を使うよ!

application/config/database.php

<?php
$active_group = 'sqlite';
$query_builder = TRUE;

$db['sqlite'] = array(
    'dsn'  => 'sqlite:'.APPPATH.'sqlite/db.sqlite',
    'hostname' => '',
    'username' => '',
    'password' => '',
    'database' => '',
    'dbdriver' => 'pdo',
    'dbprefix' => '',
    'pconnect' => FALSE,
    'db_debug' => (ENVIRONMENT !== 'production'),
    'cache_on' => FALSE,
    'cachedir' => '',
    'char_set' => 'utf8',
    'dbcollat' => 'utf8_general_ci',
    'swap_pre' => '',
    'autoinit' => TRUE,
    'encrypt' => FALSE,
    'compress' => FALSE,
    'stricton' => FALSE,
    'failover' => array(),
    'save_queries' => TRUE
);
?>

で動いた。

<?php
'dsn'  => 'sqlite:'.APPPATH.'sqlite/db.sqlite',
?>

<?php
'dsn'  => 'sqlite:'
?>

に気づくまでめっちゃ長かった!

【codeigniter】Routerでアクションメソッドに送られる引数をいじった

domain.com/aug1/aug2/aug3

というURLから
domain.com/page/index/aug1/aug2/aug3
で動作させたいので、

<?php
$route['(.+)'] = 'page/index/$1';
?>

こう書いて

<?php
class page extends CI_Controller {

    public function index($pageUrl = 'index')
    {
        var_dump($pageUrl);
    }
}
?>

で表示されるのは

aug1

だった!

ちげーよ!!!

aug1/aug2/aug3

こんな感じに引数が来てほしい!

なんで、
system/core/Router.phpをいじるよ!

application/core/MY_Router.phpを作る。

<?php 
class MY_Router extends CI_Router {

    protected function _parse_routes()
    {
        // Turn the segment array into a URI string
        $uri = implode('/', $this->uri->segments);

        // Get HTTP verb
        $http_verb = isset($_SERVER['REQUEST_METHOD']) ? strtolower($_SERVER['REQUEST_METHOD']) : 'cli';

        // Loop through the route array looking for wildcards
        foreach ($this->routes as $key => $val)
        {
            // Check if route format is using HTTP verbs
            if (is_array($val))
            {
                $val = array_change_key_case($val, CASE_LOWER);
                if (isset($val[$http_verb]))
                {
                    $val = $val[$http_verb];
                }
                else
                {
                    continue;
                }
            }

            // Convert wildcards to RegEx
            $key = str_replace(array(':any', ':num'), array('[^/]+', '[0-9]+'), $key);
            // Does the RegEx match?
            if (preg_match('#^'.$key.'$#', $uri, $matches))
            {
                // Are we using callbacks to process back-references?
                if ( ! is_string($val) && is_callable($val))
                {
                    // Remove the original string from the matches array.
                    array_shift($matches);

                    // Execute the callback using the values in matches as its parameters.
                    $val = call_user_func_array($val, $matches);
                }
                // Are we using the default routing method for back-references?
                elseif (strpos($val, '$') !== FALSE && strpos($key, '(') !== FALSE)
                {
                    $val = preg_replace('#^'.$key.'$#', $val, $uri);
                }
                //20170410 拡張
                //pageコントローラーの時は引数を/で区切らない
                if(preg_match('/^page\/index\/(.*)/',$val,$matches)){
                    $this->_set_request(array('page','index',$matches[1]));
                }else{
                    $this->_set_request(explode('/', $val));
                }
                return;
            }
        }

    }
}

ごっつ一時しのぎ的な感じだけど、
とりあえずこれで

aug1/aug2/aug3

ってかえってきたよ!