Weil Jimmer's BlogWeil Jimmer's Blog


Category:Software

Found 8 records. Now is Page 1 / 2.

為什麼 Telegram 在台灣這麼少人用
No Comments

Published:
Updated:2017-05-17 23:49:09

簡介

首先,我想先就 Telegram 是什麼樣性質的一個通訊軟體做個簡單的介紹,第一,它是為了讓用戶擁有秘密通訊的權利而誕生的軟體,本身就不是以營利為目標的,永遠也不會看到 Telegram 哪天發出聲明說開始要收費,或是限制上傳雲端的檔案數量,不會,相比之下,有太多通訊軟體本身就是以營利為目的,為了賺錢,而不是有這種"奉獻"自我、服務大眾的感覺。正因如此,這也是我很喜歡 Telegram 的原因之一,當然還有更多優點我沒有提到。

在台灣用戶數過少 (主要因素)

這種先入為主的概念,一直在很多人身上發生,第一次用了好用的東西,就有很大的機會一直用下去,要突然迫使用戶改用別的東西,是有相當程度的困難,我自己算是例外,我個人是不隨波逐流,在我眼中好就是好,壞就是壞,要用就要用最好的。Telegram 用戶數算很少嗎?相較其他通訊軟體,總得來說,是少的,但是數量也是滿驚人的,

根據 Telegram 官方統計,去年總活躍用戶數已達:100,000,000 人,但反觀在台灣的用戶數,真的是少之又少,可說是被 Line 攻略後,就難以再讓其他通訊軟體取代了吧。

如果裝了 Telegram,身邊卻沒有人使用,想必也沒有人想裝,大多數人是不會去推薦他人,甚至是要求身邊的人都裝自己裝的軟體。而我自己又剛好是特例,如果別人不用 Telegram 就找不到我了,無法傳送訊息或資料給我,我甚至會向周圍的人推薦。(前提是真的好用我才會推薦。)

官方語言是英文 (次要因素)

Telegram 不論是在推特,還是官方網站,官方的所有App,預設都是英文,並沒有繁體中文,這是缺點,但並非無法補足的缺點,有很多社群人士有推出一系列的繁體中文化教學,甚至包刮教人怎麼使用以及了解這套軟體的優缺點。

即便如此,大多數人看到英文還是避之唯恐不及,不想看到英文,或著說看不懂英文,裝完大概就打算砍了。(鄙人真是覺得可惜啊!這些英文單字應該不會難到看不懂的地步。)

其他個人因素

有不少卸載這套軟體的用戶是認為這軟體很不方便(好歸好,沒有人用才是真的),也有人本身就是 Line 的粉絲,認為有 Line 就夠了,何必再裝一套軟體,還有些人認為再多裝軟體會耗費自己的空間容量,會讓手機/電腦變卡。至於為何有人這麼想,我就不多做自己的見解了,給讀者們思考看看,那些人心裡想什麼。

以上,這三點是我認為在台灣很難普及的原因,要看每個人願不願意嘗試新的事物,願不願意打破傳統跳出框架,嘗試看看使用其他通訊軟體的生活,以及不排斥英文的介面。

By Weil Jimmer


This entry was posted in General, Software, Experience By Weil Jimmer.

Flickr Downloader 批量下載器
1 Comments

Published:
Updated:2017-09-29 11:08:15

本程式可以批量下載 Flickr 網站上的圖片,主要功能為:

  • 一、批量下載多個相簿內的所有照片。
  • 二、批量下載多張相片。
  • 三、批量下載多位藝術家的全部相簿裡的圖片。
  • 四、由多位藝術家的相簿中人工挑選相簿並下載相簿內全部相片。
  • 五、由多位藝術家的相簿中人工挑選相片並下載。
  • 六、批量下載多個群組的所有相片。
  • 七、批量下載多個藝術家的所有最愛的相片。
  • 八、批量下載多個藝術家的所有上傳的相片。
  • 九、可以選擇下載的照片大小,以及登入授權帳號就可以透過程式下載私密群組(您已加入)的照片,或是下載您設為私密的相片。
  • 十、搜尋相片並人工挑選方式批量下載。

本程式可選擇「自動命名&創建資料夾做分類」、亦可下載照片全部集中在同個資料夾,以及針對每張照片以原標題命名或以數字化命名或相片ID,下載時不會因為名稱重複而覆蓋掉。

另外,本程式可以儲存下載進度,預防下載不完可以改天繼續下載,以及可以自訂背景顏色、文字顏色、按鈕顏色、音效、線程數,自訂是否縮小化退出程式。

下載地址【一】:https://url.weils.net/n
下載地址【二】:https://url.weils.net/r
歷史版本:https://my.pcloud.com/publink/show?code=kZwY2NZ5wWIfrfX3DQXWBx8DTN3GfTt90Y7#folder=593287902
產品連結:http://web.wbftw.org/product/flickrdownloader
兼容作業系統:Win XP / Win 7 / Win 8 / Win8.1 / Win 10 (64bit or 32bit) 需安裝 .Net Framework 4.0 以上的版本以執行程式。

最新版本:1.1.9.4

本程式安全無毒!檢查報告

2017.09.24 - 1.1.9.4 - 加入小更新/修復Bug - 修復相簿相關功能無法下載,新增群組ID解析,可以只透過群組ID下載照片,以及細微小更新。
2017.08.24 - 1.1.9.3 - 加入小更新 - 更新挑選介面,挑選相片/相簿介面清單加入擁有者和擁有者ID。現在本程式已可以透過純使用者ID下載照片。以及細微更新。
2017.08.12 - 1.1.9.2 - 更新內容/修復Bug - 修復人工挑選相簿內相片之檔案名稱問題,新增搜尋功能,優化相片列表顯示速度,修復多個細微錯誤。
2017.08.08 - 1.1.8.5 - 加入小更新/修復Bug - 修復細微資訊非同步以及程式無回應的問題,加入顯示更新內容。
2017.08.05 - 1.1.8.4 - 加入小更新 - 向下兼容32位元之舊版作業系統以及細微更新。
2017.07.26 - 1.1.8.3 - 加入小更新/修復Bug - 針對剪貼簿偵測Flickr網址使用更精確的網址判斷,加入類別錯誤的判別檢查,提示使用者Flickr網址與類別沒對上(僅針對相簿、相片、群組網址有用)。
2017.07.15 - 1.1.8.2 - 修復Bug - 主要針對網路速度顯示問題作修正。
2017.07.08 - 1.1.8.1 - 更新內容/修復Bug - 新增多個存檔檔名的選項,新增自動更新程式。修復少數幾個潛在錯誤。
2017.07.01 - 1.1.7.5 - 更新內容/修復Bug - 新增「下載單或多個藝術家的所有已上傳相片」,同時新增一項改進,跳過顯示網址列表的過程以加快下載速度,修復多個潛在錯誤。

===省略部分更新日誌,請前往產品網站檢視。==


This entry was posted in C#, General, Software, Free, Product, Tools By Weil Jimmer.

淺談Telegram開發機器人
No Comments

Published:
Updated:2017-08-19 16:48:44

我做了一個很簡單的計時器,為了某群組裡面的高中生而設計,這也是我首次製作 tg 的機器人。我才做兩個而已,所以有些功能我真的不知道的我也沒辦法為您解答。

以下是講我的經歷:

首先必須先註冊個telegram帳號(廢話),然後搜索聯繫人@BotFather 這很重要,加入這個機器人之後,首先輸入:/newbot ,然後再輸入你想要取的名子(可以是中文),接著系統會提示你再輸入用戶名稱,結尾必須是 bot ,而且僅英文數字以及下畫線,接著你的機器人就創立了,BotFather會告訴你,你的Token,這很重要,因為等下傳送或是接收訊息都要用到這組文字。

開始就是程式設計的部分,我個人是比較熟PHP,所以用PHP開發。而且還是改寫自官方的腳本。但我現在已經明白原理了。

<?php

define('BOT_TOKEN', 'BotFather給你的Token');
define('API_URL', 'https://api.telegram.org/bot'.BOT_TOKEN.'/');

//這些AppFunction和處理資料有關係,我是覺得直接Copy就好了。
function apiRequestWebhook($method, $parameters) {
  if (!is_string($method)) {
    error_log("Method name must be a string\n");
    return false;
  }

  if (!$parameters) {
    $parameters = array();
  } else if (!is_array($parameters)) {
    error_log("Parameters must be an array\n");
    return false;
  }

  $parameters["method"] = $method;

  header("Content-Type: application/json");
  echo json_encode($parameters);
  return true;
}

function exec_curl_request($handle) {
  $response = curl_exec($handle);

  if ($response === false) {
    $errno = curl_errno($handle);
    $error = curl_error($handle);
    error_log("Curl returned error $errno: $error\n");
    curl_close($handle);
    return false;
  }

  $http_code = intval(curl_getinfo($handle, CURLINFO_HTTP_CODE));
  curl_close($handle);

  if ($http_code >= 500) {
    // do not wat to DDOS server if something goes wrong
    sleep(10);
    return false;
  } else if ($http_code != 200) {
    $response = json_decode($response, true);
    error_log("Request has failed with error {$response['error_code']}: {$response['description']}\n");
    if ($http_code == 401) {
      throw new Exception('Invalid access token provided');
    }
    return false;
  } else {
    $response = json_decode($response, true);
    if (isset($response['description'])) {
      error_log("Request was successfull: {$response['description']}\n");
    }
    $response = $response['result'];
  }

  return $response;
}

function apiRequest($method, $parameters) {
  if (!is_string($method)) {
    error_log("Method name must be a string\n");
    return false;
  }

  if (!$parameters) {
    $parameters = array();
  } else if (!is_array($parameters)) {
    error_log("Parameters must be an array\n");
    return false;
  }

  foreach ($parameters as $key => &$val) {
    // encoding to JSON array parameters, for example reply_markup
    if (!is_numeric($val) && !is_string($val)) {
      $val = json_encode($val);
    }
  }
  $url = API_URL.$method.'?'.http_build_query($parameters);

  $handle = curl_init($url);
  curl_setopt($handle, CURLOPT_RETURNTRANSFER, true);
  curl_setopt($handle, CURLOPT_CONNECTTIMEOUT, 5);
  curl_setopt($handle, CURLOPT_TIMEOUT, 60);

  return exec_curl_request($handle);
}

function apiRequestJson($method, $parameters) {
  if (!is_string($method)) {
    error_log("Method name must be a string\n");
    return false;
  }

  if (!$parameters) {
    $parameters = array();
  } else if (!is_array($parameters)) {
    error_log("Parameters must be an array\n");
    return false;
  }

  $parameters["method"] = $method;

  $handle = curl_init(API_URL);
  curl_setopt($handle, CURLOPT_RETURNTRANSFER, true);
  curl_setopt($handle, CURLOPT_CONNECTTIMEOUT, 5);
  curl_setopt($handle, CURLOPT_TIMEOUT, 60);
  curl_setopt($handle, CURLOPT_POSTFIELDS, json_encode($parameters));
  curl_setopt($handle, CURLOPT_HTTPHEADER, array("Content-Type: application/json"));

  return exec_curl_request($handle);
}

//上面的程式碼都建議直接Copy拿來用

//我自己的程式碼開始

$target_times=1465772400;
$msg = '距離【畢業典禮】還有'."\n".floor(($target_times-time())/86400).'天'.floor((($target_times-time())%86400)/3600).'時'.floor(((($target_times-time())%86400)%3600)/60).'分'.(((($target_times-time())%86400)%3600)%60).'秒!';

if (time()>$target_times){
	$msg="";
}

$target_times=1467327600;
$msg .= "\n".'距離【指考】還有'."\n".floor(($target_times-time())/86400).'天'.floor((($target_times-time())%86400)/3600).'時'.floor(((($target_times-time())%86400)%3600)/60).'分'.(((($target_times-time())%86400)%3600)%60).'秒!';

if (time()>$target_times){
	$msg="";
}


//處理開始函數,傳入$msg是因為我這個程式的功能所需,並非必要
function processMessage($message,$msg) {
  // process incoming message
  $message_id = $message['message_id'];
  $chat_id = $message['chat']['id'];
  if (isset($message['text'])) {
    // incoming text message
    $text = $message['text'];

    if ($text === "/start" or $text === "/start@botusername"){
		if ($msg!=""){
			apiRequestJson("sendMessage", array('chat_id' => $chat_id, "text" => $msg."\n聊天室ID:".$chat_id));
		}
    } else if ($text === "/show" or $text === "/show@botusername") {
		if ($msg!=""){
			apiRequestJson("sendMessage", array('chat_id' => $chat_id, "text" => $msg));
		}
    } else if (strpos($text, "/stop") === 0) {
	// stop now
    } else {
	// 其他指令或訊息
    }
  }
}

if (php_sapi_name() == 'cli') {
  // if run from console
  //這是為了定時任務的區別,如果是從Crontab跑,就從這邊
	if ($msg!=""){
		apiRequestJson("sendMessage", array('chat_id' => '00000000000', "text" => $msg));
	}
  exit;
}


$content = file_get_contents("php://input"); //讀取資料 (In)
$update = json_decode($content, true); //JSON解析

if (!$update) {
  // receive wrong update, must not happen
  // 接收到錯誤訊息
  exit;
}

if (isset($update["message"])) {
  //接收到正確訊息,調用處理函數
  processMessage($update["message"],$msg);
}

程式碼都獻上了,現在開始講原理。

首先必須要有一台服務器,來執行WebHook,把你寫好的PHP檔案上傳到伺服器上面,注意檔名最好建立很特殊的名稱,讓一般使用者無法猜到你用什麼檔名,以預防惡意人士直接訪問你的程式。(洪水轟炸,或偽造請求之類的。)

上傳後,請直接訪問 https://api.telegram.org/bot{TOKEN}/?method=setWebhook&url=https://www.example.com/{secret}bot.php

例如:
https://api.telegram.org/bot123456789:AAAAAAAAAAAAAAAAAAAAAA/?method=setWebhook&url=https://www.example.com/secret_random_path/bot.php

參數url後面接的就是你要接收的位置,僅支援https,完畢後一旦直接對bot講話輸入指令,telegram就會立刻送出對話內容傳到你的程式,而你的程式處理完之後再回傳給telegram,這就是它的工作原理。

得到的內容長得像:(已經被解析的Object["message"])

(
    [message_id] => 01
    [from] => Array
        (
            [id] => 123456789
            [first_name] => Nickname
            [username] => username
        )

    [chat] => Array
        (
            [id] => -123456789
            [title] => test
            [type] => group
        )

    [date] => 1464504645
    [text] => /say I just say?
    [entities] => Array
        (
            [0] => Array
                (
                    [type] => bot_command
                    [offset] => 0
                    [length] => 17
                )

        )

)

簡單明瞭,這只是message的部分,有可能會出現其他資料,例如傳圖片,有人加入群組時,就會不同了,請參閱 telegram 文檔,https://core.telegram.org/bots/api

而我的設計是當使用者輸入 /start 時,就會回傳 聊天室 id,因為我需要 id 才可以讓我直接發訊息回去,否則必須每次都是被動型傳輸,這樣我就可以主動傳送了,因為我不需要依靠對方先傳訊息給我才可以取得 id 回傳。

而我設定輸入指令 /show 時 就會彈出距離目標時間還有多久。而且利用 cron job 定時任務,每天都會 run 這程式發送一次倒數訊息。這就是整個簡單的概念。

接下來,在 tg 上就可以直接操作並直接顯示結果了,唯一缺陷就是沒有指令選單。這時可以再向 BotFather設定,輸入 /setcommands,再輸入 @botname指令(英文)+空格+簡介。(可以多行輸入)

最終預防機器人被濫用亂加入群組,可以設定鎖定,/setjoingroups@botname → Disable

這樣就大功告成了。其他功能自己探索,其實很簡單的。


This entry was posted in General, Software, Experience, Functions, Note, PHP By Weil Jimmer.

音樂播放程式 Media List Viewer
No Comments

Published:
Updated:2017-05-19 18:35:55

本程式可以選擇特定資料夾目錄並列舉資料夾內所有音樂,以資料夾為第一級/或子資料夾分類,並包含搜尋功能(可自訂資料夾內搜尋),置頂功能(一律顯示在最上方)。只是個簡單版的輕巧小程式。

下載地址【一】:https://url.weils.net/m

下載地址【二】:http://cht.tw/h/p9bxu

產品頁面:http://web.wbftw.org/product/yinlebofangchengshimedialistview


This entry was posted in General, Software, Free, Product By Weil Jimmer.

最棒的手機通訊軟體 Telegram
3 Comments

Published:
Updated:2017-05-19 14:33:13

安全聊天室

最大的特點是:Telegram 支持 RSA 2048 AES 256 的安全端對端加密通訊,這是我認為最棒的功能,它可以幫助用戶阻擋外人侵入,竊取你們的通訊,而Line、FB、Yahoo……等通訊軟體,基本上,聲稱有安全加密,問題是:那些供應商是不是就可以看你的對話!

Telegram 的獨特 秘密聊天室 可以確保用戶的通訊安全,不必擔心講機密事情被警察監聽,被政府監聽,連Telegram自己都不能解密,所以,你們之間的通訊只有在你們之間才可以看得到!

除此之外, Telegram 還支持 秘密訊息 自我銷毀 的功能,超過一定時間就會自動毀滅文檔,是指 雙方的資料同步消失,若正在聊天中,用戶主動刪除訊息,而對方那邊也會跟著同步刪除,非常酷炫!

各平台/裝置支援度高

而且 Telegram 這款應用程式支援所有平台,IOS、Android、Windows、Linux 通通支援!不論手機還是電腦版,非常方便,甚至可以同時登入!還有更離譜的功能是可以自己傳訊息給自己。

容量大、永久保存的雲端

Telegram 所提供出來的雲端空間呢,是無限空間無限流量的,但是單個檔案上限大小是 1.5 GB ,意思是不可以上傳過大的檔案,同時,不論手機或電腦版,都可以傳輸檔案,傳輸照片"原檔",而非壓縮,傳輸任意格式的檔案,不像 Line 只有電腦版才可以上傳檔案,手機板無法傳檔案,聊天室圖片轉寄還會越轉越失真,轉越多人越模糊。真的很爛。

在線狀態/列表

而且在聊天室中,打字或錄音或上傳檔案,都會被顯示在狀態列,還有上線列表可以查看最後上線日期,所以可以知道誰可能已讀了,也可以知道誰正在打字中、上傳檔案中…。當然也可以隱藏最後上線時間。

管理員

在Telegram裡面,還有所謂的管理員,可以決定用戶的加入與踢出,決定群組圖片、名稱,同理也可以設定人人都是管理員,但,創始人是無法被剔除的。

同步刪除

超級群組中,會多出獨特的功能就是「可以編輯訊息」、「可以刪除訊息」,刪除訊息?什麼意思,本來不就可以刪了嗎?新版的更新後,現在已經可以在私聊中刪除自己的對話(短期內),對方也會消失,在超級群組中,自己刪掉自己的訊息,是大家都會消失掉的!

Telegram 的壓縮品質也較佳,圖片比較清晰,如果還嫌模糊就傳原檔吧!

純熟的機器人API

另外,它還可以支援 「機器人」,例如投票機器人、GIF搜圖機器人、調查機器人…,可以在聊天室中打指令實現某些功能,這個就讓用戶們自己去探索拉!

官網:https://telegram.org/

缺點

Telegram 的缺點有點少,首先是影片不可以邊播放邊下載

加好友方式,得用電話簿的方法加入,必須要知道好友的電話號碼。

缺點…其實我實在想不出有啥麼缺點。


This entry was posted in Software, Experience, Free, The Internet By Weil Jimmer.

 1 2 /2 頁)下一頁

Visitor Count

pop
nonenonenone

Note

WPA2 已被 KRACK 攻擊破解!請更新 WiFi 軟體。

歡迎前來本站。

Search

Republic Of China
Privacy is your right and ability to be yourself and express yourself without the fear that someone is looking over your shoulder and that you might be punished for being yourself, whatever that may be.

It is quality rather than quantity that matters.

I WANT Internet Freedom.

Reality made most of people lost their childishness.

Justice,Freedom,Knowledge.

Support/Donate

This site also need a little money to maintain operations, not entirely without any cost in the Internet. Your donations will be the best support and power of the site.
MethodBitcoin Address
bitcoin1NRMVGGpm2T1pmeejisLSEhCXfCefEW9V4
paypal

The Lie We Live

youtube

The Questions We Never Ask

youtube

Support The Zeitgeist Movement

The Zeitgeist Movement

Man

youtube

In The Fall

youtube

Facebook is EATING the Internet

Facebook

Recent Comments

sickcatail on STEAM免費序號

包包 on STEAM免費序號

問問題 on 最棒的手機通訊軟體 Telegram

unocme on STEAM免費序號

窩仔 on STEAM免費序號

Categories

Announcement (4)

Bash (2)

C (1)

C# (4)

C++ (1)

Experience (38)

Flash (2)

Free (10)

Functions (35)

Games (13)

General (44)

HTML (7)

Java (12)

JS (7)

Mood (23)

Note (24)

Office (1)

PHP (9)

Privacy (3)

Product (9)

Python (4)

Software (8)

The Internet (15)

Tools (12)

VB.NET (8)

WebHosting (7)

Wi-Fi (5)

XML (4)