• <ins id="pjuwb"></ins>
    <blockquote id="pjuwb"><pre id="pjuwb"></pre></blockquote>
    <noscript id="pjuwb"></noscript>
          <sup id="pjuwb"><pre id="pjuwb"></pre></sup>
            <dd id="pjuwb"></dd>
            <abbr id="pjuwb"></abbr>

                  有效利用標準庫提供的type_traits,讓程序在編譯時作出分支選擇

                  讓程序中的簡單if-else在編譯期間決定

                  ex. 1 /*
                   2  * =====================================================================================
                   3  *
                   4  *       Filename:  3.cpp
                   5  *
                   6  *    Description:  
                   7  *
                   8  *        Version:  1.0
                   9  *        Created:  03/01/2016 11:38:53 AM
                  10  *       Revision:  none
                  11  *       Compiler:  gcc
                  12  *
                  13  *         Author:  shih (Hallelujah), sh19871122@gmail.com
                  14  *   Organization:  
                  15  *
                  16  * =====================================================================================
                  17  */
                  18 
                  19 #include <stdio.h>
                  20 #include <stdint.h>
                  21 #include <iostream>
                  22 #include <type_traits>
                  23 
                  24 template<typename T>
                  25 struct is_swapable
                  26 {
                  27     static const bool value = std::is_integral<T>::value && sizeof(T) >= 2;
                  28 };
                  29 
                  30 template<typename T>
                  31 T byte_swap(T value, std::true_type)
                  32 {
                  33    uint8_t *bytes = reinterpret_cast<uint8_t *>(&value);
                  34    for (std::size_t i = 0; i < sizeof(T)/2; ++i)
                  35    {   
                  36        uint8_t v = bytes[i];
                  37        bytes[i] = bytes[sizeof(T) - 1 - i]; 
                  38        bytes[sizeof(T) -1 -i] = v;
                  39    }   
                  40    return value;
                  41 }
                  42 
                  43 template<typename T>
                  44 T byte_swap(T value, std::false_type)
                  45 {
                  46     return value;
                  47 }
                  48 
                  49 template<typename T>
                  50 T byte_swap(T value)
                  51 {
                  52     return byte_swap(value, std::integral_constant<bool, is_swapable<T>::value>());
                  53 }
                  54 
                  55 int main(int argc, const char *argv[])
                  56 {
                  57     int a = 0x11223344;
                  58     long b = 0x4455221112345678;
                  59     std::cout << std::hex << a << " " << b << std::endl;
                  60     std::cout << std::hex << byte_swap(a) << " " << byte_swap(b) << std::endl;
                  61     uint8_t c = 0x11;
                  62     char *d = "hello world";
                  63     std::cout << std::hex << byte_swap(c) << " " << byte_swap(d) << std::endl;
                  64     return 0;
                  65 }
                  66 

                  posted @ 2016-04-28 17:50 Hallelujah 閱讀(1338) | 評論 (0)編輯 收藏

                  CentOS 7安裝EPEL Repo

                  安裝額外的EPEL倉庫
                  wget https://dl.fedoraproject.org/pub/epel/7/x86_64/e/epel-release-7-2.noarch.rpm
                  yum install epel-release-7-2.noarch.rpm
                  安裝后就可以安裝R等了


                  posted @ 2014-10-22 07:56 Hallelujah 閱讀(2406) | 評論 (0)編輯 收藏

                  使用Python通過Hive的Streaming來寫UDF的一些記錄

                        最近使用Hive來統計數據,用了pyhs2來實現查詢,但是有些復雜的處理比如,自定義對域名的處理等,不能通過hql來實現,發現能夠使用udf。

                        Java來實現Hive的寫法 

                  package jsl.hive.udf;

                  import org.apache.hadoop.hive.ql.exec.UDF;
                  import org.apache.hadoop.io.Text;

                  public final class DomainRoot extends UDF {
                      public Text evaluate(Text s) {
                          if (s == null) {return null;}
                          String tmp = s.toString();
                          tmp = this.getDomainRoot(tmp);
                          return new Text(tmp);
                      }   

                      private String getDomainRoot(String domain) {
                          throw NoneImplementException("xxxx");
                      }   
                  }

                  如果Java的UDF需要當成常用的,不用每次add可以注冊到Hive中,
                  ql/src/java/org/apache/hadoop/hive/ql/exec/FunctionRegistry.java中加入
                  registerUDF("domain_root", UDFParseUrl.class, false);并重新編譯hive即可


                     下面來說說重點,通過Streaming用Python來寫處理。
                     關于Streaming的基礎內容:

                     約束:首先必須add file到hive中(當python中引用了其他如自己寫的模塊時,也需要一并add進去)
                              其次非常不幸,在單獨的一個查詢中,不能夠使用UDAF的函數如sum()
                              再次不得為中間結果數據使用cluster by或distribute by

                  注意:對于優化查詢,使用cluster by或distribute by 和sort by一起非常重要

                  posted @ 2014-09-12 11:41 Hallelujah 閱讀(2115) | 評論 (0)編輯 收藏

                  C++編譯期契約之must_have_base

                  在C++中不直接支持約束,用過C#模板的有個where來處理,但是C++中也有些小的技巧來處理。
                  在不完美C++中的must_have_base如下:

                  template<typename D, typename B>
                  struct must_have_base
                  {
                      ~must_have_base()
                      {
                          void (*p)(D*, B*) = constraints;
                      }

                  private:
                      static void constraints(D *pd, B *pb)
                      {
                          pb = pd;
                      }
                  };
                  原理是通過不執行的成員函數把函數指針在析構函數中賦值,強迫編譯器在編譯期間檢查成員函數內的約束。  

                  自己寫了個小的實例,雖然這兒有點點牽強,但是,很多情況也需要檢查是否是某種類型的子類型的時候還是可以的,
                  完整代碼如下:
                   1 
                   2 template<typename D, typename B>
                   3 struct must_have_base
                   4 {
                   5     ~must_have_base()
                   6     {
                   7         void (*p)(D*, B*) = constraints;
                   8     }
                   9 
                  10 private:
                  11     static void constraints(D *pd, B *pb)
                  12     {
                  13         pb = pd;
                  14     }
                  15 };
                  16 
                  17 class base
                  18 {
                  19 public:
                  20     virtual ~base() {}
                  21 
                  22     virtual void run() = 0;
                  23 };
                  24 
                  25 class inherit_base: public base
                  26 {
                  27 public:
                  28     virtual void run()
                  29     {
                  30 
                  31     }
                  32 };
                  33 
                  34 class inherit_not_base 
                  35 {
                  36 public:
                  37     virtual void run()
                  38     {
                  39 
                  40     }
                  41 };
                  42 
                  43 class test
                  44 {
                  45 public:
                  46     template<typename T>
                  47     void testfunc(T &t)
                  48     {
                  49         must_have_base<T, base>();
                  50 
                  51         t.run();
                  52     }
                  53 };
                  54 
                  55 int main()
                  56 {
                  57     test t_ok, t_nok;
                  58     inherit_base hb;
                  59     inherit_not_base hnb;
                  60     t_ok.testfunc(hb);
                  61     t_nok.testfunc(hnb);
                  62 
                  63     return 0;
                  64 }
                  拋磚引玉,希望這些東西都能用在實際的工程代碼中。

                  posted @ 2014-07-29 12:25 Hallelujah 閱讀(1517) | 評論 (0)編輯 收藏

                  Vagrant啟動自己CentOS的時候出現文件夾不能正常掛載

                  解決辦法:
                  $ vagrant plugin install vagrant-vbguest
                  $ vagrang reload


                  reload會重新編譯vbox的additions,然后mount就能成功了
                  我的環境是CentOS 6.5,在yum中開啟了kernel更新的,默認是exclude=kernel*

                  這是別人給的解決方案:
                  vagrant up; vagrant ssh -c 'sudo ln -s /opt/VBoxGuestAdditions-4.3.10/lib/VBoxGuestAdditions /usr/lib/VBoxGuestAdditions'; vagrant reload

                  posted @ 2014-06-05 11:16 Hallelujah 閱讀(1830) | 評論 (0)編輯 收藏

                  kivy的第一步------安裝,與IDEA共同開發

                  環境:Windows 7 64bits,IDE:IntelliJ IDEA 13.1.2
                  安裝kivy:1. 下載安裝包http://kivy.org/#download,我使用的是Python 2.7.6,選擇的2.7版本(注意此版本是32位Python)
                                2. 解壓到一個目錄,我在我的系統環境變量中將根目錄命名為了KIVY_ROOT
                                3. 雖然kivy中自帶了Python的,可以直接使用,也可以自己安裝,我是自己下載的Python 2.7.6(記得一定是32位,不然后面寫程序會出問題)
                                4. 如果機器以前沒安裝git的,可以直接使用KIVY中帶的mingw,我自己機器安裝了git,所以環境變量就沒設置mingw的
                                5. 設置環境變量,GST_REGISTRY=%KIVY_ROOT%gstreamer\registry.bin
                                                       GST_PLUGIN_PATH=%KIVY_ROOT%gstreamer\lib\gstreamer-1.0
                                    PATH變量中加入了%KIVY_ROOT%;%KIVY_ROOT%tools;%KIVY_ROOT%gstreamer\bin;(還有Python的mingw的)
                                    最后,需要在PYTHONPATH中加入%KIVY_ROOT%kivy
                  最后寫入第一個程序來測試:
                  代碼如下
                   1 
                   2 # -*- coding:utf-8 -*-
                   3 #/user/bin/env python
                   4 
                   5 __author__ = 'shih'
                   6 
                   7 from kivy.app import App
                   8 
                   9 class Hello(App):
                  10     pass
                  11 
                  12 if __name__ == "__main__":
                  13     Hello().run()
                  執行結果如下:


                  posted @ 2014-05-18 20:35 Hallelujah 閱讀(1298) | 評論 (0)編輯 收藏

                  Python特殊方法的操作符重載表

                  不知道里面怎么弄表格,就上傳圖片了

                  如果用戶自定義的類,想有add功能,如果類沒提供__add__或__radd__方法的話,會拋出異常
                  再如,if xxxobj:默認是如果xxxobj不是None則為True,否則為False,如果不是這個邏輯則可以通過實現__bool__方法(自己的測試中2.7需要再加上__nonzero__()方法,3.2中直接就行)

                  posted @ 2014-04-14 11:38 Hallelujah 閱讀(329) | 評論 (1)編輯 收藏

                  zeromq學習,第一章

                  Asynchronous Input/Output(AIO):AIO可以在input/output的請求到來之前繼續執行。AIO在實時應用程序中是必須的。使用AIO可以映射多個任務到一個線程上去。
                  首先zeromq的設計是弱中間人的(brokerless,相對于ActiveMQ、RabbitMQ等,使用0zq的程序就可以直接和其他的節點通信而不通過broker的代理。),zeromq不會存儲信息到磁盤上,然而可能使用本地的交換文件來存儲消息(當設置了zmq.SWAP時)。

                  示例:HelloWorld(server)

                  server

                  示例:Helloworld(client)

                  client

                  這里使用了最基本的請求應答架構。詳細解析代碼:
                  第一步:創建了context和socket,zmq_ctx_new方法創建了一個新的context,這是線程安全的,即一個context可用于多個線程操作。 zmq_socket方法創建了一個在context中定義的socket,ZeroMQ的socket不是線程安全。傳統的socket是同步的,然而ZMQ的socket在客戶端和服務端都維護了一個隊列來管理request-reply的異步模式。ZMQ自動的處理連接、重連、斷開連接和內容交付。
                  服務端創建了Reply(ZMQ_REP)用來處理接收消息并應答消息。如果客戶端和服務端遺失(lost),應答的消息將在沒有任何通知的情況下丟掉。
                  客戶端創建了一個Request(ZMQ_REQ)來發送消息并接收來自服務的應答。ZMQ_REQ下不會丟棄任何信息,不管是沒有沒有可用與發送消息的服務或是服務處于忙狀態,所有的發送操作zmq_send函數會阻塞,直到一個服務變為可用于發送消息。ZMQ_REQ和ZMQ_REP、ZMQ_ROUTER類型兼容。
                  消息的發送zmq_send函數的第三個參數是flags,是ZMQ_DONTWAIT或ZMQ_SNDMORE。ZMQ_DONTWAIT表明消息是異步的發送。ZMQ_SNDMORE表明消息有多部分,其余的部分已經“在路上了”。消息接收函數zmq_msg_recv函數,如服務端,在先前接收的消息是無效的。第三個參數flugs可能是ZMQ_DONTWAIT。

                  先睡覺了

                  posted @ 2014-03-16 23:41 Hallelujah 閱讀(3699) | 評論 (2)編輯 收藏

                  Python的參數解包小技巧(使用容器作為參數時)

                   1 def args_unpacking_test(x, y):
                   2     print 'x = ', x, ' y = ', y
                   3 
                   4 A = namedtuple('A''y x')
                   5 
                   6 list_foo = [3, 4]
                   7 tuple_foo = (3, 4)
                   8 ntuple_foo = A(4, 3)
                   9 dict_foo = {'y':4, 'x':3}
                  10 
                  11 
                  12 args_unpacking_test(*list_foo)
                  13 args_unpacking_test(*tuple_foo)
                  14 args_unpacking_test(*ntuple_foo)
                  15 args_unpacking_test(**dict_foo)
                  16 
                  17 他們的結果輸出都是一樣的

                  這個方式處理非常有用,如果參數個數不一致的話會報錯

                  posted @ 2013-12-31 11:07 Hallelujah 閱讀(1168) | 評論 (0)編輯 收藏

                  Oracle的編程準備工作:搭建本地的基本環境

                  首先下載Instant Client,我下載的11.2

                  下載的文件包括如下列表:
                  1. instantclient-basic-nt-11.2.0.3.0.zip
                  2. instantclient-odbc-nt-11.2.0.3.0.zip
                  3. instantclient-sdk-nt-11.2.0.3.0.zip
                  4. instantclient-sqlplus-nt-11.2.0.3.0.zip
                  5. instantclient-tools-nt-11.2.0.3.0.zip
                  最后兩個隨便了,解壓文件到instantclient_11_2目錄中

                  命令行下到解壓的目錄instantclient_11_2中執行>odbc_install

                  在環境變量中的系統變量PATH中加入instantclient_11_2目錄的全路徑

                  創建一個用戶變量ORACLE_HOME,指向ic的安裝目錄,這點很關鍵,特別是用cmake編譯soci,并需要支持Oracle的話。

                  在ic目錄中創建network/admin目錄,并加入OCI的.ora文件,在環境變量中加入TNS_ADMIN來指定剛才創建的目錄

                  創建一個用戶變量NLS_LANG來設置語言,我的設置是SIMPLIFIED CHINESE_CHINA.ZHS16GBK,這個要和數據庫那邊一致?

                  創建一個用戶變量SQLPATH來指定sqlpath工具的文件路徑,下載的第四個文件

                  OK,所有安裝就此。

                  再安裝Oracle的訪問工具,我使用的是Navicat for Oracle工具
                  1. 普通安裝
                  2. 破解、注解
                  3. 非常重要:在軟件的option中OCI選項中將OCI library(oci.dll)的路徑指向安裝的instant clent的oci.dll上
                  4. SQL*PLUS以相同方式處理,不過不用這個的話初步處理無所謂了。

                  好了,可以嘗試你的第一次Oracle連接之旅了(是我的……)

                  posted @ 2013-12-17 20:16 Hallelujah 閱讀(1225) | 評論 (0)編輯 收藏

                  僅列出標題
                  共2頁: 1 2 
                  <2025年6月>
                  25262728293031
                  1234567
                  891011121314
                  15161718192021
                  22232425262728
                  293012345

                  導航

                  統計

                  常用鏈接

                  留言簿(1)

                  隨筆分類(15)

                  隨筆檔案(14)

                  最新隨筆

                  搜索

                  最新隨筆

                  最新評論

                  閱讀排行榜

                  評論排行榜

                  国产精品久久久久天天影视| 97r久久精品国产99国产精| 青青青青久久精品国产h久久精品五福影院1421 | 丁香久久婷婷国产午夜视频| 99久久夜色精品国产网站| 久久精品无码av| 精品久久久噜噜噜久久久 | 777米奇久久最新地址| 久久综合九色综合久99| 亚洲综合久久久| 品成人欧美大片久久国产欧美| 国产精品成人久久久| 亚洲精品国产成人99久久| 亚洲国产精品成人久久| 久久久久亚洲?V成人无码| 日产精品99久久久久久| 亚洲国产成人久久一区WWW| 久久精品aⅴ无码中文字字幕重口| 久久精品国产72国产精福利| 国内精品久久久久影院日本| 国产精品久久久久a影院| 午夜精品久久久内射近拍高清 | 国产L精品国产亚洲区久久| 亚洲精品无码久久久久去q| 久久中文字幕视频、最近更新| 成人综合伊人五月婷久久| 亚洲精品乱码久久久久66| 97香蕉久久夜色精品国产| 久久免费国产精品| 四虎影视久久久免费观看| 精品欧美一区二区三区久久久 | 久久久久久久久久久精品尤物| 国产免费久久精品99久久| 久久亚洲国产午夜精品理论片| 久久人爽人人爽人人片AV| 久久亚洲欧美国产精品| 久久丫精品国产亚洲av不卡| 久久久无码精品亚洲日韩按摩 | 99久久99久久| 日本免费一区二区久久人人澡 | 久久男人AV资源网站|