當一位新人進入股票、數位貨幣市場後,會經歷以下幾個階段。

之前在做股市的時候,常常看到這樣的狀況,現在在數位貨幣市場又看到了一次。
通常,在多頭(長期上漲)的時候,會有需多新鮮的韭菜… 我是說新人捧著大把鈔票進入市場。

當一個人進入股市後,他的心態可以分成以下幾個階段:
第一階段:
剛進股市的人,整天都覺得會漲,一直想買。
這時候的心態有點像是,到菜市場買菜那樣,今天看到高麗菜一顆50元,明天看到高麗菜一顆70元,就會覺得太貴買不下手。
但看著越來越高的股價,覺得現在進場的話就買貴了,因此遲遲不敢進場。
直到有天股市跌了,就覺得得「哇!今天的菜價好便宜。」於是就把滿手的鈔票拿去買股票。

雖然他買的可能不是最低點。但在多頭當中,都會有幾次回檔,因此趁回檔的時候買進會賺錢的。

但沒有天天漲的股票,有的時候,這一次的下跌,就是多頭轉變為空頭(長期下跌)的轉折點。
大跌初期,我們這位萌新就會看見滿地便宜貨,跳下去大買特買。
當他抱著滿手股票,卻看到跌勢依然持續時,他會想「可惡,這次沒買到最低點。」
但隨著時間過去,跌勢依然持續下去時,他就會開始覺得,這一次好像跟以前不一樣。
於是,他學到了「空頭」是什麼。
這時候,他就會進入第二階段。

(繼續閱讀…)

FGO羅生門,茨木的血條是倒數計時器。

經數據確認,茨木的血條是倒數計時器。
.
給沒玩FGO的人的簡介:FGO的羅生門活動,有個boss叫做茨木,他有個全體血條。官方公告說,那個血條是全伺服器共用的,玩家打贏茨木之後,造成的傷害會從全體血條扣除,當茨木的全體血條歸零後,可以開啟新的關卡。
這樣的關卡總共有7個,每兩天的凌晨12點開一場新的關卡。
.
我在第三日的關卡時,想要看看能不能打到擊殺茨木(總血條歸零)的場次,就在快結束的時候,連續刷關,刷了幾場之後覺得血條的數字怪怪的,怎麼都是 ..334 ..667 ..112 ..445 ..778 之類的尾數,我直覺上覺得這個數字不是全體玩家對茨木造成的傷害,而是某個整數除以3會造成的尾數。
.
刷到後來,血條在關卡開放後隔天早上的10點整準時歸零,讓我覺得更可疑了,一般玩家打的速度在要10:00準時歸零的可能性並不高,雖然單單只靠「10點整結束」不足以認定血條是假的,但考慮到那些奇怪的尾數,就讓我覺得,這血條是倒數計時器的可能性很高。
.
所以,第四日活動的時候,我就做了個紀錄,將時間、茨木血量給記錄下來,觀察血量的變化。
如果這個血量真的是玩家造成的話,那麼,下降的速度應該會跟玩家的活動時間相關。

(繼續閱讀…)

Java ArrayDeque die in Multiple threads

今天遇到一個問題

Java 的 ArrayDeque 並非執行序安全的物件,在多執行緒的狀況下,會卡死,導致使用poll時,任何東西都拿不出來。

解決方法很簡單單,上個synchronized去鎖住就行了。

因為我原本在使用這個東西的程式碼中,在別的地方有用lock去控制執行緒,再加上認為這邊應該只會造成順序亂掉之類的問題,就沒上synchronized,沒想到ArrayDeque會死到連東西都拿不出來。

package com.f23ko.test;

import java.util.ArrayDeque;
import java.util.Deque;
import java.util.Map;

/**
 * Created by f23ko on 2016/10/5.
 *
 * sysout:
 * take(3) put(3) diff(0)
 * take(326) put(866) diff(540)
 * take(1746) put(1751) diff(5)
 * take(2629) put(2637) diff(8)
 * take(3515) put(3523) diff(8)
 * take(4400) put(4408) diff(8)
 * take(4718) put(5285) diff(567) <= ArrayDeque die
 * take(4718) put(6164) diff(1446)
 * take(4718) put(7047) diff(2329)
 */
public class QueueTest {
    static Deque<Integer> queue=new ArrayDeque<>();
    static int take=0;
    static int put=0;

    static void take()  {
        while (true){
            Integer t= queue.poll();
            if(t!=null){
                take++;
                continue;
            }

            try {
                Thread.sleep(10);
            } catch (InterruptedException e) {
                e.printStackTrace();
            }
        }
    }
    static void put() {
        int i=0;
        while (true){
            i++;
            queue.offer(i);
            put++;
            try {
                Thread.sleep(10);
            } catch (InterruptedException e) {
                e.printStackTrace();
            }
        }
    }
    static void print(){
        while (true){
            int t=take;
            int p=put;
            System.out.println("take("+t+") put("+p+") diff("+(p-t)+")");
            try {
                Thread.sleep(3000);
            } catch (InterruptedException e) {
                e.printStackTrace();
            }
        }
    }

    public static void main(String[] args){
        new Thread(QueueTest::put).start();
        new Thread(QueueTest::put).start();
        new Thread(QueueTest::put).start();
        new Thread(QueueTest::take).start();
        new Thread(QueueTest::print).start();
    }
}

Ruby on Rails 常用指令、程式碼整理

我開始學ROR,因為指令很多,所以特別寫整理這一篇文章來紀錄常用的指令。

資料庫遷移 (前面加 STEP=2 可以指定移動2個版本,例如STEP=2 rake db:rollback)
rake db:rollback
rake db:migrate
rake db:migrate:status

依照 db/schema.rb 建立資料庫,或是撈出資料庫
rake db:schema:load
rake db:schema:dump

資料庫中預設保留的欄位
created_at – 创建记录时,自动设为当前的时间戳;
updated_at – 更新记录时,自动设为当前的时间戳;
lock_version – 在模型中添加乐观锁定功能;
type – 让模型使用单表继承;
(association_name)_type – 多态关联的类型;
(table_name)_count – 缓存关联对象的数量。例如,posts 表中的 comments_count 字段,缓存每篇文章的评论数

檢視路由表
rake routes

查詢複數形
rails c 然後 “user".pluralize => users

防止中文編碼出問題的註解
# encoding: UTF-8

Migration的資料庫預設30字元,不可為空值,預設空白
t.string :name, limit: 30,  null: false, default: "

欄位的設定
ActiveRecord::ConnectionAdapters::TableDefinition

Model底下可以用serialize 去指定序列化的欄位

Gem  acts_as_nested_set  這個Gem可以去處理樹狀資料庫結構的問題

所有的 Rails 元件(如 ActionMailer, ActionController, ActionView, ActiveRecord)都是一個 Railtie,如果你想要像這些一樣的方式來擴充 Rails ,那你可以閱讀這個 Rails::Railtie 來嘗試建立自己的 Railtie
修改 Rails 原本的行為,我們也稱爲「打 Patch」,所以你可以用上面的 Concern 幫 ActiveRecord 打 patch

受保護的文章:智慧的末途

該內容受密碼保護。如欲檢視請在下方輸入你的密碼:


受保護的文章:盲目前行

該內容受密碼保護。如欲檢視請在下方輸入你的密碼:


Ruby on Rails

Ruby on Rails 簡介

台灣的軟體業偏向單打獨鬥,那這樣子的話Ruby on Rails應該會是比較好的選擇,RoRs的開發速度可以壓縮到Java、PHP之類的語言的五分之一。

雖然說java的效能較好,較善於處理大型網站,但老實說,台灣沒幾個網站需要用到這樣的環境,台灣的網站很少把國際的網路服務當成目標。

 

 

而且在單獨開發,整個團隊只有兩三人的狀況下,也沒必要用到java這麼「重型」的語言。

用java從無到有開發一項產品,會是個大工程,這主要是因為java定下了很多規範,甚至連javadoc的寫法都有訂立,這讓任何一個java程式設計師可以輕易的去使用別人所開發的元件,這語言本身就被設計為大型團隊在用的。

 

但在台灣都自己寫自己的,頂多是去找買別人的libary來用,誰在做這種事情啊?

 

所以在台灣,速度、便宜才是唯一標準。

 

 

當網站到大要考慮轉換與語言的時候,再找整個團隊的java工程師也不遲,在那種狀況下,人力根本不是問題。

在台灣這種喜新厭舊、常常跟風的市場,對開發速度非常要求的地方,如果速度比不上,那就根本不用玩了。

乳油木護手霜的配方

自己動手來做乳油木護手霜
61e8epYSYh3DPmJ1brG7ao
IMAG0030

 

(繼續閱讀…)

JSP、ASP.NET、PHP比較

因為自己用過幾種程式語言
所以把用過的感想整理一下
分析各種語言的優缺點

有些人可能會感到困惑:我到底該學哪種語言?

我的回答是….. 你應該看你的用途、去決定使用哪種語言
JAVA、JSP、J2EE
優點:
1.高效能:
主要是因為JVM會動態的把JAVA虛擬碼編譯成C的關係
以及會依照運行狀態去調整他運行的方式
甚至把人寫的爛CODE去改寫成比較好的寫法之類的
不會比C慢太多

(繼續閱讀…)

Gson的JSON轉換成JAVA物件時,型別資訊遺失的解決方法

想要把JSON轉換成JAVA物件,或是把JAVA物件轉換成JSON怎麼做呢?

Gson 是個好用的JSON對JAVA的轉換工具,他可以將JSON轉換成JAVA物件,以及把JAVA物件轉換成JSON

例如:

JAVA:
class A
{
String a="NAME";
int id=500;
}

轉成JSON之後,就會變成

JSON:
{"a":"NAME","id":500}

詳細說明可以看Gson的官方網站
Gson的官方網站

但很遺憾的是,Gson有個缺點,那就是….
(繼續閱讀…)

«page 1 of 8
Welcome , today is 星期一, 2018/06/18