2018年12月28日星期五

android 藍芽入門


1. 三篇文章

https://blog.csdn.net/huangliniqng/article/details/82185983

https://blog.csdn.net/huangliniqng/article/details/82187966

https://blog.csdn.net/huangliniqng/article/details/82189735


2.  Discovery bluetooth device example
https://blog.csdn.net/zhangphil/article/details/77896924


3. 配對 :
private void pairDevice(BluetoothDevice device) {
        try {
            Method method = device.getClass().getMethod("createBond", (Class[]) null);
            method.invoke(device, (Object[]) null);
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
參考 : http://www.londatiga.net/it/programming/android/how-to-programmatically-pair-or-unpair-android-bluetooth-device/



2018年12月26日星期三

Android 讀取低功耗藍牙(BLE)程式初探 - Bluetooth - GATT

實用的文章


https://juejin.im/entry/5919630444d904006c6e14ca

http://cheng-min-i-taiwan.blogspot.com/2015/06/android-ble.html

android get wifi ssid



WifiManager wifi;
String mssid;

@Overrideprotected void onCreate(Bundle savedInstanceState) {
   
    ..................
    //get your WiFi's SSID
    //下面三行是取得你當前連線到的wifi的SSID    
    wifi = (WifiManager) getSystemService(Context.WIFI_SERVICE);
    WifiInfo wifiInfo = wifi.getConnectionInfo();
    mssid = wifiInfo.getSSID();
    Log.i(TAG, "mssid : "+mssid)




2018年11月1日星期四

jUnit & Spring



1. Override default Spring-Boot application.properties settings in Junit Test

@TestPropertySource(locations="classpath:test.properties")




test.properties放在:/src/test/resources/

2. 其他相關:
Testing in Spring Boot 


2018年10月24日星期三

Spring Boot访问MySQL8那些小坑


MySQL升到8.x.x, spring boot遇到的問題:

=================================
    第一个坑是mysql的jdbc驱动的版本,mysql的版本必须与mysql驱动的版本一致,在下选用的是mysql-8.0.11-winx64-GA,因此与之匹配的
驱动的maven依赖为:



    mysql
    mysql-connector-java
    8.0.11



    第二个坑是SpringBoot JPA配置中的Hibernate的dialect的配置,很多教程上都没有这一项的配置,但这是不可缺少的,配置为:


spring.jpa.database-platform=org.hibernate.dialect.MySQL5Dialect


    第三个坑是采用的如此版本的数据库和驱动,会产生一个时区错误,导致应用无法启动,解决办法是修改spring.datasource.url连接串为:


spring.datasource.url=jdbc:mysql://localhost:3306/springboot2018?useUnicode=true&characterEncoding=UTF-8&characterSetResults=utf8&serverTimezone=GMT


    第四个小坑是,MySql8的jdbc的driver-class是com.mysql.cj.jdbc.Driver,而不是com.mysql.jdbc.Driver。

---------------------
作者:davylee2008
来源:CSDN
原文:https://blog.csdn.net/DavyLee2008/article/details/81007954
版权声明:本文为博主原创文章,转载请附上博文链接!

2018年10月23日星期二

Generating entities from tables



已經有database的table, 如何快速產生entities的java file?


  • 可以使用eclipse內建的功能,步驟參考以下網址:

http://www.eclipse.org/webtools/dali/docs/3.2/user_guide/tasks006.htm




  • JBoss Tools into Eclipse
以前使用過hibernate tool,比較麻煩:
https://o7planning.org/en/10125/using-hibernate-tools-generate-entity-classes-from-tables






2018年9月8日星期六

Maven 打包报“java.lang.StackOverflowError”错解决办法



Maven 打包报“java.lang.StackOverflowError”错解决办法


在IDEA集成开发工具中执行: 
setting->maven->runner->VM Options中添加“-Xss4096k” 


2018年8月28日星期二

HBaseConfiguration的一些使用方式



Configuration config = HBaseConfiguration.create();

config的設定有找到以下幾種(應該不只):


  • zookeeper
config.set("hbase.zookeeper.quorum", "ec2- xxx-1.amazonaws.com"); config.set("hbase.zookeeper.property.client.port","12345");

  • 使用xml
config.addResource(new Path(System.getenv("HBASE_CONF_DIR"), "hbase-site.xml")); config.addResource(new Path(System.getenv("HADOOP_CONF_DIR"), "core-site.xml"));
參考


  • cluster
Configuration conf = HBaseConfiguration.create(); Cluster cluster = new Cluster();
cluster.add("ec2-23-20-165-137.compute-1.amazonaws.com", 8080); // co RestExample-1-Cluster Set up a cluster list adding all known REST server hosts.
Client client = new Client(cluster); // co RestExample-2-Client Create the client handling the HTTP communication.
參考

2018年8月13日星期一

MIME 簡介



多用途網際網路郵件擴展MIMEMultipurpose Internet Mail Extensions)是一個網際網路標準,它擴展了電子郵件標準,使其能夠支援:


  • ASCII字符文本;
  • 非文本格式附件(二進位、聲音、圖像等);
  • 由多部分(multiple parts)組成的消息體;
  • 包含非ASCII字符的頭信息(Header information)。 



  • Relay 與認證機制


    當你需要 MTA 幫你將信寄送到下一部 MTA 去時,這個動作就稱為郵件轉遞 (Relay)

    通常設定 Relay 的方法有這幾種:
    • 規定某一個特定用戶端的 IP 或網段,例如規定內部 LAN 的 192.168.1.0/24 可使用 Relay;
    • 若用戶端的 IP 不固定時 (例如撥接取得的非固定 IP) 可以利用認證機制來處理。
    • 將 MUA 架設在 MTA 上面,例如 OpenWebMail 之類的 web 介面的 MUA 功能。
    認證機制上面常見的有 SMTP 郵件認證機制,以及 SMTP after POP 兩種,不論是哪一種機制, 基本上都是透過讓使用者輸入認證用的帳號與密碼,來確定他有合法使用該 MTA 的權限,然後針對通過認證者開啟 Relay 的支援就是了。


    方式:
    自動偵測及封鎖使用者認證異常的來源IP,提供使用者認證方式包含使用 SMTP(SASL) / POP3 / IMAP / SMTPS / POP3S / IMAPS 協定登入認證。





    E-mail 發信流程



    • MUA (Mail User Agent) -> MTA (Mail Transfer Agent) -> MDA (Mail Delivery Agent)



    • 參考下圖:



    • Protocol : SMTP (Simple Mail Transfer Protocol, 簡單郵件傳輸協定)
    • Port : 25 






    2018年8月8日星期三

    子網域能有不同的mail server


    不錯的文章

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

    • 重點摘要如下:
    Q : 
    假設我註冊了一個abc.com的網域, 我也新增了taipei.abc.com, beijing.abc.om, paris.abc.com 三個子網域, 我想把這三個子網域分別給三家公司, 由他們自己去維護, 有自己的mail server, 如何設定?

    Ans:
    DNS Server上設定好三組的sub-domains對應到不同的IP
    DNS正向對應
    taipei.abc.com, 192,168.0.1, 主機(A)
    beijing.abc.com, 192,168.0.2, 主機(A)
    paris.abc.com, 192,168.0.3, 主機(A)
    taipei.abc.com, 192,168.0.1, MX
    beijing.abc.com, 192,168.0.2, MX
    paris.abc.com, 192,168.0.3, MX
    準備三台Mail Server,將IP設定好
    Server1 的mail server設定值 taipei.abc.com-->IP192,168.0.1
    Server2 的mail server設定值 beijing.abc.com-->IP192,168.0.2
    Server3 的mail server設定值 paris.abc.com-->IP192,168.0.3
    =================

    • 以上資料來源:

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

    • 其他用途:
    1. 上面的例子是三個子公司,其實也可以用在不同的部門或者不同的功能
    例如:
    一個mail sever負責一般的mail
    另外一個mail server專門負責發送電子報(因為數量龐大所以與其他mail區隔)

    2. 另外,不同mail server對應的IP,除了是自家的IP,也可以改用其他第三方的IP(例如:Mail託管)

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

    • 其他參考資料:










    2018年7月16日星期一

    Anguler + Spring boot 整合(測試or Deploy)



    • Anguler  以及  Spring boot  可以分開兩個 project 開發 , 整合測試或者Deploy可以分開放
    例如:  Angular 放在Apache , Spring boot 放在tomcat


    • 如果要放在一起的時候,可以參考以下的作法 :
      • Step 1 : 
    找到Angular.json 這個檔案,修改以下的outputPath:
    "outputPath": "dist/Angular6SpringBoot"

    例如改為:
    "outputPath": "D:\\SpringRestMySQL\\src\\main\\resources\\public",


      • Step 2 :
    以下是Spring Boot放static content的位置 ,可以放入Angular build之後的檔案
    /src/main/resources/static/
    /src/main/resources/public/
    /src/main/resources/resources/
    /src/main/resources/META-INF/resources/


      • Step 3 : 
    執行以下指令(Angular build)
    ng build



    • 然後,可以在Spring boot的專案裡面找到ng build之後的檔案 : 



    • 參考範例 :  我是用以下的範例做測試與修改
    http://javasampleapproach.com/spring-framework/spring-data/spring-boot-angular-6-example-spring-data-jpa-rest-mysql-crud-example




    2018年7月3日星期二

    Initialization Demand Holder (IoDH)的 Singleton



    饿汉式Singleton不能实现延迟加载,不管将来用不用始终占据内存;懒汉式Singleton线程安全控制烦琐,而且性能受影响。

    有没有一种方法,能够将两种单例的缺点都克服,而将两者的优点合二为一呢?答案是:Yes!下面我们来学习这种更好的被称之为Initialization Demand Holder (IoDH)的技术。

    https://quanke.gitbooks.io/design-pattern-java/%E7%A1%AE%E4%BF%9D%E5%AF%B9%E8%B1%A1%E7%9A%84%E5%94%AF%E4%B8%80%E6%80%A7%E2%80%94%E2%80%94%E5%8D%95%E4%BE%8B%E6%A8%A1%E5%BC%8F%20%EF%BC%88%E5%9B%9B%EF%BC%89.html

    2018年7月2日星期一

    IE 11 不支援 console.log


    同事遇到 -->  IE 11 不支援 console.log


    解決方案1  -->  console.dir

    
      window.console.log(PM); //Undefined
      window.console.dir(PM); //Works  

    解決方案2  -->  jquery的log
    $.log
    範例:
       // log 會記錄時間跟事件
       $.log(new Date(e.timeStamp) + " 點擊了按鈕" + e.target.id);

    2018年6月13日星期三

    Spring Boot属性配置文件详解

    不錯的文章

    http://blog.didispace.com/springbootproperties/

    Base 64


    RFC2045中有规定:
    The encoded output stream must be represented in lines of no more than 76 characters each.
    Base64一行不能超过76字符,超过则添加回车换行符。
    结合前面博客说的“有回车符,导致JSON格式不符合要求”,那就明白了,对附件进行Base64编码,因为超过76字节,所以要添加回车换行符,后台解析带有回车换行符的JSON字符串就出现“ net.sf.json.JSONException : Unterminated string ”。
    问题根源就是回车换行符,那删除就行了,谷歌后又发现一问题,原来“回车换行符(\r\n)”是在Windows才有,而Linux只有换行(\n),Mac只有回车(\r)。
    再搜索了一下找到了解决办法,调用字符串对象的replaceAll方法替换掉\r和\n,代码如下
    字符串对象.replaceAll("\r|\n", "");
    这样就兼容了不同平台。




    參考以下:
    https://blog.csdn.net/jifengwan/article/details/45460695

    AES



    筆記如下:

    1.  AES線上工具請參考 : https://www.devglan.com/online-tools/aes-encryption-decryption

    2. 密钥长度问题

    https://blog.csdn.net/jack85986370/article/details/51423188


    使用HttpServletRequest , 取得POST JSON


    沒有辦法使用request.getParameter方式拿到JSON
    目前改用以下方式:

      StringBuffer jsonReq = new StringBuffer();
      String line = null;
      try {
    BufferedReader reader = request.getReader();
    while ((line = reader.readLine()) != null)
    jsonReq.append(line);
      } catch (Exception e) { /*report an error*/ }

    比較多筆檔案


    參考:

    1. 以下可用
    https://www.scootersoftware.com/vbulletin/showthread.php?14014-Script-to-collect-all-differences-from-all-files-in-two-directories





    2. 以下還沒用過
    https://www.scootersoftware.com/vbulletin/showthread.php?2216-comparing-multile-files-to-single-output



    2018年2月24日星期六

    人工智慧:機器學習和神經網路的應用與挑戰




    • 优化器 Optimizer 加速神经网络训练 (深度学习) Speed up neural network training process (deep learning)

    https://www.youtube.com/watch?v=UlUGGB7akfE
    Stochastic Gradient Descent (SGD);
    Momentum; AdaGrad; RMSProp; Adam.



    • CNN : 

    https://brohrer.mcknote.com/zh-Hant/how_machine_learning_works/how_convolutional_neural_networks_work.html



    学习网站: http://morvanzhou.github.io/tutorials/




    • 不錯的講座

    人工智慧:機器學習和神經網路的應用與挑戰
    https://www.youtube.com/watch?v=ka2zIxLePcM





    2018年2月22日星期四

    Add local jar to maven project -2/2


    将jar文件加到Maven的local repository中

      对于Maven项目来说,日常使用的多数第三方java库文件都可以从Maven的Central Repository中自动下载,但是如果我们需要的jar文件不在Central Repository中,那么我们就需要手动将自己下载的jar文件加入到Maven的local reposotory中了,此时我们需要向Maven提供用于识别jar文件(可能多个)的groupId, artifactId和version等信息

    1. pom.xml

    <dependency>
    <groupId>com.hitrust.acl.util</groupId>
    <artifactId>hitrustUtil</artifactId>
    <version>1.0</version>
    </dependency>


    2.   install jar to local maven

    2.1執行以下指令: (下面紅字部分,請改為你筆電的目錄路徑)

    mvn install:install-file
     -Dfile=D:\eclipse\workspace\AccLinkSocketServer\lib\hitrustUtil-1.0.jar
      -DgroupId=com.hitrust.acl.util -DartifactId=hitrustUtil
      -Dversion=1.0 -Dpackaging=jar -DgeneratePom=true

    2.2說明


    2.3範例:
     mvn install:install-file -Dfile=D:\Obank\dev1211\eclipse\workspace\AccLinkSocketServer\lib\hitrustUtil-1.0.jar -DgroupId=com.hitrust.acl.util -DartifactId=hitrustUtil -Dversion=1.0 -Dpackaging=jar -DgeneratePom=true 



    3. mvn clean package


    4. java -jar target\{yourJarFileName}.jar





    2018年2月21日星期三

    Add local jar to maven project - 1/2


    1. 範例:

    2.  jar檔案名稱必須符合格式 ,例如:  hitrustUtil-1.0.jar


    3. 以上可以打包為jar  (mvn clean packageJ)



    Spring Boot 變成windows service




    • 參考資料:

    http://www.baeldung.com/spring-boot-app-as-a-service



    • 其中有一個重點:

    open cmd 的時候, 必須  以系統管理員身分執行