Total Pageviews

2019/04/10

蒙地卡羅模擬法 (Monte Carlo Simulation)

Scenario


使用的範例源自於 How to measure anything 此本書 [3],決策目標


How-To
本範例會使用 googledoc spreadsheet 來展示蒙地卡羅模擬法,請先研究 NORMINV [1] 與 RAND [2] 此二 function


假設衡量的變數如下

若要透過亂數取樣來進行模擬,以每單位維護節省成為為例,NORMINV 所需要帶的三個參數分別為
- x : rand()
- mean: 15
- standard deviation: (20-10) / 3.29

蒙地卡羅模擬法 (Monte Carlo Simulation) 是一種數值方法,利用亂數取樣 (Random Sampling) 模擬來解決數學問題。蒙地卡羅模擬法,是基於大數法則的實證方法,當實驗的次數越多,其平均值也就會越趨近於理論值 [4] 。故你可以將每個衡量變數,跑個一萬次,進行衡量,擷取其中 10 次

最後,你可以統計,預計可能的節省成本,到底有沒有超過 40萬美金的 breakpoint,租賃機器是不是一個合適的決策



詳細的計算,請參考此 spreadsheet 蒙地卡羅模擬法 (Monte Carlo Simulation) 範例
此範例只模擬 100 個情境,可視情況自行增加

Reference
[1] NORMINV
[2] RAND
[3] How to Measure Anything: Finding the Value of Intangibles in Business
[4] 什麼是「蒙地卡羅模擬法﹙ Monte Carlo Simulation ﹚」?

2019/04/09

[閱讀筆記] 情緒勒索 (Emotional Blackmail) (1/4)


  1. 情緒勒索者只不過是想藉此尋求安全感及掌控權,不論外表看起來多麼有自信,他們的內心其實是非常焦慮的。
  2. 情緒勒索其實是「你情我願」、「一個願打、一個願挨,是我們自己缺乏「界線」,情緒勒索者才能成功勒索你。從小活在家庭暴力裡,長大做不到孝順,這不是你的錯;沒有情份的親子關係,不是你的錯;爸媽不快樂,這也不是你的錯;為家人犧牲,請你適可而止;在家庭與我之間,我們得「畫出一條界線」。生命很寶貴,不要為他人賠上自己的人生。拒絕當一名「受害者」,你要有「界限」、要學會說「不」。擺脫別人給你的情緒勒索對你的束縛,要學會為自己的情緒負責,同時也讓別人會他自己的情緒負責,這才是成熟人格的表現
  3. 人性的三大弱點導致情緒勒索
        3.1.     改變是人生最困難的事:當受苦的時候,尤其是自尊越來越低落的時候,往往寧可待在可預期的痛苦當中,也不願意跨出一步嘗試不可預知的未來。
        3.2.     說的總比做的簡單:被情緒勒索的關係中,重要的並不是想法與情緒,而是付諸行動。
        3.3.     情緒勒索是會傳染的:如果你在夫妻關係中經常被勒索,那麼你有可能在親子關係或職場裡,反過來當一名勒索者。
  1. 產生傷口的地方,往往是發生改變的地方。
  2. 使用情緒勒索手段的親友,很少是真的存心要勒索我們的,他們只不過想藉此尋求安全感及掌控權。不論外表看起來多有自信,他們內心其實是非常焦慮的。但是當我們完全附和勒索者的要求時,他們會覺得自己極有影響力,這時情緒恐嚇就成了他們抵抗傷害和恐懼的最佳利器。
  3. 情緒勒索就像藤蔓,他們捲曲的綠鬚不斷地圍繞、蔓延在我們的生活中。如果我們在工作上對這些情緒勒索者讓步,回家後就可能把氣出在孩子身上。或者,如果我們和父母的關係不好,也可能在與工作夥伴相處的模式上出現問題。只要我們和情緒勒索扯上關係,他就會一步步將我們鯨吞蠶食,最終危害到我們最重視的親密關係及自尊。
  4. 恐懼失去、恐懼改變、恐懼遭到拒絕、恐懼無法掌控,成為所有勒索者的一項共通特質。這些是因為長期感到憂慮及匱乏,也有些是因為喪失了安全感及自信心。
  5. 情緒勒索者的三大手段 (FOG)
        8.1.     Fear (恐懼):讓你產生恐懼
        8.2.     Obligation (責任):讓你覺得現況是你的責任
        8.3.     Guilt (罪惡感):讓你產生罪惡感
  1. 情緒勒索的六階段 
        9.1.     要求:情緒勒索者提出要求,把要求搬上檯面,絕對是一項必備要素
        9.2.     抵抗:被勒索者進行抵抗
        9.3.     壓力:若發現被勒索不從,情緒勒索者就會進行施壓,不考慮對方感受
        9.4.     威脅:情緒勒索者可能會威脅要讓對方痛苦與不快
        9.5.     順從:被勒索者自己告訴自己,雖然覺得不妥,但是還是順應對方要求
        9.6.     舊事重演:當情緒勒索者得逞後,被勒索者的確會鬆口氣。被勒索者如果想要以最快方式結束情緒勒索者的苦苦相逼,就只能讓步。於是,彼此的相處模式就已經成形:施加壓力,然後一方屈服。
  1. 若對方真的想要以公平、互惠的方式解決衝突,將會有以下的行動
      10.1.     開誠佈公地討論彼此間的衝突點
      10.2.     知道你的感受和考量
      10.3.     找出你不遵從他們要求的原因
      10.4.     不推卸造成彼此衝突的責任
  1. 如果對方的目標是要迫使你接受,會有以下行為:
      11.1.     試圖掌控你
      11.2.     不理會你的抗議
      11.3.     堅持他們在性格及動機上絕對優於你
      11.4.     對於你們之間真正的問題採取逃避態度
  1. 把所有的情緒勒索者都視為洪水猛獸其實並不正確,你會發現,他們所做的一切並非全出自於惡意,只是著眼於自我的利益罷了。因為這些人通常是我們生命中非常重要的一份子,甚至是良師益友。所以,將「情緒勒索者」的標籤貼在他們身上,絕對是我們不願見到的。想要仔細檢視我們想忘記或忽略的一些行為,的確是一項艱難的任務,但這項行動對於將一段紊亂關係,回歸到堅實的基礎上,卻是重要的一大步。
  2. 情緒勒索者常使用的三種情緒:恐懼 (fear)、責任 (obligation) 與罪惡感 (guilt)
  3. 對於那些常常受制於「責任感」的人來說,為別人犧牲奉獻乃是第一要務。但是,要清楚界定這份「責任感」並不容易,一旦責任感超越了自尊與自我關懷,情緒勒索者很快就會趁機佔了上風。
  4. 所謂的義務,是一種可以讓生活均衡的情感要素。義務盡的太少會讓我們缺乏責任感,但如果事情都攬在自己身上,就會讓自己有數不清的工作和隨之而來的怨懟,一定會把我們壓得喘不過氣來。接著,情緒勒索者可能就會不知不覺地纏上來了。
  5. 作為一個有良知、負責任的人,「罪惡感」可說是一項必備的人格要素。在未被扭曲的狀態下,它也是一項意識工具,只要我們違反了自我與社會的規範,它就會讓我們產生不舒服和自責的感受。如此一來,我們的「道德指南針」便得以運作。也因為這種不愉快感受的出現,更能鞭策我們做些補償措施,以紓解不快。我了避免產生罪惡感,我們當然也就不會有傷害別人的舉動。
  6. 只要我們是有良知的人,罪惡感的規範便無所不在。不幸的是,「罪惡感」有時後也會出錯,就像個過於敏感的汽車警報器,如果有車輛經過警鈴大作,根本就已經無法發揮當初設計的防竊目的。此時,就像情緒勒索者的「欲加之罪」。簡單地說,「欲加之罪」的製造過程如下: 
  7. 每個人所認同的智慧泉源各有不同,我們當然不能要求大家都秉持相同的看法。但有一點是肯定的:不論情緒勒索者提出何種說法、評論、文章,都只說明了一點,這全是他們的看法。
  8. 當我們談到工作場合中的壓力時,最明顯的就要算是具體可見的壓力了,例如被解雇。但是,工作場合中也可能衍生出一般家庭常產生的感受與關係的變化,互相競爭、嫉妒、兄弟間的較量及取悅重要人物等情況,驅使我們朝自己的極限邁進,甚至要超越極限。但是,試圖超越在不同需求、才能、環境下所設定的艱難標準,無疑是一項最大的危機。到頭了,我們可能會愕然發現,自己已經為工作犧牲了家庭、興趣,甚至是最重要的健康。
  9. 剛開始,我們會十分堅持自己的需求,以作為抵抗情緒勒索者的理由。但漸漸地,情緒勒索者會掉我們原先的堅持,還會讓我們相信,其實我們不太曉得自己到底需要什麼。在這些行為策略的運用下,情緒勒索者通常可以讓我們任其宰割。這麼說的確聽起來有點怪異,但這正是我們需要學習的地方。我們既然可以允許這些手法發揮作用,當然可以把它們甩到一邊,或是削弱它們的威力。

2019/04/08

[Spring Boot] A simple example for Spring Boot Profile

Scenario


How-To
1. Create a WeatherService
package com.example.service;

public interface WeatherService {

    String getWeatherForecast();

}


2. Create a SunnyDayService and assign sunny & default
package com.example.service;

import org.springframework.context.annotation.Profile;
import org.springframework.stereotype.Service;

@Service
@Profile({"sunny", "default"})
public class SunnyDayService implements WeatherService {

    @Override
    public String getWeatherForecast() {
        return "Today is sunny day";
    }

}


3. Create a RainingDayService and assign raining profile
package com.example.service;

import org.springframework.context.annotation.Profile;
import org.springframework.stereotype.Service;

@Service
@Profile({"raining"})
public class RainyDayService implements WeatherService {

    @Override
    public String getWeatherForecast() {
        return "Today is raining day";
    }

}


4. Assign active profile in application.yml
spring:
  profiles:
    active: raining


5. Test code
package com.example.test;

import com.example.service.WeatherService;
import lombok.extern.slf4j.Slf4j;
import org.springframework.boot.CommandLineRunner;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.ComponentScan;

@SpringBootApplication
@ComponentScan(basePackages = "com.example")
@Slf4j
public class TestApplication {

    public static void main(String[] args) {
        SpringApplication.run(TestApplication.class, args);
    }
 
    @Bean
    CommandLineRunner testWeatherService(WeatherService weatherService) {
        return args -> {
            String output = weatherService.getWeatherForecast();
            log.debug("weather forecast = {}", output);
        };
    }

}



Console
2018-12-20 09:53:30.255 DEBUG 6920 --- [           main] com.example.test.TestApplication         : weather forecast = Today is raining day


2019/04/07

[HTML] Using DATA URI to show image in HTML

Here has a simple example to demonstrate how to use base64 string to show image in HTML instead of physical image file.

Steps
Step 1. Find a picture and upload to https://www.base64-image.de/


Step 2. Copy base64 string


Step 3. Go to https://plnkr.co/ to do test


Here has an url to demonstrate

https://plnkr.co/edit/xt2W5IFQgvqgOwwmgHUT?p=preview

2019/04/06

[閱讀筆記] Thinking in Systems: A Primer (1/9)


  1. 這本書的主要目的是要針對系統 (system) 提供不同的看法與想法,目標讀者是對系統這個字感到有興趣的與系統分析領域的人。作者會使用非技術性的語言來進行討論,不要使用數學或電腦領域的字眼,讓讀者理解系統。並且,由於一張圖可以抵萬語,作者會透過圖形來讓讀者更容易理解。
  2. 何謂系統 (system)一個系統是由一組事物 (例如人、細胞、分子等) 所組成,彼此間以某種方式互相連結,並產生某種行為模式。這個系統可能會受到外部力量的觸發、驅動、衝擊或限制,系統對於外部力量也會產生反饋 (feedback) 的力量。在真實世界中,系統對於外部力量所產生的反饋力量,很少是單純、可預測的。
  3. 系統可以是一棵樹、一個人、一家公司,甚至一個城市、經濟體、生態系或地球。系統在現實中形成,一旦形成,就無法順服於單一的意志之下,無法被預測和控制
  4. 日常生活常見的系統的例子
        4.1.     政治領導者通常無法造成經濟蕭條或經濟繁榮 (economic booms)。經濟的起伏源自於市場經濟的結構。
        4.2.     競爭者鮮少能造成一家公司失去市佔率。競爭者或許只是善用自己的競爭優勢,失敗的公司則是在商業決策上做了錯誤的決定。
        4.3.     石油輸出國無法獨自控制油價,他們無法自己驅動全球油價上揚,這還需要看石油消耗、定價與石油輸入國的投資政策等。
        4.4.     感冒病毒不會攻擊你,是你自己給了病毒一個可以發展的條件。
  1. 未來是不可預測的,但是人類可以想像未來,並且在人們的腦海中栩栩如生,呼之欲出;系統不可以被控制,但它們可以被設計和重構。
  2. 雖然不能掌控眼前的大千世界,讓它永遠風平浪靜,但是我們有機會預料各種可能的意外,聆聽系統的聲音,順應特性,創造出更美好的事物。
  3. 我們所面臨的世界,是一個複雜系統 (complex system)。我們的身體就是一個很好的例子,人體內平均有37.2 兆個細胞,體內的細胞會互相連結、整合、自我修復。我們所遇到的每個人、每個組織、每隻動物、花園、樹木與森林等,都是複雜系統。
  4. 由於在複雜系統中,系統的反饋 (feedback) 會有所延遲 (delay),當問題已經變得明顯易見時,通常都會變得非常棘手、難以處理
  5. 根據競爭排除原理 (competitive exclusion principle),兩個同時進行的活動,往往會因為有限的資源而競爭,這時只要有一個表現比較好,就會開始爭取到更多資源,產生正增強環路,同時排擠到另一邊產生負增強環路。兩個使用同一資源的活動同時展開,其中一個蒸蒸日上,另一個則陷於掙扎求生的狀態。最典型的例子就是富者越富、貧者越貧 (The rich get richer and the poor get poorer)
  6. 為了解決競爭排斥,領導者針對共同享用資源的分配時,除了績效表現,也要考量『整體均衡發展』的更上層目標,有些狀況應該要將『同一』資源予以『區分』規劃,以減少不必要的競爭。避免發生分到較多的資源者,產生較好的成果,因而又得到更多的資源;分到較少的資源者,產生較差的結果,因而分到的資源更少。
  7. 相較於較單純的系統 (uniform system)擁有多條路徑 (pathways) 與備餘 (redundancy) 的多元系統 (diverse system),對於外部衝擊 (external shock) 的反應一定較為穩定且較不脆弱 (less vulnerable)。例如,不要將所有的雞蛋放在同一個籃子 (don’t pull all you eggs in one basket)
  8. 飢荒、貧窮、環境汙染、經濟衰退、失業、慢性疾病、非法藥物成癮、戰爭等問題,都不是人們想製造的問題,但是這些問題卻存在許久,一直無法徹底解決。因為這些屬於根本的系統問題 (intrinsically systems problems),都是系統結構中有害的行為特徵所產生的系統問題。我們只能細心觀察造成這些系統問題的來源,將其重新設計與重構 (restructure)
  9. 在書本中,字與句子一定是逐一、線性的方式出現。但是在複雜系統中,則是一口氣全部出現,而且彼此間關聯方向不只單向,而是多個方向的方式同時發生。
  10. 這個世界變得比以前更混亂、更擁擠、更緊密結合、更互相依賴、更快速改變。系統思考 (systems thinking) 可以幫助我們了解整體系統與
      14.1.     磨練我們了解系統組成的能力 (hone our abilities to understand parts)
      14.2.     看出各個系統組成間的交互關係 (see interconnections)
      14.3.     對於可能的未來行為,詢問 "如果...會怎麼樣 ?" 的問題 (ask what-if questions about possible future behaviors)
      14.4.     對於系統重新設計保持創意與勇氣 (be creative and courageous about system redesign)
  1. 瞎子摸象的故事告訴我們,我們無法透過僅僅知曉幾個系統的組成元素,就了解整體系統的可能行為 (The behavior of a system cannot be known just by knowing the elements of which the system is made)
  2. 系統一定是由三樣事物所組成:組成元素 (elements)、相互關係 (interconnection) 與提供某個功能或達成某個目的 (function or purpose)。 
      16.1.     以消化系統 (digestive system) 為例,牙齒、酶、食道、胃與腸,都是消化系統的組成元素 (elements);組成元素間會互相合作,將食物往胃腸流動;這個系統的主要目的是要將食物分解成人體所需的基礎營養,並將這些養分 (nutrients) 轉換到血液中。
      16.2.     以足球團隊為例,球員、教練、球場與足球,都是系統的組成元素 (elements);足球規則、教練的戰術、球員間的溝通以及球員與球的物理限制,都是組成元素間的相互關係 (interconnection);足球團隊的目的可能是贏得比賽、好玩、運動健身或賺大錢等等。
  1. 有很多事物都是系統 (system),例如學校、城市、工廠、企業、國家經濟、動物、樹木等。森林則是一個更大的系統,可以包含樹木與動物,成為它的子系統。地球、太陽系、銀河等,也都是系統,系統還可以嵌入多個其他系統。 
  2. 什麼東西『不是』系統?一個由不同事物所組成的聚合體 (conglomeration),彼此間沒有任何交互關係 (interconnection),也沒有提供任何功能或要達成任何目的,此時就不能稱之為一個系統。例如馬路上偶遇的沙子就不是一個系統。你可以增加或帶走一些沙子,對於馬路沒有任何影響。但是如果在足球比賽缺少一個球員、或是消化系統中某個器官失能,對於原本的系統就會產生重大衝擊,就不是原本那個系統了。
  3. 並非一群事物的總和就是一個系統。其必須能夠展現可調適性 (adaptive)、動態性 (dynamic)、追尋目標 (goal-seeking)、自我保護 (self-preserving),並且有時候還會有演化的行為 (evolutionary behavior)
  4. 系統組成的元素,包含有形的與無形的。以大學為例,教室、學生、教授、行政人員、圖書館、課科書、電腦等,都是有形的元素;校譽、學術專業能力等,對於大學來說,也是非常重要的無形元素。一旦你開始列舉系統的組成元素時,這會是個看不到終點的過程,因為元素 (elements) 可以再往下細分為 sub-elementsub-sub-elements,你會發現你會很快地失焦,這就是所謂的見樹不見林 (you can’t see the forest for the trees)

2019/04/05

[Spring boot] How To Do @Async in Spring

Setup Asynchronous configuration:
package com.example.config;

import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.scheduling.annotation.EnableAsync;
import org.springframework.scheduling.concurrent.ThreadPoolTaskExecutor;

@Configuration
// enable asynchronous processing with Java configuration
@EnableAsync
public class AsyncConfig {

    @Bean("githubUserLookupExecutor")
    public ThreadPoolTaskExecutor getAsyncExecutor() {
        ThreadPoolTaskExecutor executor = new ThreadPoolTaskExecutor();
        executor.setCorePoolSize(20);
        executor.setMaxPoolSize(1000);
        executor.setWaitForTasksToCompleteOnShutdown(true);
        executor.setThreadNamePrefix("Async-");
        return executor;
    }

}



Create a GitHub Lookup Service:
package com.example.service;

import com.fasterxml.jackson.annotation.JsonIgnoreProperties;
import lombok.Data;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.http.client.SimpleClientHttpRequestFactory;
import org.springframework.scheduling.annotation.Async;
import org.springframework.stereotype.Service;
import org.springframework.web.client.RestTemplate;

import java.net.InetSocketAddress;
import java.net.Proxy;
import java.util.concurrent.CompletableFuture;

/**
 * GitHub Lookup Service
 */
@Slf4j
@Service
public class GitHubLookupService {

    @Value("${http.proxy.host}")
    private String host;

    @Value("${http.proxy.port}")
    private Integer port;

    /**
     * The method needs to be public so that it can be proxied.
     * And self-invocation doesn’t work because it bypasses the proxy and
     * calls the underlying method directly
     *
     * @param name user name
     * @return
     */
    @Async("githubUserLookupExecutor")
    public CompletableFuture<User> findUser(String name) {
        log.debug("looking up {}", name);

        String url = String.format("https://api.github.com/users/%s", name);
        User user = new RestTemplate(setupProxy()).getForObject(url, User.class);

        return CompletableFuture.completedFuture(user);
    }

    private SimpleClientHttpRequestFactory setupProxy() {
        SimpleClientHttpRequestFactory requestFactory = new SimpleClientHttpRequestFactory();

        Proxy proxy = new Proxy(Proxy.Type.HTTP, new InetSocketAddress(host, port));
        requestFactory.setProxy(proxy);
        return requestFactory;
    }


    /**
     * Representation of a GitHub User (JSON to Object)
     */
    @Data
    @JsonIgnoreProperties(ignoreUnknown = true)
    public static class User {
        private String login;
        private String name;
        private String blog;
        private String location;
    }

}



Test code:
package com.example.test;

import com.example.service.GitHubLookupService;
import lombok.extern.slf4j.Slf4j;
import org.springframework.boot.CommandLineRunner;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.ComponentScan;

import java.util.concurrent.CompletableFuture;

@SpringBootApplication
@ComponentScan(basePackages = "com.example")
@Slf4j
public class TestApplication {

    public static void main(String[] args) {
        SpringApplication.run(TestApplication.class, args);
    }

    @Bean
    CommandLineRunner run(GitHubLookupService service) {
        return args -> {
            // Kick off multiple asynchronous lookups
            CompletableFuture<GitHubLookupService.User> junyuo = service.findUser("junyuo");
            CompletableFuture<GitHubLookupService.User> springProjects = service.findUser("Spring-Projects");
            CompletableFuture<GitHubLookupService.User> tensorflow = service.findUser("tensorflow");
            CompletableFuture<GitHubLookupService.User> dotnet = service.findUser("dotnet");
            CompletableFuture<GitHubLookupService.User> google = service.findUser("google");

            // Wait until they are all done
            CompletableFuture.allOf(junyuo, springProjects, tensorflow, dotnet, google).join();

            log.debug("user = {}", junyuo.get());
            log.debug("user = {}", dotnet.get());
            log.debug("user = {}", springProjects.get());
            log.debug("user = {}", google.get());
            log.debug("user = {}", tensorflow.get());
        };
    }

}


Console log:
2018-12-06 11:01:52.358  INFO 11440 --- [           main] o.s.b.w.embedded.tomcat.TomcatWebServer  : Tomcat started on port(s): 8080 (http) with context path ''
2018-12-06 11:01:52.361  INFO 11440 --- [           main] com.example.test.TestApplication         : Started TestApplication in 2.522 seconds (JVM running for 3.465)
2018-12-06 11:01:52.370 DEBUG 11440 --- [        Async-3] com.example.service.GitHubLookupService  : looking up tensorflow
2018-12-06 11:01:52.370 DEBUG 11440 --- [        Async-4] com.example.service.GitHubLookupService  : looking up dotnet
2018-12-06 11:01:52.370 DEBUG 11440 --- [        Async-5] com.example.service.GitHubLookupService  : looking up google
2018-12-06 11:01:52.370 DEBUG 11440 --- [        Async-2] com.example.service.GitHubLookupService  : looking up Spring-Projects
2018-12-06 11:01:52.370 DEBUG 11440 --- [        Async-1] com.example.service.GitHubLookupService  : looking up junyuo
2018-12-06 11:01:53.759 DEBUG 11440 --- [           main] com.example.test.TestApplication         : user = GitHubLookupService.User(login=junyuo, name=Albert Kuo, blog=http://albert-kuo.blogspot.com/, location=Taipei)
2018-12-06 11:01:53.759 DEBUG 11440 --- [           main] com.example.test.TestApplication         : user = GitHubLookupService.User(login=dotnet, name=.NET Foundation, blog=http://www.dotnetfoundation.org, location=null)
2018-12-06 11:01:53.759 DEBUG 11440 --- [           main] com.example.test.TestApplication         : user = GitHubLookupService.User(login=spring-projects, name=Spring, blog=http://spring.io/projects, location=null)
2018-12-06 11:01:53.759 DEBUG 11440 --- [           main] com.example.test.TestApplication         : user = GitHubLookupService.User(login=google, name=Google, blog=https://opensource.google.com/, location=null)
2018-12-06 11:01:53.759 DEBUG 11440 --- [           main] com.example.test.TestApplication         : user = GitHubLookupService.User(login=tensorflow, name=null, blog=http://www.tensorflow.org, location=null)