小愛音箱萬能遙控器版

又又又又又雙雙叒叕是個小米,這次要開箱的是一個小米音箱萬能遙控器版,讓傳統家電秒變智能家居 開箱,比想像中的小好多 新出的小米小愛音箱HD就很大,在小米之家抱過(〃’▽’〃) 包裝清單:主機+電源適配器+數據線+說明書 下面四周一圈是真洞,剛開始從圖片上看還以為只是圖案 內部中間是一個類似於錐形的雙面金字塔,通俗講大概就是個陀螺吧 麥克風閉鍵(上),長按10秒恢復出廠設置,音量加減鍵(左右),暫停/播放鍵,長按可進入配置模式 隨後需要下載小愛音箱APP進行一系列配置 內置QQ音樂,但是不能管理,需要在QQ音樂上管理 然後你就能開始玩耍了 可以對你的小愛同學說“啟動自毀模式”,你會get到新技能 (謹慎!!) 另外,有一個比較坑爹的設定或者說是BUG,就是連接上藍牙設置後無法聯網了(#黑人問號??)

2019年11月20日 · 1 min · MoeJue

熱敏藍牙印表機開發

最近在做小票打印這塊,項目需求是IOS和安卓兩種都要實現,開始做的時候也是一臉懵,然後網上找了不少資料,踩了一堆坑,看了好多文章,結果還好成了 藍牙打印機一般分為兩種打印模式,票據打印、標籤打印 公司買的渣渣打印機連開發文檔都沒有,害我走了不少坑,讓我開發買的時候也不諮詢諮詢我 目前微信小程序連接藍牙打印機 wx.createBLEConnection 測試在IOS設備上沒有問題,在部分安卓手機上會出現異常(表現為,連接是會彈出系統配對框,不管點取消還是輸入配對碼後點確定,都會立馬斷開連接。如果不輸入也不取消則會在30秒以內自動斷開藍牙打印機) 現在採用的方式是各給安卓和IOS寫一套藍牙打印的命令 IOS // ====================藍牙操作================== //初始化藍牙模組 openBluetoothAdapter() { if (app.sysinfo.provider == 1) { // 開啟藍牙 app.onBluetooth() setTimeout(() => { this.android\_search() }, 2000) return false; } this.closeBluetoothAdapter() uni.openBluetoothAdapter({ success: (res) => { console.log("初始化藍牙模組: " + JSON.stringify(res)); this.startBluetoothDevicesDiscovery() }, fail: (res) => { if (res.errCode === 10001) { uni.onBluetoothAdapterStateChange((res) => { console.log('監聽藍牙適配器狀態變化事件', res) if (res.available == false) { app.global\_printing = {} this.connected = false this.chs = \[\] this.canWrite = false } if (res.available) { this.startBluetoothDevicesDiscovery() } }) } if (res.errCode) { app.alert('初始化藍牙失敗,錯誤碼:' + res.errCode) return false; } app.alert(res.errMsg) } }) }, ...

2019年11月5日 · 9 min · MoeJue

鴿主帶著新版三合一回來了

自從5.20表白後,鴿主就一直處於失蹤狀態……. 時隔不知道多少個月,三合一它竟然又更新了,兩個月前在群裡立下的flag,今天我把它給圓了,不要問我中間兩個月幹嘛去了-.- (忙著參加大型鴿子聚會) 正文 由於網路識別經常掛掉,非常不穩定,一直有小夥伴在跟我反饋,所以這次特意更新了本地識別。 推薦1G記憶體以上的機子安裝,推薦配置2核2G,最佳配置16核32G [#手動滑稽] v2.0 新增本地二維碼識別與生成 移除網路識別介面 修復已知BUG 其他一些細節優化 詳細說明和安裝教程可點擊這裡查看上個版本 新版網站均保留了舊版本資料,不影響之前使用者使用,並且與贊助版資料同步 贊助版 由於舊版本盜版氾濫,新版三合一增設了贊助版。 演示網站:https://qr.moeins.cn 贊助版主要特色: 優化二維碼的識別與生成,大大提高識別準確率,更快的識別速度,不佔CUP與記憶體,更穩定 新增21套三合一生成模板,並且可支援無限擴展,添加教程在文末 新增對外的API介面,不再針對該程式使用,任何程式都可呼叫 如何獲得: 點擊這裡贊助項目18.88元以上即可獲得收款碼三合一的贊助專享版,你值得擁有! 關於贊助版的一些小小說明(之前都是沒有特意拿出來說明 ) 到目前為止,我所有的贊助版項目均不綁定網域,不曾加密,可自由擴展,支援二次開發,且贊助金額都偏低,即可獲得。所以還請有贊助的小夥伴們不要隨意分享贊助得到的原始碼,這是對作者的尊重也是對自己權益的保障。由於不存在買賣關係,如無重大BUG作者將不定期更新或無限期拖更。如遇小問題,在作者空閒之餘願意指導或幫助修改,但是要新增大功能這種情況下我有權拒絕幫忙或需另外付費。 贊助版模板擴展教程 模板推薦尺寸為:900*1200 將模板圖片放至/public/static/images/template/模板目錄,注意請不要使用中文名,且只支援jpg副檔名 在根目錄的config.php中 qr_template 項下配置相關資料,格式如下: ‘001’ => [ ’name’ => ‘預設模板’, ‘data’ => [ 150,200 ], ’title’ => true, ‘size’ => 20 ] 參數說明 名稱 變數名 必填 類型 範例值 描述 模板ID 無 是 int 001 模板的檔案名,推薦數字,不可重複 別名 name 是 string 預設模板 在前台顯示的模板別名 X,Y data 是 array [150,200] 二維碼生成的左上角的起始X(橫坐標),Y(縱坐標)坐標,不可為負數且小於模板尺寸 模板標題 ...

2019年8月4日 · 1 min · MoeJue

小程序架構

不知道大家們寫小程序是怎麼個寫法的,前幾個月在寫微信小程序,自己整理的一種架構,或者叫框架 微信原生的架構是這樣子 ├── app.js ├── app.json ├── app.wxss ├── pages │ │── index │ │ ├── index.wxml │ │ ├── index.js │ │ ├── index.json │ │ └── index.wxss │ └── logs │ ├── logs.wxml │ └── logs.js └── utils 為什麼不用微信原生的寫法呢? 小程序就類似手機APP,都會有一個tabBar欄對吧,微信官方的tabBar欄是在app.json中進行的全局配置。做一般的開發是沒有任何問題的,但涉及到一個複雜的tabBar欄時,使用官方原生的就無法實現,也無法動態載入,比如某影片app中間的拍照錄影功能 這意味著,我們不能使用官方給我們提供的tabBar欄,需要我們自己寫 最開始我的做法還是保持原生的結構,只是自己寫tabBar欄,所以頁面程式碼都寫在一個文件中,預設顯示第一屏,其他的都隱藏起來,切換頁面的時候再把相應的頁面顯示,其他的隱藏起來,並且動態渲染資料上去。但是有個問題是,如果是小專案倒沒什麼大問題,但是如果是大專案程式碼量非常龐大,都寫在一個文件中,後期難以維護,所以這個方法最後被pass掉 再後來將切換頁面的方式改為跳轉(wx.switchTab等),把不同頁面的程式碼放到了不同的文件,但是還有一個問題,切換也會閃爍,每次切換頁面就等於重新打開一個網頁一樣,tabBar都被重新渲染,所以會閃爍。pass 由此就有了現在的全新架構方式: 將/pages/index/下的文件全部定義為入口文件,js入口,css入口,視圖入口,不同頁面的文件還是放到不同的位置去,為了好管理,新建了一個template的資料夾,用於放不同頁面間的程式碼,結構和官方的單頁面結構是一樣的 根目錄下的app.js用於存放全域函數,其他頁面呼叫只需getApp()即可 js的入口文件 const app = getApp(); var index\_js = require("../../template/index/index.js"); var types\_js = require("../../template/types/types.js"); var Global\_Data = \[\]; Page({ data: { active: 0, show: { index: true, types: false, course: false, user: false } }, onLoad(options) { this.setData({ Global\_Data: index\_js.getData() }) }, // 底部nav切换 tabbar\_onChange(event) { var key = ''; this.data.show = { index: false, types: false, course: false, user: false }; console.log(event) switch (event.detail) { case 0: key = 'index'; Global\_Data = index\_js.getData(); break; case 1: key = 'types'; Global\_Data = types\_js.getData() break; case 2: key = 'course'; Global\_Data = index\_js.getData(); break; case 3: key = 'user'; Global\_Data = index\_js.getData(); break; } this.data.show\[key\] = true; console.log(Global\_Data) this.setData({ show: this.data.show, Global\_Data: Global\_Data }) }, }); wxml入口文件 ...

2019年5月17日 · 2 min · MoeJue

一些常見功能的查詢sql

1、情境:查詢一位選手的排名及距離上一名差多少票 方法二(去重排序查詢比自己少的數量) $temp = DB::fetch_first("SELECT distinct total+jewel_vote+forge_vote ,COUNT(*)+1 AS RANK FROM " . DB::table('vote_competition') ." WHERE total+jewel_vote+forge_vote>" . $competition['all'] . " and aid={$aid} ORDER by forge_vote desc"); $rank = $temp['RANK']; // 無法直接查詢到上一名選手票數 if ($temp['total+jewel_vote+forge_vote']) { // 這裡查詢出來的是和第一名選手相差的票數 $up = $temp['total+jewel_vote+forge_vote']-$competition['all']; } 方法一(定義變數累加排序) $temp = DB::fetch_all("SELECT a.cid,a.total,a.forge_vote,a.jewel_vote,(@rowNum:=@rowNum+1) AS rank FROM pre_vote_competition AS a, (SELECT (@rowNum :=0) ) b WHERE aid={$aid} ORDER BY (a.total+a.forge_vote+a.jewel_vote) DESC "); foreach ($temp as $key => $value) { if ($value['cid'] == $cid) { // 當前自己的排名 $rank = $value['rank']; if ($up) { $up = $up - ($value['total'] + $value['forge_vote'] + $value['jewel_vote']); } break; } // 和上一名選手相差的票數 $up = $value['total'] + $value['forge_vote'] + $value['jewel_vote']; } 2、情境:查詢一篇文章的上一篇和下一篇,支援斷號 ...

2019年4月10日 · 3 min · MoeJue

微信JSAPI支付

前陣子一直在做微信相關的業務,雖說不是什麼新技術,但之前一直沒有機會接觸到,然後踩了些坑,抽空整理記錄下。 微信支付一共分為7種,分別是:付款碼支付、JSAPI支付、Native支付、APP支付、H5支付、小程序支付、人臉支付。 此次業務中使用到的是微信JSAPI支付:用戶透過微信掃碼、關注公眾號等方式進入商家H5頁面,並在微信內呼叫 JSSDK完成支付 文件:https://pay.weixin.qq.com/wiki/doc/api/index.html SDK:[https://pay.weixin.qq.com/wiki/doc/api/micropay.php?chapter=11_1 ](https://pay.weixin.qq.com/wiki/doc/api/micropay.php?chapter=11_1)JSAPI支付需要在微信中的瀏覽器打開才能喚起微信支付,效果如下圖 附上介面程式碼 程式碼中使用了模板引擎 html: {$competition\['username'\]} {$prices\[0\]}鑽 {$prices\[1\]}鑽 {$prices\[2\]}鑽 {$prices\[3\]}鑽 {$prices\[4\]}鑽 註:1鑽=1元,1鑽={$activity\['offset'\]}票 立即微信支付 JavaScript: // 投票 var offset = {$activity[‘offset’]}; $(’#tips’).html(‘正在給{$competition[‘code’]}號贈送{$prices[0]}鑽=’+({$prices[0]}*offset)+‘票’); $(’#vote’).click(function(){ $.post(’/index/index/detailed.html?cid={$cid}&aid={$aid}’,{ formhash :’{FORMHASH}’, submit:‘1’, type:1, openid:’{$_G[‘member’][‘openid’]}’ },function(res){ alert(res.msg); if (res.code == 0) { $(’.box-1 span’).text(res.data.all); $(’.box-2 span’).text(res.data.rank); $(’.box-3 span’).text(res.data.up + ‘票’); } }); }) /* jQuery物件級別外掛程式擴展 */ $.fn.extend({ /* 單選框 */ hlRadio:function () { var radioEl=$(this); radioEl.click(function () { var price = 0; price = $(‘input:radio:checked’).val(); $(’#price’).val(’’); $(’#tips’).html(‘正在給{$competition[‘code’]}號贈送’+price+‘鑽=’+(price*offset)+‘票’); radioEl.siblings(“div”).removeClass(“active”); $(this).siblings(“div”).addClass(“active”); }); }, }); $(“input[name=‘price’]”).hlRadio(); $(’#price’).bind(‘input propertychange’, function(){ var price = 0; price = $(’#price’).val(); $(’#tips’).html(‘正在給{$competition[‘code’]}號贈送’+price+‘鑽=’+(price*offset)+‘票’); }) ...

2019年3月30日 · 4 min · MoeJue

我以為我會暴富,但是我沒有。

2018年已經走到盡頭 暴富的願望落空了 更慘的是還要完成一部年度巨作 ——年終總結 說起來,這世上原本沒有年終總結 自從有了KPI 就有了扯不盡的怨念 下面是正文 在 文章歸檔 這裡可以很清楚地看到所有文章和發布的時間,2018年的每一個月都有發布文章,幾乎每天都會來看看。 # 回顧 1月份寫了第一個自己的部落格系統 2月份買第一個手(老)辦(婆) 3月份發布了幻想領域圖床首個版本 4月份更新了幻想領域圖床正式版、整合了emlog新浪插件 5月份上線了萌音發卡平台 6月份修復了許久未管的歌單 7月份哇,萌音社群來了 8月份收款碼三合一發布 9月份萌音影視上線 10月份過的第三個程式設計師節1024 11月份買了小米筆記型電腦&萌音雲筆記發布 12月份去了遠方,唯有二次元不能放棄 # 2019 2019將會是一個忙碌、學習且成長的一年。年初的展望沒有食言,今年大大小小的專案也是寫了不少,也學到了很多東西,創建了我第一個qq群,交到了一群愛我的小夥伴們。 今年確實是又雙叒叕忘記準時發部落格,但今年不會再像去年那樣機(無)智(恥)地改時間了,過去的時間畢竟不能再回來了。 這兩個月學習的一些東西都給記到萌音雲筆記上了,沒有往部落格這邊發,有興趣的小夥伴可以去看看。鬼知道我經歷了什麼,以前都是一兩個月孵化出一個專案,現在是一星期整一個出來。這僅僅只是吐槽,並非埋怨。 去年的展望是寫在了敬業福中(去年有來的朋友才會知道),今年本來還想掛上去的,突然發現原始碼在很遙遠的地方,然後就算了,大不了發篇部落格就好了。 這兩個月也入門了下C、C++、Java、node.js,玩了discuz外掛&模板、百度&微信小程序、公眾號…… 2019年繼續加油….

2019年1月2日 · 1 min · MoeJue

萌音影視 - 線上影視應用

部落格 | 演示站 | QQ群 | GitHub 基於優雅的 Laravel 框架和一點都不妹子的 妹子UI 的線上影視應用 作者有話要說 雖然線上影視網上也是遍地都是,但這並不影響我自個寫一個,這樣以後自己看番也方便,畢竟自己動手才能豐衣足食,又能學習到新的知識,豈不美哉。 頁面設計參考了部分網站。影視資源均來自網上,如有侵權,請及時聯繫我們。 讓我們一起拋棄那些ex的60秒廣告吧~ 無資料庫、無後台模式,僅只有一個設定檔(config/web.php) 無廣告,支援VIP解析,官方源,速度快,多頻道,多分類 待辦事項: 獨立的頻道首頁 電視台直播 多解析介面 待添加… 贊助專享版 另外這是一個雙版本應用,就是它會有兩個不同的版本,贊助版基於普通版的優化而來,在功能和效能上做了很大提升,大大加快運行速度,並且保持優先的更新。 那麼,問題來了,如何獲得贊助專享版呢? 你可以在 這裡 或者 這裡 對專案贊助58元以上即可獲得 當然,如果專案對你有幫助,或者你有需要,都可以選擇贊助我們,哪怕一分也是愛 我想沒有一個人寫開源專案是為了牟利而寫,畢竟它還沒有去磚廠搬一天磚賺的多。 安裝需求 LNMP/AMP With PHP5.6+ curl、OpenSSL擴展 Composer 透過Composer安裝主程式 1. 使用composer安裝moeins $ composer create-project a-jue/moeins #等待安裝依賴庫後,會自動執行安裝腳本 #出現如下提示表示安裝完成 > Illuminate\Foundation\ComposerScripts::postInstall > php artisan optimize Generating optimized class loader The compiled services file has been removed. > php artisan key:generate Application key [base64:Hx0I9UUQg7OyIz8lpDYG6Y/gW1uxS760ERdWzGG2jyQ=] set successfully. 2. 目錄權限 將public 子目錄設定為對外公開的web目錄 ...

2018年9月25日 · 1 min · MoeJue

QQ、支付寶、微信收款碼三合一

收款啦 收款啦,是一款整合支付寶、微信、QQ收款碼的三合一系統。 採用 thinkPHP5.0 + MySQL + layui 開發完成 演示網站:收款啦 專案地址:GitHub 前言 無論是教學還是現成的程式碼,網路上幾乎隨處可見,為什麼我還要自己寫一套呢? 就是為了體現「套」字,包含上傳二維碼、識別二維碼、生成三合一收款碼,一整套流程服務。 絕大多數的三合一僅針對個人使用,而收款啦能為多用戶提供三合一服務。 但是它卻沒有後台,主要原因有兩個: 無需頻繁查看或修改配置,一次配置,終身使用。 作者懶癌發作(也導致沒有安裝嚮導) 如果確實需要,之後再說 程式碼本身是比較輕量級的,由於使用了框架導致體積增大。 好吧,本身也沒什麼技術含量,自己也幾乎用不到,寫給有需要的人類吧,順便水水文~~逃(- 原理 收款碼三合一,聽起來感覺很神奇,其實原理非常簡單! 所謂二維碼,其實就是包含了一系列字串的圖片罷了。無論是支付寶還是微信的收款碼,其本質上是一個包含了收款連結的二維碼。所以我們的思路是:檢測如果是支付寶瀏覽頁面,就給出支付寶的付款連結;如果是微信,就給出微信連結…… 然後這裡涉及到一個知識點,User-Agent,大廠的webview都會攜帶自家的UA資訊,比如說: QQ:MQQBrowser/6.2 TBS/043221 Safari/537.36 QQ/7.0.0.3135 微信:MQQBrowser/6.2 TBS 043220 Safari/537.36 MicroMessenger/6.5.8.1060 NetType/4G Language/zh_CN 支付寶:UCBrowser/11.5.0.939 UCBS/2.10.1.6 Mobile Safari/537.36 AliApp(AP/10.0.15.051805) AlipayClient/10.0.15.051805 Language/zh-Hans 這樣就很輕鬆區分是QQ還是微信還是支付寶掃碼了: User-Agent 含有 QQ/ 為QQ User-Agent 含有 MicroMessenger 為微信 User-Agent 含有 AlipayClient 為支付寶 既然能夠區分每個軟體,那就可以透過自建一個網址,透過二維碼生成掃描這個網址後,判斷瀏覽器的UA,來分發不同的收款碼。 大致的流程則為: 客戶端掃碼 -> 伺服器端根據 User-Agent 判斷客戶端類型 -> 分別返回不同的處理 另外值得注意的是: QQ:https 協定,無法喚醒QQ 支付寶:https 協定,可直接喚醒支付寶 APP ...

2018年8月24日 · 1 min · MoeJue

世界那麼大,讓我帶你去看看 123

聽說只有聰明人才能看到這句話,密碼在文章標題後面 生命短暫,世界很大。 小飛機助手,它是一款基於S*h·a·d·o·w·s·o·c·k·s的VPN代理軟體助手,它內建多個節點,可用率高達80%,可一鍵翻`越`長`城`防`火`牆,達到科`學`上`網`的目的。 先聲明 在某個漆黑風高、風雨交加的夜晚,身為碼農的某部落客,經常需要上網搜尋資料和學習,故國內度娘對英文搜尋欠佳,則需上谷`歌,又故國內大陸地區無法直接訪問谷`歌,則迫於無奈只能掛上梯`子,爬出長`城`防`火`牆 該軟體為免費軟體,請勿盜賣! 該軟體僅用於學習與交流,請不要用於違法用途 任何人使用該軟體的任何行為均與作者無關,本人有權不承擔任何法律責任! 環境 需要安裝 .NET Framework 4.6.2 和 Microsoft Visual C++ 2015 Redistributable (x86) 基本使用 雙擊小飛機助手運行後將自動釋放內建的 S·h·a·d·o·w·s·o·c·k·s 版本(注意殺軟) 小飛機助手預設使用的是高可用模式,當然你也可以切換模式,或者選擇你喜歡的節點 選擇 啟用系統代理 來啟用系統代理。請禁用瀏覽器裡的代理外掛程式,或把它們設定為使用系統代理。 伺服器自由切換 負載平衡:隨機選擇伺服器 高可用:根據延遲和丟包率自動選擇伺服器 累計丟包率:透過定時 ping 來測速和選擇。如果要使用本功能,請打開選單裡的`統計可用性`。 也可以實現 IStrategy 介面來自訂切換規則,然後給我們發一個 pull request。 如果目前節點不可用請自行嘗試切換節點 殺軟可能報毒,請新增信任,如不放心,請在虛擬機器中運行 哈勃報告:https://habo.qq.com/file/showdetail?pk=AD0GYV1oB2UIP1s9#pephoto .down_link{background:url(‘https://www.52ecy.cn/content/uploadfile/201707/md-bg.jpeg') no-repeat 100% 0% #fffdff; border: 1px solid #faf8fb; border-radius: 2px; color: #666; font-size: 14px; margin-bottom: 10px; padding: 5px 20px;}.downbtn{background: none repeat scroll 0 0 #1BA1E2; border: 0 none; border-radius: 2px; color: #FFFFFF; cursor: pointer; font-family: “Open Sans”,“Hiragino Sans GB”,“Microsoft YaHei”,“WenQuanYi Micro Hei”,Arial,Verdana,Tahoma,sans-serif; font-size: 14px; margin: -4px 20px 0 0; padding: 8px 30px;text-transform:none;text-decoration:none;} .downlink a{text-decoration:none;} .downlink a{text-decoration:none;font-size:15px;} .downlink a:link{color: #ffffff;} .downlink a:visited{color: #ffffff;} .downlink a:hover{color: #ffffff;} .downlink a:active{color: #ffffff;} .downbtn{background: none repeat scroll 0 0 #1BA1E2; border: 0 none; border-radius: 2px; color: #FFFFFF !important; cursor: pointer; font-family: “Open Sans”,“Hiragino Sans GB”,“Microsoft YaHei”,“WenQuanYi Micro Hei”,Arial,Verdana,Tahoma,sans-serif; font-size: 14px; margin: -4px 20px 0 0; padding: 8px 30px;} .yanshibtn{background: none repeat scroll 0 0 #d33431; border: 0 none; border-radius: 2px; color: #FFFFFF!important; cursor: pointer; font-family: “Open Sans”,“Hiragino Sans GB”,“Microsoft YaHei”,“WenQuanYi Micro Hei”,Arial,Verdana,Tahoma,sans-serif; font-size: 14px; margin: -4px 20px 0 0; padding: 8px 30px;text-transform:none;text-decoration:none;} .downbtn:hover,.yanshibtn:hover{background: none repeat scroll 0 0 #9B59B6; border: 0 none; border-radius: 2px; color: #FFFFFF!important; cursor: pointer; font-family: “Open Sans”,“Hiragino Sans GB”,“Microsoft YaHei”,“WenQuanYi Micro Hei”,Arial,Verdana,Tahoma,sans-serif; font-size: 14px; margin: -4px 20px 0 0; padding: 8px 30px;} .downbtn a:hover,.yanshibtn a:hover{background: none repeat scroll 0 0 #9B59B6; border: 0 none; border-radius: 2px; color: #FFFFFF; cursor: pointer; font-family: “Open Sans”,“Hiragino Sans GB”,“Microsoft YaHei”,“WenQuanYi Micro Hei”,Arial,Verdana,Tahoma,sans-serif; font-size: 14px; margin: -4px 20px 0 0; padding: 8px 30px;} ...

2018年8月1日 · 2 min · MoeJue