標籤

2020年1月14日 星期二

這是我跟一個傻女孩的故事2020-01-08

這是我跟一個傻女孩的故事---------------------







2019年在我人生裡最痛苦最徬徨最想放棄生命的時候遇到了一個傻女孩,她很天真善良,有時候我會覺得這女孩應該是台灣僅剩的保育類動物,怎麼能毫無防備到這種程度,但這樣的她陪著我度過了我最黑暗最想放棄的時期,在她面前我能完全毫無保留,我也莫名地信賴著她。



這個傻女孩她一直很努力,剛開始我以為她跟一般愛作夢的女孩一樣,非常衝動也欠缺考量,也許很快就受不了苦,但我依然想陪著她一起成長、一點一滴的邁向未來,雖然有時候走的搖搖晃晃讓我膽戰心驚,但她依舊靠著自己的努力慢慢接近了她想要到達的目標。



我陪著她發生了很多事,陪著她晚上不睡覺一起讀書,一起在7-11當她的客戶練習話術,陪著我過生日帶她去吃人生中最昂貴的一餐,還讓壽星等了2個小時,老是嫌我記性不好,把她的事都給忘了,嘲笑我的字尾口頭禪,她自己明明連成語都用不好,老是愛講一口讓我很想笑的台語,總是有話題都聊到半夜睡著,有一次還講到一半開始打呼,讓我好氣又好笑。



一起去吃cold stone、一起打運動、教她數學,為了讓她上班不要這麼克難,第一次為了她半夜偷偷跑去打工買ipad給她,怕她工作太累錢又賺得不夠多,偷偷把化妝品的錢和吃飯的錢都付清,雖然她有時候要我不要花這麼多錢,但我還是不自覺地把她寵成了公主,陪著她一起成長讓我感覺人生都變得熱鬧了起來,跟她在一塊連走心都變得浪漫。



但我還是希望她多看看世面多點常識,不然有天我該離開她身邊的時候我會放不下她,很快地我們認識一年多,就像認識了好幾年一樣,有時候覺得這份孽緣其實也蠻不錯的。











陪著她有哭有笑有悲傷,我希望與她分享人生共同努力每一天,希望在記憶中保有她那可愛的笑容,直到我回過神來的時候,我每天考慮的都是和她的未來,想的念的都是她的身影,我想我已經喜歡上她了。



我其實有點擔心...喜歡她的這件事如果有天被她發現,我們的關係會因此生變,所以一直不敢訴說這份感情,擔心她會覺得我別有居心,但我想再教她的是有一種喜歡不是佔有,真正愛一個人的時候,你會覺得沒有什麼能比對方能幸福更重要的了。最熾烈的愛,不是拼盡全力要和自己所愛之人在一起,而是默默的放開手成全,遠遠地看著對方幸福,也許我就像李大仁妳是我的魏瓔珞,我不在乎是否擁有過妳,只希望在我記憶中擁有保存妳的笑容,這輩子我會守著妳,不會讓妳一個人受苦------------這輩子讓給妳了,下輩子換你守著我好嗎?



我希望你是我的,但如果不能是我的,希望你是幸福的...如果有天我不在你身邊,希望你還記得我。

2015年12月19日 星期六

SAP-T-code筆記

IH09 物料顯示
ME21N 建立採購單
ME22N 採購單
ME9F PRINT 狀態
MMBE 庫存一覽
MZGO 收貨
MRKO 托售結算
ME2M 採購文件
ME2L 供應商採購單
ME51N 建立請購
SE16N 查詢一般表格
SM20 追蹤使用者操作事項
V/LD 查詢價格

2015年12月18日 星期五

SAP名詞筆記

SAP模組分類

MM物料模組
CO成本控制模組
SD銷售模組
FI財務會計模組
PP生產排程模組
HR人事模組
ABAP系統程式
BASIS系統管理


SAP主要區分為以下幾個區域
IDES(Internet Demonstration and Evaluation System)
DEV(Development System)
QAS(Quality Assurance System)
PRD(Production System)
分別為演示練習、開發、質量保證(測試區)、生產系統(正式區)



基本view

初始畫面

MATNR:料號
MBRSH:產業別
MTART:物料類型

基本資料1

MAKTX:物料說明
NORMT:列印簡稱
WRKST:標籤備註
MEINS:基礎計量單位
MATKL:物料群組
BISMT:國際條碼
ZEINR:舊料號
SPART:部門
GROES:規格

銷售view

MATNR:料號
WERKS:工廠
VKORG:銷售組織
VTWEG:配銷通路
VRKME:銷售單位
DWERK:預計交貨廠
ALAND:國家別
TAXKM:稅
VERSG:物料統計群組
KONDM:物料定價群組
KTGRM:科目指派群組
MTPOS:項目類別群組
TRAGR:運輸群組
LADGR:裝載群組


採購view

MATNR料號
WERKS工廠
EKGRP
BSTME
KAUTB
XCHPF
EKWSL
KORDB


會計成本view

MTART
MATNR
WERKS
XEIB1
XEIG1
BKLAS
MLAST
STPRS
PEINH
VPRSV
EKALR
HKMAT
PRCTR


工廠儲存view

MATNR
WERKS
AUSME
LGORT
MHDHB
MHDRZ

Assign class data

MATNR
TARGET
M_TYPE
ACCOUNTTYPE
CALCSTOCK
DISC
OPEN_PRICE
NO_MO
EXPIRATION_DAY
ORIGIN
AUTHOR
VENDOR
PUBLISHER
STATUS




分類資料(共同欄位)

KLASSE:分類名稱
TARGET:POS端編號
M_TYPE:商品類別
ACCOUNTTYPE:
CALCSTOCK:結帳別
DISC:是否可折
OPEN_PRICE:開放售價
NO_MO:自製不開工單
EXPIRATION_DAY:保存天數
ORIGIN:產地

分類資料(此範例為書店)

AUTHOR:作者
VENDOR:供應商
PUBLISHER:出版社
STATUS:狀態


何謂特性值??
賦予物料一個attribute,以對每個物料進行分類
例如:食品是散裝或是包裝,如果是散裝是秤重還是計件、有無有效期限最後依照分類給予不同的欄位。




2015年11月7日 星期六

Ubuntu install on virtualbox

最近想學習一些PHP,但既然是網站又不想只是架在windows下,所以這次就開始學習如何使用virtualbox這個虛擬機器來架設個沒玩過的Ubuntu,因為先前有學習過VMWare跟這個相當類似想必有使用過的人都可以輕鬆上手。

安裝來源在google上應該很快就找到且上手這裡就直接開始灌Ubuntu

Ubuntu的iso檔可以在這裡下載
http://www.ubuntu-tw.org/modules/tinyd0/

首先要建立虛擬機器並輸入名稱以及類型和版本

選取立刻建立




這裡如果沒有要攜帶到別的應用軟體上就用預設即可

這裡如果硬碟容量足的話就選動態配制吧

這裡給他8G以上即可,但是我還是很阿撒立的給他30G

這裡比較要說明一下,這裡上面建立完要選曲你建立的虛擬機器
找到他的設定值選取他的存放裝置
接下來這個動做你可以把他想成你正在放入你的重灌光碟進去你的電腦

選擇你下載的iso的位址開啟你的虛擬電腦就會進去重灌軟體了,以下為安裝畫面

跟著下面做應該不會太難







輸入你要設定的帳密


完成後就像這樣就可以使用這精美的畫面

2015年11月6日 星期五

SQLite基本應用--寫入、讀取

Android系統內建「SQLite」資料庫,它是一個開放的小型資料庫,儲存資料的數量是根據裝置的儲存空間決定的,今天來撰寫個基本的小程式來熟悉資料庫的讀寫。

這次也順便嘗試button事件另一種寫法,先前在button基礎練習篇有看到那時的寫法是用一個Listener來偵測button有沒有被按下,但有些書上還會要我們在mail主檔上的button加入

android:onClick=這個描述既然都有Listener來偵測那幹嘛還要加入這個描述就算拿掉指令也OK,其實這是兩種寫法

1.用Listener去偵測事件
2.直接用button的佈局檔來描述


其實兩種都能達成我們的目的
這一次我們就用第二種我認為比較簡單的方法寫看看


上圖為這次的佈局兩個button和一個Textview




這次我們在布局檔中加上onclick描述


然後我們要先來學習如何創建資料庫(以下稱為DB),在oncreate的階段我們就必須把DB創建完成,
創建一個資料表(以下稱為TB),欄位為name、phone、mail


db=openOrCreateDatabase(dbname, Context.MODE_PRIVATE,null);
//建立資料庫名稱模式為私人模式String createTable="CREATE TABLE IF NOT EXISTS "+
 tbname+
 "(name VARCHAR(32),"+
 "phone VARCHAR(16),"+
 "mail VARCHAR(64))";
db.execSQL(createTable);//創建並定義資料表架構


public void readData(View view){//負責讀取
 String str="";
 displayData("I am read data");
 Cursor cursor=db.rawQuery("SELECT * FROM "+tbname,null);
 if(cursor.getCount()==0){
 displayData("tb is null");
 return;
 }
 if(cursor.moveToFirst()){
 do{
 str+="name:"+ cursor.getString(0)+"\n";
 str+="phone:"+ cursor.getString(1)+"\n";
 str+="mail:"+ cursor.getString(2)+"\n";
 str +="\n";
 }while (cursor.moveToNext());//逐行讀取
 }
 displayData(str);//顯示資料
 }

public void writeData(View view){
 displayData("I am write data");
 addData("linrichard", "0980416449", "linrichard@yahoo.com.tw");
}

private void displayData(String message) {
 TextView print=(TextView) findViewById(R.id.textView);
 print.setText(message);
}

private void addData(String name, String phone, String mail) {
 ContentValues hm =new ContentValues();
 hm.put("name",name);
 hm.put("phone",phone);
 hm.put("mail",mail);

 db.insert(tbname,null,hm);


}




上面可以看到writeData和readData的傳入參數都是設為view這樣就能完成事件連結,這裡分成讀取跟寫入


讀取:用cursor物件下達查詢指令如果裡面有資料則移動到第一筆用do-while逐行讀出並在display函數負責顯示

寫入:用ContentValues("key",value)將資料insert進資料庫中


以下為結果畫面

資料表為空則顯示tb is null
寫入




讀取




































如果要清理資料庫資料可在App管理中clear data


2015年11月2日 星期一

Notification通知訊息基本應用-以簡易登入訊息實作

Notification通知訊息

通知訊息幾乎是每個App都有的功能這一次我們就以登入訊息實作的方式來練習,首先登入畫面的部份我們可以使用android studio內建的模板來用


























建立畫面如下





























用這個範例的原因是因為google有許多的模板可以使用可藉由這個練習來閱讀原始碼並學習怎麼串接別人的程式

在主程序中通常都是以oncreate起頭所以從這開始找會比省事
在這之中可以看到這一行
Button mEmailSignInButton = (Button) findViewById(R.id.email_sign_in_button);mEmailSignInButton.setOnClickListener(new OnClickListener() {
    @Override    public void onClick(View view) {
        attemptLogin();    }
});

根據前一篇Button介紹-以BMI計算實作中我們可以知道這就是button的啟動listener
可以在這直接寫入Notification語法又或者可以繼續追蹤下去

直到追蹤到符合流程的所在地
照理來說應該事先判斷帳密有無錯誤完後才發送訊息
 if (cancel) {

// There was an error; don't attempt login and focus the first

// form field with an error.

focusView.requestFocus();

} else {

// Show a progress spinner, and kick off a background task to

// perform the user login attempt.

showProgress(true);

mAuthTask = new UserLoginTask(email, password);\\驗證帳密

mAuthTask.execute((Void) null);
}



所以寫在else中應該是符合邏輯的
final int notifyID = 1; // 通知的識別號碼

final Notification.InboxStyle inboxStyle = new Notification.InboxStyle(); // 建立InboxStyle

final EditText emmsg=(EditText) findViewById(R.id.email);

final String[] lines = new String[] { "您剛登入了"+emmsg.getText() }; // InboxStyle要顯示的字串內容

inboxStyle.setBigContentTitle("Welcome to login :"); // 當InboxStyle顯示時,用InboxStyle的setBigContentTitle覆蓋setContentTitle的設定

inboxStyle.setSummaryText("更多新訊息"); // InboxStyle的底部訊息

for (int i = 0; i < lines.length; i++) {

inboxStyle.addLine(String.format("%d: %s", i + 1, lines[i])); // 將字串加入InboxStyle

}



final NotificationManager notificationManager = (NotificationManager) getSystemService(Context.NOTIFICATION_SERVICE); // 取得系統的通知服務

final Notification notification = new Notification.Builder(getApplicationContext()).setSmallIcon(R.mipmap.ic_launcher).setContentTitle("內容標題").setContentText("內容文字").setStyle(inboxStyle).build(); // 建立通知

notificationManager.notify(notifyID, notification); // 發送通知



如果說要照這樣解讀的話應該就能寫的出來

Notification主要要先給予他一組識別編號ID,接著建立inboxstyle物件,這裡emmsg變數是用來接收email欄位的所以登入後會產生登入帳號etBigContentTitle則是可以對內容標題做修改,在用一個for迴圈做字串加入,最後取得服務通知、建立通知並發送及可



最後的效果如下,但是點下通知是沒有效果的,下一回在來寫如何點下通知會產生效過







2015年10月29日 星期四

Button基本練習-以Intent傳送資料BMI計算實作

Button基本應用


button按鈕是一個App中非常重要的一環,主要大部分的功能觸發都用button作為主要觸發,現在就用一個比較常見的範例BMI計算來簡單介紹buttton的製作並簡單介紹一下android的大概架構:

首先先將layout的部分部屬完成

大致上外觀像這樣,一個EditText記錄身高另一個記錄體重搭配上一個觸發計算按鈕

如果要在EditText中顯示類浮水印的字,請點選該物件並於屬性中的hint輸出值(如下)

















這裡在提醒一個好習慣,在介面上要輸出的文字要養成習慣要先在String.xml中定義好
在以連結上物件的方式完成,在往後維護上會容易許多問題也少掉不少(如下)










































做好一個開始的介面以及一個顯示結果的介面
再來layout部屬完要開始寫Button的事件

之後到MAIN Oncreate中新增一個Listener顧名思義就是就要隨時監聽按鈕有沒有被點擊
這部分必須要再app create的階段就建構完成所以寫在oncreate

    final EditText height= (EditText)findViewById(R.id.editText);
    final EditText weight= (EditText)findViewById(R.id.editText2);

        Button calc = (Button) findViewById(R.id.button);
        calc.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                resultIntent = new Intent(view.getContext(), Result.class);指定目標
                resultIntent.putExtra("height", height.getText().toString());
                resultIntent.putExtra("weight", weight.getText().toString());
                startActivity(resultIntent);\\傳到目標layout
            }
        });

一旦觸發點擊後指定將height和weight藉由Intent包裝,這裡用bundle寫也可以只要改成下面這即可
Intent = new Intent(view.getContext(), Result.class);
bundle bundle =new bundle();
bundle.putExtra("height",height.getText().toString());
bundle.putExtra("weight",weight.getText().toString());

intent.putExtras(bundle);

startActivity(resultIntent);
接收:
Bundle bundle = this.getIntent().getExtras();
weight
= bundle.getString("weight"); height = bundle.getString("height");























在Result中接收
   
Intent intent=getIntent();
   String height= intent.getStringExtra("height");
   String weight= intent.getStringExtra("weight");
     if(!(height.isEmpty()) || !(weight.isEmpty())){
            Double heightn= Double.parseDouble(height);
            Double weightn= Double.parseDouble(weight);
            EditText result = (EditText)findViewById(R.id.editText3);
            result.setText(String.valueOf(weightn / (heightn * heightn) * 10000));

      }
























完成品