2016年11月26日 星期六

Android-Open Data 彙整

此篇是收集各公家機關或公開的資訊存取連結
如有侵犯到,請務必留言告知,非常感謝您。

台北市政府
/ 休閒旅遊 /
  1. 臺北市藍色公路碼頭
  2. 臺北市101個觀光亮點資料
  3. 臺北市運動中心
  4. 臺北市河濱輕食區
  5. 臺北市河濱自行車道景點
  6. 臺北市六大自行車道
歡迎轉載,請註明出處。

2016年11月23日 星期三

2016年11月22日 星期二

Python-將資料送至 FireBase

隨著物聯裝置多樣性
儲存的資料也越來越多
相對的我們要在資料儲存要更方便才行
像是 ThingSpeak 是最常見的
這篇則是用 Google 提供的 FireBase

參考資料 : 透過 Python 傳送溫溼度資訊到 Google Firebase

2016年11月13日 星期日

Android-FireBase Realtime Database_新

如要用此功能
請將 FireBase 的前置作業 完成

此文章會介紹我們比較常用到的方法以及儲存方式
因為網路上教學文也經非常多
所以流程就用文字帶過

1 . google-services
build.gradle {
  classpath 'com.google.gms:google-services:3.0.0'
}

2 . firebase core
app -> build.gradle
 apply plugin: 'com.google.gms.google-services'
 .
 .
 .
 build.gradle{
    .
    .
    .
     compile 'com.google.firebase:firebase-core:9.2.0'
 }

3 . firebase database
app -> build.gradle
build.gradle{
    .
    .
    .
    compile 'com.google.firebase:firebase-database:9.2.0'
}

4 . 使用讀取資料,編寫資料
package com.bluecom.soprt.tool;

import com.google.firebase.database.DatabaseReference;
import com.google.firebase.database.FirebaseDatabase;
import com.google.firebase.database.ValueEventListener;

public class FireBaseDataBaseTool {

    /**
     * 讀取資料
     * @param columnName
     * @param valueEventListener 持續監聽
     */
    public static void RetrieveDateValueEvent(String columnName, 
                                                ValueEventListener valueEventListener) {
        if(columnName != null) {
            FirebaseDatabase mFireBaseDatabase = FirebaseDatabase.getInstance();
            DatabaseReference databaseReference = mFireBaseDatabase.getReference(columnName);
            databaseReference.addValueEventListener(valueEventListener);
        }

    }

    /**
     * 讀取資料
     * @param columnName
     * @param valueEventListener 單次監聽
     */
    public static void RetrieveDateSingleValueEvent(String columnName, 
                                                        ValueEventListener valueEventListener) {
        if(columnName != null) {
            FirebaseDatabase mFireBaseDatabase = FirebaseDatabase.getInstance();
            DatabaseReference databaseReference = mFireBaseDatabase.getReference(columnName);
            databaseReference.addListenerForSingleValueEvent(valueEventListener);
        }

    }

    /**
     * 儲存資料
     * @param columnName
     * @param key
     * @param value
     * @param valueEventListener 連續監聽
     */
    public static void SaveDate(String columnName, String key,  String value, 
                                    ValueEventListener valueEventListener) {
        if(columnName != null && key != null) {
            FirebaseDatabase mFireBaseDatabase = FirebaseDatabase.getInstance();
            DatabaseReference databaseReference = mFireBaseDatabase.getReference(columnName);
            databaseReference.child(key).setValue(value);
            databaseReference.addValueEventListener(valueEventListener);
        }
    }

    /**
     * 儲存資料
     * @param key
     * @param columnName
     * @param value
     * @param valueEventListener 連續監聽
     */
    public static void SaveDateSingleValueEvent(String columnName, String key,  String value, 
                                                    ValueEventListener valueEventListener) {
        if(columnName != null && key != null) {
            FirebaseDatabase mFireBaseDatabase = FirebaseDatabase.getInstance();
            DatabaseReference databaseReference = mFireBaseDatabase.getReference(columnName);
            databaseReference.child(key).setValue(value);
            databaseReference.addListenerForSingleValueEvent(valueEventListener);
        }
    }

}

5 . 介紹 FireBase 儲存的格式
FireBase 是以 JSONTree 儲存
和我們常見的 DB 儲存方法是不太相同
採用重點式儲存
 Key 加上 Value
可以參考官方範例 : Structure Your Database

6 . 上方程式碼常用到的置入參數
{
  "Members" : {
    "Allen" : {
      "NO" : "002",
      "Phone" : "02-22226666",
      "Sex" : "男"
    },
    "Tina" : {
      "NO" : "003",
      "Phone" : "02-22226666",
      "Sex" : "女"
    }
  }
}


Reference : 如果要取所有會員資料,那在輸入參數內輸入 : Members
                    如果要取 Tina 會員資料,那在輸入參數內輸入 : Members/Tina
Key :  有點像是 Java Map 感覺,如果要取 Allen 的編號,Key 輸入 : NO
Value : 同上

7 . 重點 !!!
為什麼要有持續監聽和單次監聽
addValueEventListener :持續監聽
持續監聽是資料只要有變化,就會有改變的狀態。

addListenerForSingleValueEvent  : 單次監聽
單次監聽是,我這次儲存完資料後立即取得到回饋
並且結束工作。

2016年10月31日 星期一

Website-FireBase 的前置作業

Google 的 FireBase 不僅提供行動裝置的服務
也提供在網頁端的服務
讓我們在開發上又省了許多麻煩事

這篇帶來的是如何在網頁上添加 FireBase基本參數
1 . 切換到專案管理













2 . 新增項目為 ?













3 . 生成對應參數,並且將參數複製













將剛剛複製出來的參數寫入程式碼內
<!DOCTYPE HTML>
<script src="https://www.gstatic.com/firebasejs/3.5.2/firebase.js"></script>
<html> 
  <script>
    // Initialize Firebase
    // 請自行更改下方的參數
    var config = {
      apiKey: "aaaaaaaaaaaaaaaaaaaaaaaaaa",
      authDomain: "bbbbbbbbbbbbbbbbbbbbbbbbbbbbb",
      databaseURL: "ccccccccccccccccccccccccccccc",
      storageBucket: "dddddddddddddddddddddddd",
      messagingSenderId: "eeeeeeeeeeeeeeeeeeee"
    };
    firebase.initializeApp(config);
    
  </script>
  <head>
    <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
    <title>標題</title>
  </head>
  <body>
    Hello World
    
  </body>
</html>

參考資料 : Add Firebase to your JavaScript Project
歡迎轉載,請註明出處。

2016年10月16日 星期日

Website-搜尋引擎排名 ( SEO )

我們不是只是做網頁嗎 ?
為什麼要提到 SEO ?

或許只是單純做自己的網頁沒有甚麼 " 曝光 " 需求
但是就已公司行號來說
那就天差地別囉

如果使用者要找到您、了解公司的產品 ...等
如果再搜尋完後出現在第一項
大家一定會馬上點開 ( 心想 : 這一定是我想要的 )
反之,如果出現的結果是在很後面
我想使用者點擊的意願就會降得很低吧
然後就石沉大海( 撲通 ~ )















SEO 簡單來說就是曝光度
SEO 執行的越好,大家越容易找到你
反之,越差的話,連一根毛都找不到

這裡舉幾點能夠增加的做法
1 . 網頁內容有對應的關鍵字
2 . 網頁標題( <title>鳴黎<title> )
3 . 網頁宣告的語言( UTF-8、Big5 )
4 . 利用原生的元件包覆在標籤內
5 . 網域名稱是否有關連
6 . 網頁專案下的檔名是否有關鍵字
7 . 被搜尋引擎的原生元件( Google 廣告、Google 瀏覽人數 )
8 . 網頁內添加多個關鍵字 ( 賣 : 香蕉,添加 : 水果、金黃色、一串...等 )

有網友提出一些想法 :
1 . 我直接加一堆不相干的關鍵字就好的呀,大家都找的到我 !
Ans : 其實搜尋引擎也不會這麼傻,只要你的網頁不相干,品質分數會降低,然後消失。

2 . 有 SEO 相關公司說他們的一定會排在前 10 名 !
Ans : 痾,這是有一點點機會的,至於為什麼你聽聽就好。

參考資料 : SEO是搜尋引擎優化,不是關鍵字排名,別被排名保證第一的話術給騙了
參考資料 : [SEO必看] Google 官方免費《搜尋引擎最佳化初學者指南》電子書-香腸炒魷魚
參考資料 : 網站評測工具

歡迎轉載,請註明出處。