2015年11月30日 星期一

Engoo使用評價

engoo是日本DMM旗下的英文學習網站。我在他做大促銷半價優惠的時候,買過每天三堂課一個月,後來才知道DMM都是這樣的價格,但engoo是兩倍在賣,但師資並沒有好到兩倍,要是日本的價格,還可以繼續上課,可是台灣兩倍在賣,就覺得不想繼續。

不過DMM做什麼起家的,我想我應該不用多作解釋了,反正DMM的英文學習,不算是非常專業,但是作為陪練的英文課程是夠的。

雖然師資繁多,但是良莠不齊,教材算是豐富、很多種類,可惜較為簡單,native speaker真的很少,跟著茫茫大海的師資相比,那個比例絕對很低的,而且要是算上那些native speaker開出來的時數就更少了,一天可能就幾個時段,但是菲律賓老師可能可以從早開到晚,選擇這家不要有太大的期待遇到native speaker,畢竟學費沒有跟我們收很多,當然,菲律賓老師中也有認真的好老師,就是要跟著其他學員搶老師時間,不然,沒什麼人選的,多半也就普通,甚至以下。

買一個月休息一段時間再繼續還可以,一直持續感覺非常難,因為他的模式必須天天上課,他的好處就是最短可以只買一個月,跟其他那些線上英語,要你一次買很久,有公司倒掉的風險(tutorwell...真的讓我太怒了),跟自己能不能持續上課的風險

半價的時候是非常值得購買的,畢竟這個時代,優惠促銷什麼的都是一直存在,就是哪個時間點而已,等他半價再買就好,這是我第二次買他的半價一個月三堂課了.

如果有急著要立刻加強英語程度,這個也不是很適合的方式,不夠系統化,慢慢培養下口語能力是可以的,除非本身底子夠好,缺乏的是大量練習,這個真的是很好的陪練,反正就一個有受過訓練的外國人陪你講話,糾正你的錯誤要看老師的教學能力,很不一定.教的話,真的老師差異太大了,有一個老師一個單字快跟我解釋了十分鐘(我們一堂課才25分鐘...)後來還是我自己查字典,其實有些東西是專有名詞不好解釋,叫學生查字典比較快,也沒有對不對,纖維素這個單字,你解釋老半天,我當然聽不懂,你不夠懂這個化合物,我也只是大概了解,今天用中文解釋也不簡單,就叫我查一下字典就好嘛!這種就是老師的教學經驗跟能力,也有老師就直接幫我查中文翻譯...我覺得滿猛的,我是說這種很難解釋的專有名詞或概念,一般的單字還是講英英說明,這才是學英文;發音的話,我聽起來東歐老師還是有口音(我有跟歐洲那邊的人接觸,聽過他們講英文,所以還感覺的出來),但一般人很難分出來,就跟亞洲人聽不太出來講法語跟講德語的人,在講英文時的口音一樣,畢竟他們是比較接近的語系(日爾曼語系跟拉丁語系),語系差異很大的我們比較難以聽出來,我倒是覺得口音影響還好,我們從小到大學中文時,還不是一堆老師講著台灣國語,但是我們的中文還是學的好好的,當然,中文是母語,這個比喻不夠貼切;換個講法,從小到大學英文,老師都台灣人,難道就沒有口音?發音還是跟著字典學比較好,只要老師知道我的發音錯了就好,口音的糾正,不是那麼期待,至於對方有口音,我覺得影響不大,畢竟對方有什麼口音,自己就會學到什麼口音,這種話,講得好像找個老美老師,就能學的很標準一樣.我在語言學校的經驗,修行在個人吧!所以老師大多數講的標準,少部分不太標準,就可以了,不是老師那少部分的不標準,自己就只會學到不標準的地方

如果想要學的好,要跟著好老師學,但是engoo的方式,好老師要用搶的,不一定天天搶的到,但一週搶到一次是有機會的,再來是教材,找對自己程度且可以幫助學習的教材,就...教材要自己好好挑,畢竟價格便宜,服務少一點還是可以接受的,不然就讓老師幫你挑,但是很浪費時間(你只有25分鐘阿!)就是,我後來都自己挑

時間這個沒辦法,他的模式就是25分鐘,想要連續50分鐘,還要看搶不搶的到連續兩堂課,零碎的上課時間好處是抽一下空就可以上課,壞處就是這樣學習效果其實很有限,練習口語是很好的(這個前提就是,最好有一定的英文程度),拿來學習英文就不是一個很好的方式(還是自己多背背單字,將文法學好,多看文章比較實在)

這種模式最適合口說練習,也就是英文的輸出,但是拿來單純當作學習(輸入)效果會很有限,我覺得這不單單是25分鐘的模式,整體而言,我試過了很多個線上教學,都感覺學習的效果不是很好(單字量,閱讀,文法,寫作更是完全沒有辦法練習到),反而是練習口說效果最好(聽力跟口說)因為TutorABC我上的是無限堂,再加上我自己是課不多的學生,我就整天泡在TutorABC上課,這樣的話,線上教學可以累積英文能力,但我覺得不是很適合,無論是費用還是時間的投資上來說

網路問題...這個是一個很悲劇的問題,其他線上口說課程,也會有,而且其他小班制的話,人多也會偶爾發生,但是engoo老師是用skype且開視訊,所以更常發生網路不穩,這時候,我會請他們關掉視訊,不然很悲劇,初學者想看嘴型就算了吧!網路問題存在的,還好我不是初學者,不過天氣正常時(沒什麼颱風下雨阿!)我覺得網路品質還可以,至少有七成網路是穩定的,三成...看在價格的面子上...總不能太計較

有個要抱怨的,網站很容易連不上教材,不過可以正常登入網站,原本要用daily news上課,趕緊找一篇time或bbc給老師,連不上的時間點主要就是上課的高峰期...不過慶幸網站可以成功登入,看在價格的面子上,我也覺得可以接受,畢竟網路上很多教材,基本功能可以維持運轉

來下結論
  • 初學者不建議,我以前在國外語言學校的時候(不是英文的語言學校),確實是什麼都不懂,然後該國的老師來教書,沒用中文英文講解,還是可以學的好,有一個重要的前提:我一天上四個小時的課(週一到週五),我又生活在那個環境,所以大量練習,從生活經驗中習得,自然可以用外語學外語,但是一個不是很懂英文的學生,要用英語學英語,而且一天可能只上課25分鐘,建議你換個方法吧
  • 有時間可以一直掛網來搶課的學生很適合,老師開課的時間是看那位老師開放出來時段,不是每天晚上一更新就有了,畢竟時間配合是看老師,而且搶課你懂得,就是比誰在電腦前面更有恆心跟毅力
  • 忙到不行的上班族不建議,建議找師資比較穩定的,不然就會像我之前一直選到不適合我的老師,時間不充裕的話,能選的老師太有限了,而且你也不適合去面對老師突然臨時請假,要換時間囉~或者連線問題...等各種阿里阿砸的問題,雖然不可否認,他們客服會很有誠意的送上一張補課票,但你是要學英文的話,能保持持續學習是最好的,雖然就補課票觀點來看是,自己的投資(金錢)不至於損失,就是沒有最有效率運用,如果工作比較輕鬆的話,我覺得就可以考慮
  • 建議使用方式是當作口語陪練,而不是英語學習,無論英文程度如何


另外附上兩個新聞,算是這家機構對師資控管不良造成的嚴重結果

【更新】竹科OL視訊學英文 外籍師31秒處竟噴了
http://www.appledaily.com.tw/realtimenews/article/new/20151102/723956/

線上學英文 菲律賓籍狼師竟做猥褻動作
http://news.tvbs.com.tw/local/news-624173/

補充:talxfun 類似價位的菲律賓線上會話可以參考
https://www.talxfun.com/
價位也很划算,不過我還沒有報名跟試聽,不予評價

2015年11月4日 星期三

cvcam.h 找不到

如果下載網路上的範例程式,應該有機會遇到這個問題

雖然我覺得很神奇的是一堆人問這個問題

cvcam.h 找不到

我從網路上找到了這個的原始檔案

自己在專案裡面新增囉

總之,不囉嗦先放上來


cvcam.h

/*M///////////////////////////////////////////////////////////////////////////////////////
//
//  IMPORTANT: READ BEFORE DOWNLOADING, COPYING, INSTALLING OR USING.
//
//  By downloading, copying, installing or using the software you agree to this license.
//  If you do not agree to this license, do not download, install,
//  copy or use the software.
//
//
//                        Intel License Agreement
//                For Open Source Computer Vision Library
//
// Copyright (C) 2000, Intel Corporation, all rights reserved.
// Third party copyrights are property of their respective owners.
//
// Redistribution and use in source and binary forms, with or without modification,
// are permitted provided that the following conditions are met:
//
//   * Redistribution's of source code must retain the above copyright notice,
//     this list of conditions and the following disclaimer.
//
//   * Redistribution's in binary form must reproduce the above copyright notice,
//     this list of conditions and the following disclaimer in the documentation
//     and/or other materials provided with the distribution.
//
//   * The name of Intel Corporation may not be used to endorse or promote products
//     derived from this software without specific prior written permission.
//
// This software is provided by the copyright holders and contributors "as is" and
// any express or implied warranties, including, but not limited to, the implied
// warranties of merchantability and fitness for a particular purpose are disclaimed.
// In no event shall the Intel Corporation or contributors be liable for any direct,
// indirect, incidental, special, exemplary, or consequential damages
// (including, but not limited to, procurement of substitute goods or services;
// loss of use, data, or profits; or business interruption) however caused
// and on any theory of liability, whether in contract, strict liability,
// or tort (including negligence or otherwise) arising in any way out of
// the use of this software, even if advised of the possibility of such damage.
//
//M*/

#ifndef __CVCAM_H__
#define __CVCAM_H__

#if defined(_CH_)
#pragma package <opencv>
#include <chdl.h>
LOAD_CHDL_CODE(cvcam,Cvcam)
#endif

#ifdef __cplusplus
#define CVCAM_EXTERN_C extern "C" 
extern "C" {
#else
#define CVCAM_EXTERN_C
#endif /* __cplusplus */


#ifdef CVCAM_EXPORTS
#define CVCAM_API CVCAM_EXTERN_C __declspec(dllexport)
#else
#define CVCAM_API CVCAM_EXTERN_C
#endif /* CVCAM_DLLEXPORT */

/* Returns the actual number of currently available cameras */
CVCAM_API int cvcamGetCamerasCount(void);

/* get/set the property of the camera. returns 0 if the property is not supported */
CVCAM_API int cvcamGetProperty(int camera, const char* property, void* value);
CVCAM_API int cvcamSetProperty(int camera, const char* property, void* value);

/* gets all property names. the actual number of properties is returned. */
CVCAM_API int cvcamGetPropertiesList(int camera, const char** properties, int count);

CVCAM_API int cvcamBuildStereo(void); 

/* Prepares the currently enabled cameras for work */
CVCAM_API int cvcamInit(void);

/* Start the video */
CVCAM_API int cvcamStart(void);

/* Stop the video */
CVCAM_API int cvcamStop(void);

/* Pause the video; should be used for preventing data changes during frame reading 
    using "frame" and other properties */
CVCAM_API int cvcamPause(void);

/* Resume the video */
CVCAM_API int cvcamResume(void);

/* Frees all resources */
CVCAM_API int cvcamExit(void);

/*Pops up a camera(s) selection dialog
Return value - number of cameras selected (0,1 or 2);
Argument: an array of selected cameras numbers
NULL if none selected. Should be released with free() when not needed.
if NULL passed, not used.
*/
CVCAM_API int cvcamSelectCamera(int** out);

/*Plays a specified avi file into a specified window
if file is NULL, file browser is opened. if window is 0,
it is created. width and height mean output size's 0 means
those of avi file are used. __cdecl (*callback)(IplImage*) would be
called on every frame. NULL means no callback*/
CVCAM_API int cvcamPlayAVI(const char* file, 
                           void* window, 
                           int width, 
                           int height,
                           void* callback); 


/*Advanced API for dealing with AVI files*/

typedef unsigned int cvcamAVIFILE;


/*Opens a given file or pops up a dialog if file is NULL
returns a handle to the file opened for success or -1 for failure*/
CVCAM_API cvcamAVIFILE cvcamAVIOpenFile(char* file);

/*The next functions just do what they say and return 0
for success, anything other for failure*/

CVCAM_API int cvcamAVICloseFile(cvcamAVIFILE file);

CVCAM_API int cvcamAVISetWindow(cvcamAVIFILE file, void* window);

CVCAM_API int cvcamAVISetCallback(cvcamAVIFILE file, void* callback);

CVCAM_API int cvcamAVISetSize(cvcamAVIFILE file, int width, int height);

CVCAM_API int cvcamAVIRun(cvcamAVIFILE file);

CVCAM_API int cvcamAVIStop(cvcamAVIFILE file);

CVCAM_API int cvcamAVIPause(cvcamAVIFILE file);

CVCAM_API int cvcamAVIResume(cvcamAVIFILE file);

CVCAM_API int cvcamAVIWaitCompletion(cvcamAVIFILE file);

CVCAM_API int cvcamAVIIsRunning(cvcamAVIFILE file);

static const char CVCAM_PROP_ENABLE[] = "enable";
static const char CVCAM_PROP_RENDER[] = "render";
static const char CVCAM_PROP_WINDOW[] = "window";
static const char CVCAM_PROP_CALLBACK[] = "callback";
static const char CVCAM_DESCRIPTION[] = "description";
static const char CVCAM_VIDEOFORMAT[] = "video_pp";
static const char CVCAM_CAMERAPROPS[] = "camera_pp";
static const char CVCAM_RNDWIDTH[] = "rendering_width";
static const char CVCAM_RNDHEIGHT[] = "rendering_height";
static const char CVCAM_STEREO_CALLBACK[] = "stereo_callback";
static const char CVCAM_PROP_SETFORMAT[] = "set_video_format";
static const char CVCAM_PROP_RAW[] = "raw_image";
static const char CVCAM_PROP_TIME_FORMAT[] = "time_format";
static const char CVCAM_PROP_DURATION[] = "duration";
static const char CVCAM_PROP_POSITION[] = "current_position";

extern const int FRAMES_FORMAT ;
extern const int TIME_FORMAT ;

typedef struct
{
    char DeviceDescription[100];
    char device[100];
    int  channel;
    char ChannelDescription[100];
    int  maxwidth;
    int  maxheight;
    int  minwidth;
    int  minheight;
}CameraDescription;



#define CVCAMTRUE  (void*)1
#define CVCAMFALSE (void*)0

typedef int cvcamWindow;


#ifdef __cplusplus
}
#endif /* __cplusplus */

#endif //__CVCAM_H__

ADGuard