Fixed : Firebase Auth in Cordova lead to a about:blank page on iOS device

Lately , was trying to integrate third party login to cordova app , let’s say twitter . After completing all steps firebase introduced , when run the app and start Oauth with firebase , we got a blank page at the end of process , and never get callback to original app .


You can find Firebase’s document here : https://firebase.google.com/docs/auth/web/cordova

Problem :
1. cordova-plugin-browsertab  : this plugin dependent on compat plugin , but compat plugin deprecated , so will lead to build android failed .


2. When firebase auth start ,will open in another webview , app go to background mode that make app never receive callback .

How to fix :

  1. replace cordova-plugin-browsertab with : cordova-plugin-safariviewcontroller

after install cordova-plugin-safariviewcontroller , we need to add some code in our javascript to replace browsertab with safariviewcontroller.

window.cordova.plugins.browsertab = {};
        
        /* Browsertab - Is Available */
        window.cordova.plugins.browsertab.isAvailable = function( success ) {
            window.SafariViewController.isAvailable( success );
        }
        
        /* Browsertab - Open Url */
        window.cordova.plugins.browsertab.openUrl = function( url ) {
            window.SafariViewController.show( { url: url } , function() {} , function() {} );
        }
        
        /* Browsertab - Close */
        window.cordova.plugins.browsertab.close = function() {
            window.SafariViewController.hide();
        }

2. we need to install background plugin to make app wake up while waiting callback . You can find the plugin here : https://github.com/katzer/cordova-plugin-background-mode

After these fixes above , finally get callback data correctly :

reference : https://github.com/firebase/firebase-js-sdk/issues/1555

macbook pro 2010 無法開機 – 結局超神奇

對2010 你沒看錯,就是那麼耐用 (其實是因為太窮了…)昨天正在測試一個app的時候,因為跑得很慢就出去玩了.回來後發現我的 macbook 老兄關機了 @@ 問了一下沒人動過 ,不祥的預感 ….. 按下電源鍵 無反應 !完了

立即google各種 macbook pro 死機的解救方法,包含各種按鍵組合全都試過了…..真的一動也不動了..嗚嗚嗚.正在絕望中 準備看是不是要去參加外送大軍行列籌錢送修的時候,想說死馬當活馬醫,自己檢查一下搞不好壞掉的地方很明顯,還能修,於是就 拆開了 macbook pro 的背板, 他老兄的裸體長得這樣:

仔細看了看,沒有什麼明顯燒毀的零件,想說這下完了,幾張小朋友是一定要花下去的了,眼淚正要掉下來的時候,看到主機板上面有些灰塵跟什麼毛之類的,就把他吹一吹, 也不知道哪裡靈感,這時候想說給他通通電看看 (背蓋打開狀態下), 挖勒 ! 神奇的事情發生了 ! 竟然啟動了 ! 哇哈哈哈哈 ! 這是演哪一齣啊? 好吧,反正活了就好,好像不小心賺到幾千塊,超爽的.

wordpress :Error 503 Backend fetch failed Varnish cache server

Today , I found my wordpress site can not display correctly .

like the picture show below


if you google this problem , u will find lots discussion there .
What if you try every possible workout but not work ?
disable plugins , disable theme …. bla bla , I evne reinstalled wordpress …. problem remained .

Especially , I DO NOT HAVE VARNISH INSTALLED !!

Guess what ? I switch to my cell phone’s wi-fi hotspot , BOOM ! error message disappear !! Can’t believe it is because ISP or router … wasted lots of time huh.

line官方帳號 & fb粉專 messenger 客服整合

最近老高幫廠商做了一個整合 ,將 line官方帳號跟 fb粉專的 messenger聊天訊息 整合到網頁同一個頁面,方便客服人員 監看 &回覆客戶訊息 ,做了就不要浪費, 跟大家分享

本社群軟體整合功能,可以整合多個line官方帳號,以及多個 fb粉絲頁 
讓老闆/客服人員 在一個app 或一個網頁頁面上 同時處理各種平台傳來的訊息 


特別適用:既有客服平台整合 line & facebook , 網拍客服等行業 
彈性方式跟原有介面整合 , 可以客製化 ,有需要可洽老高 line id :0987032910 

線上 live demo 點擊前往測試
可直接依據網站上說明 , 進行測試 , 測試完畢  記得要將你自己的 line官方帳號跟 fb粉絲頁移除再離開喔! 

線上 live demo 點擊前往測試
可直接依據網站上說明 , 進行測試 , 測試完畢  記得要將你自己的 line官方帳號跟 fb粉絲頁移除再離開喔! 

範例

非常歡迎您光臨,為了讓您能夠安心的使用本網站的各項服務與資訊,特此向您說明本網站的隱私權保護政策,以保障您的權益,請您詳閱下列內容:

一、隱私權保護政策的適用範圍
隱私權保護政策內容,包括本網站如何處理在您使用網站服務時收集到的個人識別資料。隱私權保護政策不適用於本網站以外的相關連結網站,也不適用於非本網站所委託或參與管理的人員。

二、資料的蒐集與使用方式 
為了在本網站上提供您最佳的互動性服務,可能會請您提供相關個人的資料,其範圍如下:

本網站在您使用服務信箱、問卷調查等互動性功能時,會保留您所提供的姓名、電子郵件地址、聯絡方式及使用時間等。
於一般瀏覽時,伺服器會自行記錄相關行徑,包括您使用連線設備的IP位址、使用時間、使用的瀏覽器、瀏覽及點選資料記錄等,做為我們增進網站服務的參考依據,此記錄為內部應用,決不對外公布。
為提供精確的服務,我們會將收集的問卷調查內容進行統計與分析,分析結果之統計數據或說明文字呈現,除供內部研究外,我們會視需要公佈統計數據及說明文字,但不涉及特定個人之資料。
除非取得您的同意或其他法令之特別規定,本網站絕不會將您的個人資料揭露予第三人或使用於蒐集目的以外之其他用途。

三、資料之保護

本網站主機均設有防火牆、防毒系統等相關的各項資訊安全設備及必要的安全防護措施,加以保護網站及您的個人資料採用嚴格的保護措施,只由經過授權的人員才能接觸您的個人資料,相關處理人員皆簽有保密合約,如有違反保密義務者,將會受到相關的法律處分。
如因業務需要有必要委託本網站相關單位提供服務時,本網站亦會嚴格要求其遵守保密義務,並且採取必要檢查程序以確定其將確實遵守。

四、網站對外的相關連結
本網站的網頁提供其他網站的網路連結,您也可經由本網站所提供的連結,點選進入其他網站。但該連結網站不適用本網站的隱私權保護政策,您必須參考該連結網站中的隱私權保護政策。

五、Cookie之使用
為了提供您最佳的服務,本網站會在您的電腦中放置並取用我們的Cookie,若您不願接受Cookie的寫入,您可在您使用的瀏覽器功能項中設定隱私權等級為高,即可拒絕Cookie的寫入,但可能會導至網站某些功能無法正常執行 。

六、隱私權保護政策之修正
本網站隱私權保護政策將因應需求隨時進行修正,修正後的條款將刊登於網站上。

GD32F103C8T6 – GD32 using cubeMX & sw4stm32

Tested by 老高 ,全程使用 cubeMX生成stm32 库,无修正,无需代换到GD32库。

cost down还要down一直down ,价格只有 同型号stm32的一半不到。

中国心大战美国心,價格一直继续down下去就对了,大家有福了啦

「stm32f103c8t6 pin」的圖片搜尋結果

与 stm32f103c8t6 脚位完全相同  。

PIN脚注意事项 :

  • all VDD & VSS  /  VDDA & VSSA  must connect to VCC and GND ! 
  • if not using HSE & LSE -> OSN_IN  & OSN_OUT –> 10K –> GND 
  • boot0 –>10K–> GND (if  want to use UARTto flash –>  boot0 –> 10K –> VDD)
  • SWDIO & SWCLK  :  with 10K  pull-up to VDD

先测HSI 


焊接好了,实验时要特别注意,因為此封裝LQF48脚位很细,间距只有0.2mm ,所以即使焊好了,但有时候脚位跟焊盘有虚焊的现象,若是觉得程序动作不正常,有可能是脚位没接好的问题,可重新检查脚位或是再捕焊好。

使用 cubeMX 设定为 stm32F103C8T6 , generate code 之后,到sw4wtm32 build –> download  –> 不成功 

被保护了 @@

使用arduino IDE 设定为 stm32f103c8t6 , st link 方式烧录, 可以解除保护。但是 arduino IDE 烧进去的程序,无法正常执行。

保护解除后,回到sw4stm32, 即可正确烧录, 且烧录的˙程序,可以正确点点灯。 第一步算是成功了, GD32可以动作起来了。感动了。。。。。。。。。。。。。。

测试 pwm 

预计使用 PA11 输出

由以上block diagram或时钟树 ,  PA11(TIMER1) 由 APB2 提供时钟。

目前尚未外接时钟,依据时钟树,HSI=8M   –>  CK_SYS=8M  , AHB Prescaler设为1 –> CK_AHB=8M

APB2  Prescaler 设为1  –>  TM1 = 8M 

依照当前设置, SYSCLK , HCLK , PCLK1 , PCLK2 应该都是8M ,来验证一下 ,跑起频率是否正确:

要看频率的函数在 Drivers/Src/stmf1xx_hal_rcc.c 里面。 

在 main() 里面加入检查频率的码 ,进行debug ,

typedef struct
{
uint32_t SYSCLK_Frequency;
uint32_t HCLK_Frequency;
uint32_t PCLK1_Frequency;
uint32_t PCLK2_Frequency;
uint32_t ADCCLK_Frequency;

}RCC_ClocksTypeDef;

uint32_t sysclock = 0;
sysclock = HAL_RCC_GetSysClockFreq();

step over 到这,竟然哇勒  optimized out ….  

加点工  宣告 volatile ,再  debug进去,有了

都是8M 无误。

回到 pwm 现在来设定 timer1 的参数(cubeMx) :

prescaler = 7999  –> 8M/8000 = 1000Hz  , counter period = 9 , so we got a 1000/10=100ms pwm  cycle.

这里的 counter period 跟 设定pwm的占空比有关,
占空比 = pulse/ counter period ,如上设定的话,
当 TIM1->CCR4 = 10就会使 占空比達到100%  ;

cube generate code ,  go to sw4stm32   wirte code . 

呼吸灯正确的跑起来了

I2C   及 RTC  測試 

这里一样,使用stm32的库,完全没有修改的状况下,测试 I2C介面的12864 OLED 显示一个实时运行中的时钟。

使用之前用在stm32F030F4P6上面的 stm_HAL  的 oled库 (https://github.com/4ilo/ssd1306-stm32HAL),直接套用。

相关中断设定 

测试ok,I2C介面 oled 正确显示并且时钟运行无误 。

开始
58分钟后运行中ok

USB

without HSE , we can’t use USB on GD32F1(stm32F1)   ?  

USART

Async test

generate code之后, 在 程序中加入 -> 收到 UART字串 顯示在 oled上并且回传 。

worked as expected . 

USART-IrDA : 手上没有红外模组,下次再试。

SPI

手上目前只有一个LORA 1278是SPI ,就拿这个来测吧。 先做个 breakboard,由于是测试,就自己顺便画个在板天线用吧 433Mhz – 17cm。

这lora板子IntoRobot比较麻烦,多了个 RXTX脚 ,个人觉得逊 。 anyway 这不是重点,只是拿来测试 SPI

所以总共需要7个脚位  : CS(NSS)  , MOSI , MISO , SCK , RST , DIO0, RXTX 

RXTX引脚,接收设置
高电位,发送设置低电位,要在程序里面处理

现在来加上外部晶振

如果要加外部晶振 , 先看一下规格 :HSE 8M , LSE 32.768K

先加上 HSE  (C-HSE电容,手边没有20p的,用22p代,沒有上R-fhse电阻)

generate code 之后,在 sw4stm32 这边,就可以看到 HSE 启动了

build & run  ,正常执行,晶振应该ok了。

由于是使用cubeMX 指定为 stm32f103c8t6的关系,clock 设定受到stm32规格的限制,无法用cubeMX设定到72Mhz以上。如果要充分利用这颗GD32的标准速108Mhz,要做点修改,先看 GD32的 clock tree ,几个限制处要特别注意,不可超过。

所以,回到 cubeMX 的 clock config 来看看 , 发现只要 PLL改成13可以得到104 ,且限制处都没有超过, (還是能在cubeMX产生,只要忽略警告)

这下简单了, RCC_PLL_MUL9 改成 RCC_PLL_MUL13 搞定~
build  & run , 正常启动执行,ok了,這樣就跑在104Mhz 比较没有浪费了。 
观察一下,放著跑了20分钟,没有异常,应该是ok了

再来加上 LSE  32.768K  C-LSE 电容 15p(手邊沒有15p用10p代) ,没有上 R-flse电阻

build & run , 正常 ! HSE & LSE OK !

其他注意事项:



四脚无源晶振MC-306  :

1–> osc_in , 4–> osc_out ,  2 & 3不接或接地。

「mc-306   circuit」的圖片搜尋結果

如果使用内部RC振荡器而不使用外部晶振,请按照下面方法处理:
①对于100脚或144脚的产品,OSC_IN应接地,OSC_OUT应悬空。 
②对于少于100脚的产品,有2种接法:第1种:OSC_IN和OSC_OUT分别通过10K电阻接地 。此方法可提高EMC性能;第2种:分别重映射OSC_IN和OSC_OUT至PD0和PD1,再配置PD0和PD1为推挽输出并输出’0’。此方法可以减小功耗并(相对上面)节省2个外部电阻。

程序烧录后,无法运行的怪异问题,只能在 debug调适的时候正常执行,硬启动不能正常运行 。
如果boot0 下拉电阻也换了,RST复位电路重做一次,都没用。
试试看 把靠近boot0的 I2C  disable掉(接 12864 oled) ,换到 比较远的 第二个I2C 就可以了。(记得要把ssd1306使用的 hi2c1 改成 hi2c2 )
要注意 io对 boot0的影响??

 

VBAT

The VBAT pin can be connected to the external battery (1.8 V < VBAT < 3.6 V). If no external battery is used, it is recommended to connect this pin to VDD with a 100 nF external ceramic decoupling capacitor

stm32F030F4P6 — 不到NT 8元的32位元單片機

初始運作只需三個外圍器件 , SWDIO跟  SWCLK 要接 10K 電阻(手上沒有10K,我用8.2K 運作也是OK的),Boot0接560R接地即可運作。VDDA,VDD,VSS(GND) ,Boot0(GND) 都要適當接好,不要懸空。 如果要使用 I2C , SPI ,畫板時記得給上 pull-up R ,並預先考慮兩個以上I2C 或 SPI  devices的狀況,預留線路,應該就能使用愉快。唯一的困難是像我這樣的新手,要手焊 tssop20 有點難,需要練習一下。 ram看起來不大,不過一般應用應該是夠了,除非遇到像需要點陣字表這類的東西,很耗費存儲的,那就看情況是否需要加外部存儲。

32位元  mcu   , 32 !! 32 !! 32 !!   up to 48MHZ 

16kB of flash and 4kB of SRAM  , I2C x1  , SPI x 1 , USART x 2 , tssop20 package , with internal clock (HSI) 

cheap , stable , easy to use . 

參考 

https://www.st.com/content/ccc/resource/technical/document/application_note/b9/9b/16/3a/12/1e/40/0c/CD00167594.pdf/files/CD00167594.pdf/jcr:content/translations/en.CD00167594.pdf

VDD , VDDA –> 3.3V (VDDA  must  >=  VDD)

VSS –> GND

BOOT0 –> R —> GND

SWDIO –> 10K –> adaptor

SWCLK –> 10K –> adaptor

diy a breakout board ? 

hardiest part is soldering mcu chip onto pcb  (for me) , need a little practice .. 

easiest way to download sketch is   stlink-v2, HAL in cubeMX looks like this :

here , we use cubeMx + sw4stm32  as development tool . 

1. in sw4stm32 , create a workspace 

2. in cubeMx ,  assign project location in  that workspace , and check  “Generate Under Root “

3. after generating code , click “open” , then  sw4stm32 start !  enjoy ! 

if encounter any problem when flash  program , in sw4stm32  check  project debug  option . 

project -> properties -> debug/run setting-> edit (or new) 

here , make sure Interface = SWD , Reset = Software , and Frequency must equal to adaptor’s frequency 。 

if we want to use I2C device , ex:  I2C oled , in cubeMx must configure it  right . 

done !   now can try to  upload 1st   program . 

Using OLED 1306  :

copy  inc/ssd1306.h  &  inc/font.h  to   inc/

copy  src/ssd1306.c  &  src/font.c  to   src/

modify  all   stm32fXXX_hal.h   to ur   _hal.h 

done !


if u want to use UART to upload firmware :


VDDA should be connected to power, otherwise chip is in reset state. If package has VSSA – it also should be connected (to GND).

To enter boot mode it is sufficient to connect BOOT0 to power during reset. Do not get confused with absent BOOT1 pin – it is in proper state internally. 设计的时候,就直接把CPU的BOOT1引脚接地(始终为0),就没有BOOT1引脚了

  • pin 16 (VDD) to +3.3
  • pin 5 (VDDA) to +3.3
  • pin 15 (GND) to GND
  • pin 1 (BOOT0) to +3.3
  • pin 4 (RESET) to GND, temporarily
  • pin 17 (USART1_TX) to RX of the FTDI-cable
  • pin 18 (USART1_RX) to TX of the FTDI-cable