2015/12/28

32歲-目標計畫(單車&拼正職)&Review(1月份)


(20151228-以「狼」所選的一張圖片,期望自已能擁有狼性)
copy from :http://bit.ly/1QRLO8L
裡面的幾句話不錯:「秉著自已的驕傲,行自已的路,朝自已的目標前進...」
「一人時有一人的道、多人時有多人的道」

------------------------------
應為23號後就要寫下一月的目標,延了5天。

上個月份的失衡,常常做得好之後,就是一陣的下沉。

這個月,想像讓自已擁有狼性!努力地去學!

這月,預計會開始參加PMP課程 (1/9開始),將所有的專注放在這上面。好好地學習。

單車項,核心要先做,才可以順利運動,目前狀況一樣糟。
等自已都有做到核心後,再來評估自身狀況。


==================================================
寫在前頭--這月我所計畫努力的方向
==================================================
拼正職:(預計2016/01/23前要達成的)
■ PMP報名&上課&學習(每次課後要Blog)
■ MS組織圖要問出答案
■ CUF備課&修好BUG要完善

單車:(預計 2016/01/23前要達成)
■ 核心訓練課程(每週都要過半)
■ 牽狗跑一趟山路
■ 室內單車 (先好好去保養OCR車)

別浪費時間在PTT/Yahoo上,只要不是計畫內的,通常都是不會進腦子裡的。

==================================================
週review--【2015/12/28(一)~2016/01/03(日)】
==================================================







==================================================
週review--【2016/01/04(一)~2016/01/10(日)】
==================================================







==================================================
週review--【2016/01/11(一)~2016/01/17(日)】
==================================================



==================================================
週review--【2016/01/18(一)~2016/01/23(六)】
==================================================




==================================================
月review--【2015/12/24(四)~2016/01/23(六)】
==================================================














2015/12/25

20151222-程式-讓jqGrid支援RWD的功能(橫列轉直列)(responsible web design)



(這就是jqGrid橫列轉成直列的結果圖)
=================================================
2017/06/28  - 增加程式原始碼 & 線上Demo Page

add Live Demo:
https://hougii.github.io/jqgridrwd/GridRWD.html

Source Code:
https://github.com/hougii/jqgridrwd

=================================================
以下為個人心得 + 一些小小分享給需要此功能的人員。

這段jqGird 轉直列功能,處理過程有幾個我思考重點:

1.  如何將jqGrid 欄位資料轉呈直列呈現?
2. 如何在每一筆前加上「欄位名稱」?
3. 呈現直列時,它的美工Style 調整。
4. 分頁的功能處理。



==========
這樣的需求,若僅是採用原生的Table /Tr / Td 網路上是有很多資料可參考的。

但若是JqGrid ,網路上查到的,大多是在RWD下,支援出現ScrollBar 、或是欄位可自動減少呈現.......但,就是沒有找到「現成」的jqGrid 橫列轉直列


這一項的需求,已被Manager念很久了。會拖好一陣子,一來是沒有心思處理,二來找不到關鍵技術該如何達成?

實在是......茫茫然。

好在就這樣一步一步,一個一個問題接續解決!看到了「清楚」的方向......它是可以被解決的

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

在處理JqGrid之前,一定要了解jqGrid 的一項特性

就是jqGrid 是由「三個Table 」組合出來:
「.ui-jqgrid」這是最外層包住三個Table的Class

標頭:「.ui-jqgrid-htable」: 放標頭的Table,它底下是thead所包附著。
內容:「.ui-jqgrid-btable」:放Data的Table,它底下是由tbody所包附著。
分頁:「.ui-pg-table」:它放分頁等相關footer功能的Table。

懂得這些關係,才較好處理jqGrid的Style

=========================================
第一步,就是要了解,簡單的Table ,它是如何達到「橫列轉直列」的。
=========================================

這一版的概念結果就是我要的!(註:但它不是jqGrid架構)
http://css-stars.com/responsive-table/
http://demos.webtricksplus.com/responsive-table-demo.html

當它縮小後的呈現結果,就是我預期要的結果!
就開始看它是如何達到的??

只要將 Tr /Td 設定display: block ,它就會變成直列!!
   /*僅要jqGrid下的tr td 呈現-靠它才可以轉成直式*/
        .ui-jqgrid .ui-jqgrid-btable tr, .ui-jqgrid .ui-jqgrid-btable td {
            display: block;
        }

這點,是我實作過程中,最神奇的地方!(還想不出是為什麼會這樣)


=================================================
第二步:如何讓資料列的前面,留一個空間放「欄位名稱」?
=================================================


這分兩部份:1. 如何謄出空間???  2. 如何放jqGrid 欄位名稱??

針對第一點:如何謄出空間?
    靠的就是:
          a.先讓資料右移:利用 CSS:td「padding-left: 50%
  td { 
   
   border: none;
   border-bottom: 1px solid #eee; 
   position: relative;
   padding-left: 50% !important; //因為這一行,資料可以往中間靠,以讓右邊可以填data
     text-align: left !important;
  }


          b.利用CSS:「td:nth-of-type(n):before」的方式,動態放入資料:
             例如:td:nth-of-type(2):before { content: "Last Name"; color: #0e9893;}
                     解釋:在第二個列前面,放入content = "Last Name"的內容。

針對第二點:如何放jqGrid 欄位名稱?

    我利用CSS:「attr (attribute)」資訊,只要是該Element上的 attribute,到時就可以直接透過這方式取得內容資料,




所以,我在TD的屬性上,定義了「mycolname」,目的用來放該欄位的名稱:

至於要如何在每個TD上「精準」地放上欄位名稱,靠的就是 jqGrid「gridComplete」Event下所寫的JQuery了。
/完成後的處理
function gridComplete() {
    //讓每個row下的cell 都有colname(供RWD使用)
    var cm = $(this).jqGrid("getGridParam", "colNames");
    var trs = $(this).find('tr');
    $.each(trs, function (tri, tritem) {
        var tds = $(tritem).find('td');
        $.each(tds, function (tdi, tditem) {
            $(tditem).attr('mycolname', cm[tdi]);
        });
    });
    //讓它再執行一次Resize(可移除body出現scrollbar的問題)
    jqGridResize();
}


  • 取到Grid的ColumnName定義資訊。
  • 一層一層Loop取到每一列的資料TD。
  • 將欄位名稱資訊,設定在attribute上。



到這一步,基本上以達成:轉直列 、填上欄位名稱 之功能了!

==============================================
針對第三步:呈現直列時,它的美工Style 調整。
==============================================

第一點:先達到 window resize 時,jqGrid 的縮放要跟著調整
       調整jqGrid寬度就是:$("#xxx").jqGrid('setGridWidth', nowwidth-1);

第二點:開始調整Table / Tr / Td 下的CSS Style
這部份,我是透過 Chrome F12的偵錯工具,查看CSS的套用關係。
而RWD的css,關鍵的我都會套用「!important;」以防被蓋掉。
(詳情見最後的Style)


==============================================
最後一步:分頁的功能處理
==============================================

這一點,我打算採用原本的分頁功能 & 呈現方式去做呈現。

因為「ui-pg-table」下的
第一個TD是「功能列」,空的,我沒有要用,所以第一個TD隱藏。
最後一個TD是「總頁數」,調整間距,讓它好看一些。

這是第一個TD要把它隱藏 (但要排除「最上頁」Icon所在的TD)



最後調整完的「分頁」按鍵,就是長這樣子的。




總結以上,最後成果就如下圖了




================================================
相關程式碼
================================================

透過Less 來控管 寬度小於 532時,再做RWD呈現:
grid-mobile.less
/*2015/04/05 for jqgird 的Mobile 轉為直列資料呈現的 css*/
/*針對JQGrid的RWD處理*/
/*@media only screen and (max-width: 760px),(min-device-width: 768px) and (max-device-width: 1024px)  {*/
@media only screen and (max-width:532px) {

    /*RWD下最外層的table要距右側要有間距,且broder移除*/
    .ui-jqgrid {
        margin-right: 20px;
        border: 0px !important;
    }


        /*僅要jqGrid下的tr td 呈現-靠它才可以轉成直式*/
        .ui-jqgrid .ui-jqgrid-btable tr, .ui-jqgrid .ui-jqgrid-btable td {
            display: block;
        }
        /*.ui-jqgrid table, thead, tbody,td, th,tr {
   display: block;
  }*/

        /*把Header全部移除*/
        .ui-jqgrid thead tr {
            position: absolute;
            top: -9999px;
            left: -9999px;
        }

        /*RWD下移掉htable的border*/
        .ui-jqgrid .ui-jqgrid-htable {
            margin: 0em;
            font-size: 15px;
            border: 0px;
        }

        .ui-jqgrid tr {
            /*border-bottom: 2px solid #690461;*/
        }
            /*RWD下這是讓直列每個row有間距*/
            .ui-jqgrid tr.jqgrow {
                border: #dddddd 1px solid;
                background-color: #FFFFFF;
                margin-bottom: 10px;
            }
            /*內文底*/ /* Horse edit #ecf0ee */
            .ui-jqgrid tr.jqgrow2 {
                border: #dddddd 1px solid;
                background-color: #FFFFFF;
                margin-bottom: 10px;
            }
        /*內文底*/

        .ui-jqgrid td {
            border: none;
            border-bottom: 1px solid #eee;
            position: relative;
            padding-left: 40% !important;/*空出左側空間*/
            text-align: left !important;
        }

        /*在td前空出一個空間*/
            .ui-jqgrid td:before {
                position: absolute;
                /*width: 35%;這個沒有用*/
                left: 10px;/*靠position後再右推10px*/
                text-align: left;
                /*border-right-width: 1px;
                border-right-color: #CBDAB6;*/
                /*border-right-style: dashed;*/
                font-family: MingLiU,Helvetica, sans-serif;
                vertical-align: bottom;
            }
            /*加上欄位名稱Data*/
            .ui-jqgrid td:nth-of-type(n):before {
                content: attr(mycolname);
            }

        /*它是RWD的第一列td style*/
        .ui-jqgrid .ui-widget-content .ui-state-default {
            border: #d2dedb 0px solid;
            font-weight: bold;
            color: #4b7676;
            width: inherit !important;
            background-image: none;
            background-color: #cbddd5;
        }
        /*處理分頁相關的*/
    /*RWD下分頁的tabl:ui-pg-table的button呈現:*/
     .ui-jqgrid .ui-pg-table td {           
            padding-left: 0% !important;
            text-align: left !important;
        }
  /*分頁第一個的td元件:把它縮小(注意:它的ui-pg-table有兩層,不可把Icon藏掉)*/
      .ui-jqgrid .ui-pg-table td:first-child:not(.ui-pg-button){           
           display:none;
        }
     /*分頁最後的td元件(筆數的):把它靠左*/
      .ui-jqgrid .ui-pg-table td:last-child div{       
          text-align:center !important;
            position:relative;/*讓它離分頁近一點*/
            left:-30px;
        }

   /*.ui-jqgrid  .ui-jqgrid-pager {
        display: block;
         position:relative !important;
         text-align: left !important;
    }*/

     /*.ui-jqgrid .ui-pg-table tr {
            display: block;
        }*/
}


===============================================
jqGrid 相關的Javascript處理部份:.jqGrid.js
===============================================
//定義jqGrid的預設值及Function Event
$(function () {
    $.extend($.jgrid.defaults, {
        //==========屬性處理================
        multiselect: false,//不多選
        rowNum: 10,
        rowList: [10, 20, 30],
        toppager: false,
        viewrecords: true,
        rownumbers: true,
        autowidth: true,
        altRows: true,
        altclass: 'jqgrow2',
        height: "100%",//高度隨筆數而定
        rownumWidth: 30,//RowNum寬度 default:25 http://goo.gl/y8BqR
        //==========Event處理===============
        //錯誤處理
        loadError: Microsoft.UI.Grid.loadError,
        serializeGridData: Microsoft.UI.Grid.serializeGridData,
        loadComplete: Microsoft.UI.Grid.loadComplete,
        gridComplete: gridComplete
    });
})


//完成後的處理
function gridComplete() {
    //讓每個row下的cell 都有colname(供RWD使用)
    var cm = $(this).jqGrid("getGridParam", "colNames");
    var trs = $(this).find('tr');
    $.each(trs, function (tri, tritem) {
        var tds = $(tritem).find('td');
        $.each(tds, function (tdi, tditem) {
            $(tditem).attr('mycolname', cm[tdi]);
        });
    });
    //讓它再執行一次Resize(可移除body出現scrollbar的問題)
    jqGridResize();
}


//讓grid它重新調整寬度(電腦版)
$(function () {
    $(window).bind('resize', jqGridResize);
})

function jqGridResize() {
    var grids = $(".ui-jqgrid-btable,.ui-pg-table,.ui-jqgrid-htable");
    $.each(grids, function (i, item) {
        //排外不自動resize
        if ($(item).parents(".dialogpage").length > 0 ||
            $(item).parents(".ExcludeGridResize").length > 0) {

        }
        else {
            //最大寬度取決於div contentBlock
            //因pc.css有定義
            //( in screen and (max-width: 1200px) and (min-width: 533px))=980 所有要限制grid大小
            //( in screen and (max-width: 1500px) and (min-width: 1200px))=1200
            //screen and (min-width: 1501px) =1500
            var nowwidth = $(window).width(); //$(item).width();
            var contentwidth = $(".mainConetnt").width();
            contentwidth = contentwidth == null ? $("#contentBlock").width() : contentwidth;
            //若contentwidth比較小,則採用它的
            nowwidth = (contentwidth <= nowwidth) ? contentwidth : nowwidth;
            nowwidth = (nowwidth <= 980) ? nowwidth : 
                (nowwidth > 980 && nowwidth < 1200) ? contentwidth :
                (nowwidth > 1200 && nowwidth < 1500) ? contentwidth : contentwidth
            ;
            if (nowwidth <= 533)
                nowwidth = nowwidth - 20;//在RWD下要減20才可以
            $(item).jqGrid('setGridWidth', nowwidth-1);
            $(".ui-jqgrid-btable").width(nowwidth - 2);//jqgrid body再減1才不會有Srollbar
            //console.log(nowwidth + "," + contentwidth);
        }
    });
}




===============================================
相關的HTML範例程式,請自已套用自已的Layout外框 (這是MVC Razor 的寫法) ===============================================

@{
    ViewBag.Title = "GridRWD";
    Layout = "~/Views/Shared/_Layout.cshtml";
}

GridRWD

@section Scripts{ }







2015/12/24

32歲-目標計畫(單車&拼正職)&Review(12月份)


20151124-依[持續]這個keyword,在google上找到這張圖,覺得自已應像這張圖一樣:

「每天進步一點點」!


這已是邁入第三個月份,
這個月的重點應是該習慣這樣的模式,
把這個月訂定下的小目標,好好地去達成它。

訂的目標要達成 、訂個可達成的目標。


==================================================
寫在前頭--這月我所計畫努力的方向
==================================================
單車:(預計12/23號前該達成)
■ 週週單車北海岸 (共4次)
■ 核心週週要過半!(達到4/7以上)
■ 跑步山路兩次(2/4)
(再次找了Endomodo App來當單車記錄,每次單車都要寫日記喔)

拼正職:(預計12/23號前該達成)
■ 收尾TM項
■ 長榮功能達到。
■ KTB 功能開發完成掉&所生出相關BUG(照理應已在開發手機部份了~)
■ 清楚畫出MS的組織圖(不懂就問)
■ 找一場職涯講座 (1/4)

==================================================
週review--【2015/11/24(二)~2015/11/29(日)】
==================================================
11/24 - 寫了11月份Review / 建立12月份Review  /  核心有執行
      Job:EAICallBack in Portal / 查看後台異常處理 需求。
      Bike:上下班  /  中醫針  /   阿叡單車故事
11/28-有騎單車北海岸,好天氣!
11/29-今日最後一天,有做核心影片,不過整個白天都較不專心。
晚上還亂看了影片(邊吃邊看),後來發奮來做個核心動作&影片。
另外,看了當初劉大幫我錄的影片,一句「阿志單飛耶」真是懷念呀!
加油些!我的單車夢我自已決定!
-----
週Review:
單車:有騎,而星三的跑步後,屁股舊傷怪怪的,有出門騎單車就是好。
工作:東西一堆呀,不過算盡量做就是了,星五下午的Training講的還蠻爽的。
傳個簡訊祝瑩琦生日快樂,而回覆中也強化我的單車目標 ^^,加油


==================================================
週review--【2015/11/30(一)~2015/12/06(日)】
==================================================
11/30(一)-工作上有處理套流程項目,充實結束這一天。晚上沒共修,換成做核心一組。情緖頗High。
12/1(二)-星二這天下來,晚上整個失控了,該做的事沒做,低潮期
12/2(三)-今日TM那算是處理的順,也與M聊聊職涯事,算是不錯。
晚上慶再那也是不錯的運動聚,回家有做了一組核心。
另外,在想,如何避免自已失控,而浪費了時間?想不太出來,
也不了解,為何我的個性會是如此??
以後低潮期就是睡覺好了!不要給自已排太多項目。
12/3(四)-沒照劇本走,全失控沒有做事,又是低潮期
12/4(五)-EVA功能順利結束,感覺很不錯。回家後順利完成夜騎北海岸
12/5(六)-今日的DeOp訓練課程非常的充實聽了一天的課程,對職涯很有動力&幫助。
活動結束後,至北車直接買一本[看版方法]的書。而日記的部份,要好好整理才是。
12/6(日)-上午睡至10點,打個電話回家,開始寫寫日記做記錄。
星日又沒有好好利用了,又是低潮期。下午出門想看電影但太晚,人太多。
回家後,沒特別做什麼,就早早去睡。
==================================================
週review--【2015/12/07(一)~2015/12/13(日)】
==================================================
12/07(一)-有共修。
星一到星五為公司而活,而星六星日就為自已而活!
所以,假日不好好利用,等同屬於自已的時間沒有好好利用。
小心得。工作上:SoSo,想弄TFS Bug單但卡關;預約功能後來寫出多筆的Grid呈現。
明天再補齊。今日有裝好英聽喔!





==================================================
週review--【2015/12/14(一)~2015/12/20(日)】
==================================================


2015/12/19
上禮拜開始,對於這計畫,已開始半崩解狀態
出現了~不想再繼續這麼做記錄的念頭。
而這,就是「3分鐘熱度」效應,讓自已會撐不過3個月的時期。

但,想想,我計畫一些自已想做的事,但後來卻沒有辦法執行?
這不是太怪了嗎?
所以,「持續修正」,面對自已無法按計畫執行的問題,它的原因是什麼

繼續做這樣的每週/每月Review這件事情!

不要一次寫太多,就一點點就好。

12/20(日)-
睡到十點多,開始寫程式,把CUF的組織/人員做簡單化改寫。
白天的效率較不高,晚上認真寫時,發現沒辦法全改完,暫先在12點前Relase 一版給Nick。
真的是@@~


這禮拜的狀況,就是不怎麼好,不過,算是有再醒過來了!
右臀的狀況仍不好。

「當你有確實的去做後,才有那個"資格"問有沒有效!」~加油


==================================================
週review--【2015/12/21(一)~2015/12/23(三)】
==================================================
12/21(一) - 今天有去共修,而回到家後,雖已是十點,但有將一組核心運動做完(到11點半)
而自已那時又會失控呢?跟自已說:只有確實地執行,才有資格問說有沒有效?
Job-做tfs bug單的說明,調整Bug單,追手機API的狀況,而Grid的處理,實在是沒有頭緒,
電話問了美工該如何處理?下午也試著套RWD的部份。下班前狀況算是有"穩住"些了。

12/23(三)-在TM那做多紙匣,而較有意思的事與Mi聊了一陣子。
他四天去學TFS的課程,就這事延伸到工作間我期望的理想。這種有人討論不錯。
慶再那-慢慢跑個幾圈。

23號要做Review的,慶再那回來後,看了柯P的影片到十二點。
好看。但不是時候。

==================================================
月review--【2015/11/24(一)~2015/12/23(三)】
==================================================



單車:
1(X):[2/4]騎了2次,後來腳狀況不行,全休。
2(X):可惜沒有認真做呀。要做才可以有資格說有沒有效?
3(X):完全沒有跑!!慶再要比接力,但腳完全不行。

拼正職:
1(X):目前還在多紙匣(尾段),再安裝系統項目。
2(O):這是很棒的!第二次過去完整收尾交付。
3(O):給自已圈,因為我很認真在工作上,TFS/RWD、但工作項還是被追著跑。
4(X):還是沒有發Email去問,可惜。
5(O):參加2場MS的講座:DeOp、另一場是「一小時寫程式-minecraft帶小朋友」,這兩場學到很多。


這個月呢~~~崩潰超多!認為我自已這種「每月Review」的計畫無法持續做下去!
一直讓自已陷在那種循環裡!

目前是有把自已拉出來,又有了信心。

「有自信的人,是不會受外在因素影響自已的心靈的」。

加油,今晚再建立1月份目標!!

(另外,寫日記一定要在當下有"感觸"時寫,才能寫出符合自已心裡的文字)


(THE END)

2015/12/06

20151205-講座-DevOps Day 團隊開發日(個人心得)(未寫完)


(活動是九點半開始,我九點前就定位,記錄拍一下)

以下全是個人感觸&心得,寫下一份屬於自已的文字。
=========================================



一個平常沒在跑步的,會忽然跑起來、且一直跑的原因是.....

後面有狗在追!!


這是在課堂中聽到的一段話,當作這篇日記的主軸心得。

在太平盛世下每個人不會沒事找事做~
要讓自已去做那件事,則要找到「那隻狗」!
迫使自已去執行。而在工作上的「那隻狗」就是「你所面對的問題」!

要清楚知道自已面對的問題是什麼?要解決什麼問題?那份的衝力才會出來。
這也就是,為何我自常想「自學」,卻沒有起半步的原因所在。


===========================
「什麼叫快!比"對手"快一步的就叫做快!」

「要有多快??視競爭對手而訂」


大陸人是這個東西有沒有人做?沒人做,我要當第一個做!
香港人是這個東西別人有沒有做?有人做,我們評估看要不要做!
台灣人是這個東西別人都在做,我們就跟著做就是了!


原來這也是看到企業為何都是搶「上市發表日期」!
這東西,僅要比對手快一步,那市場的占有率,就會因為這一點而改觀。


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

這一個活動,會參加的原因,

因為在技術領域的活動,辦在「假日」的時間很少!
且這一份技術內容,讓完全沒接觸過的我,該出門好好學習一下,了解它是什麼??

因為活動在假日、且又是我感興趣的演講!
早早就先將這時間排進去,空下這一整天去學習。












(待續)