Sunday, May 8, 2016

[筆記] libpqxx - prepare statements

prepare語法是現今SQL主要防止SQL injection的方法(另一種是字串處理),prepare語法主要是限定SQL query語句中的變數,以防資料庫其他資料遭受破壞等。postgresSQL也有prepare語法。請見:http://www.postgresql.org/docs/9.1/static/sql-prepare.html

而libpqxx中也有prepare method。這個prepare框架一旦被定義後,它會存活於connetion物件存活期間(連線期間)。底下是範例,其中prepare_name爲使用者自定(case sensitive),之後會用到。

再來是傳遞變數進入prepare的框架。

其中傳變數方法還有其他寫法,請見:http://stackoverflow.com/questions/31833322/how-to-prepare-statements-and-bind-parameters-in-postgresql-for-c

prepare方法有時會降低效率,其他細節都在官方paper中。

Sunday, May 1, 2016

Maker常用開發板

對於Maker來說,選擇適合的開發板可以加速make的時間。本文會依照難度特色來做分類。


入門款
    Ardunio系列:
  • 基本款(Entry level):Ardunio UNO,Ardunio 101,Ardunio PRO
>>> 特色:pin腳少(少於20隻),PWM port少(不多於6隻),Analog輸入腳位少(少於6)。
>>> 適合入門玩家學習操作I/O(DigitalWrtie),PWM(AnalogWrite),ADC(analogRead)。適合小專案與空間較小之專案。

  • 進階板(Enhanced feature):Ardunio MEGA,Ardunio ZERO,Ardunio DUE
>>> Ardunio MEGA腳位很多,PWM腳多達15隻,對於需要大量馬達或servo的專案來說十分適合,而且其UART多達四組,還有一組SPI和一組I2C可方便擴充。
>>> Ardunio ZERO是小型低電壓板Ardunio。
>>> Ardunio DUE 是ARM-based的Ardunio,腳位很多,同時還有兩個DAC,和USB-OTG,為MEGA板所沒有的。
  • IOT板:Ardunio YUN
>>>Ardunio YUN是一塊同時擁有MCU(Ardunio)和SOC(OS為linux)的開發板,基本連網功能透過linux部份,其餘操作在Ardunio部份上,可支援wifi(IEEE 802.11b/g/n)和ethernet(IEEE 802.11b/g/n),想當然爾,當然是一塊面向物連網的開發板。


  • 其他module
很多,去找吧,我把他們全都放在那了。對於入門者來說,最重要的是有library和API支援,不然自己看datasheet來刻是很困難的。
  • 其他類Ardunio開發板
這裏指得是支援Ardunio語法(library)的開發板,常見的如Picdunio,linkit Smart 7688和linkit 7688 DUO系列等。

進階款
     Raspberry Pi
  • Pi 1,Pi 2 Pi3 , Pi zero:
基本上都是使用Broadcom的單板電腦,都是ARM以處理器為核心,當然ARM系列的優點都有(如省電),支援USB、ethernet、RCA、I2S、SD卡、相機模組。

作業系統有Raspbian(Debian系,論壇資源最多,問題易找到解答)、Arch Linux Arm(Arch linux十分輕量,而且十分先進,其套件管理佳,但難度叫高)、OpenELEC、Pidora(Fedora)等。

使用上需要有linux基礎,而其GPIO操作方式有python與C/C++的方法,其中python較簡單,而C/C++法需要閱讀datasheet才有辦法。

作業系統的優點就是易於擴充,與排程容易,缺點就是操作IO速度容易慢於MCU(但還是有辦法加速的,望向kernel)。

      Banana PI
台灣自行製作,採用中國全志公司的Allwinner A20(ARM Cortex-A7),基本可視為有SATA的Raspberry PI,該有的都有,支援OpenCL。
        Intel 開發板
主要有Intel Galileo和Intel Edison,基於X86,支援Windows,Mac OS X,Linux,為支援度最廣的,功能強大,有網路和USB支援,效能極高,對於運算較大之程式較能負擔(當然不能和PC和Server比啦),板主有看過運用其做Machine Learning和雲端運算操作。

      其他公司開發板推出之開發板
大多數系統廠如技嘉等公司都有推出開發板供顧客使用,這些開發板官方資源通常充足,但缺乏論壇,開發上遇到問題較麻煩。

      MCU(單晶片)
單晶片放在開發板區其實不好,因為你需要自己做開發板,但使用MCU可使你的開發彈性更高。其實Ardunio就是一種由單晶片衍生出的開發板,若要達到更好的程式效率與操作,可透過直接對MCU的暫存器進行操作,程式碼簡潔,但需要閱讀datasheet,所以Ardunio官方提供了一些方法來加速操作,如bitset()和bit()函式之方法。

常見的MCU廠商有:
  • PIC系列的Microchip公司,產品線從8bit到32bit都有,還有dsp和一些模組晶片可使用,其toolchain有免費板且跨平台的(MPLAB X IDE , XC8 ,XC16 ,XC32)。
  • AVR系列的Atmel公司(已被Microchip購併),Ardunio就是使用AVR系列的晶片。也是有免費的free toolchain,同樣也是跨平台。
  • 8051系列:經典的MCU系列由Intel開發,同時由於IP過期,使得現今有許多公司生產,如Microchip、Atmel、STC等。
  • 德州儀器:Msp430系列等。
  • freescale(NXP):Arm Cortex_M系列。
  • 還有很多.....
MCU的產品線多元容易找到適合的晶片。

       SOC(system on chip)

同樣很多產品線,有MIPS架構的,有ARM-A架構的,有X86的,這部份的難度最高,通常要有很多作業系統基礎。


參考資料




libpqxx - postgresql c++ library 基本教學


  • 簡介

libpqxx是postgrsql 官方所推出的函式庫,基本上包裝得很好,用起來十分簡便。
libpqxx官網:http://pqxx.org/


  • linux上安裝方式
請先安裝postgresql,方便起見可安裝php,phppgadmin和apache以利測試。
link:https://wiki.archlinux.org/index.php/PostgreSQL
libray link:http://pqxx.org/download/software/libpqxx/

arch linux上安裝方式,libpqxx為Extra package。<br /> link:https://www.archlinux.org/packages/extra/i686/libpqxx/
安裝完成後,於postgresql安裝目錄下。
於pg_hba.conf新增
啟動與停止postgresql,基本上使用systemd的linux distro都可用以下方式來處理

  • 基本用法
libpqxx通常需要透過pqxx::connection來建立連線,接著以transaction物件pqxx::work執行sql操作。以下為基本範例

這個範例使用了三種parse資料的方法,分別是使用pqxx::tuple的方式、使用內建iterator的方式與使用類似C++ STL map的key-value方式。
編譯方式:
參考資料:http://www.yiibai.com/html/postgresql/2013/080894.html

精選文章

使用Ardunio Atmega2560 連接 nRF24L01+

使用Ardunio Atmega2560 連接 nRF24L01+ 關於library 目前主流有 https://github.com/maniacbug/RF24 與 https://github.com/TMRh20/RF24 這兩個。 其中TMRh20大大做...