昨天,今天,明天,每天的每天,你是否都多懂得一点点...

星期日, 九月 30, 2018

Telegram Bot 发送漂亮的消息,粗体,斜体, 表格,按钮[第五集]

Tags:  
Telegram, 机器人,
 聊天机器人,机器人编程,机器人代码, Telegram代码,Telegram Bot, Telegram编程  

本视频是Telegram Bot 机器人编程系列的第五集。 本集介绍如何使用Telegram机器人发送漂亮的消息,包据粗体,斜体,链接,按钮,代码,表格等。


相关的代码请
翻到下面

下期预告:
Telegram Bot 判断命令的来源和处理有人入群, 有人被踢等[第六集]  


-~-~~-~~~-~~-~-

本频道旨在分享生活中各种小技巧, 如用小米盒子看国内视频, 如何使用KODI看电影等等. 点击进入我的频道: goo.gl/5tyxcf

🔷 订阅我的频道: goo.gl/KuF3bY
🔷 telegram电报群: t.me/fengsharegroup
🔷 我的博客: www.dengnz.com/blog
🔷 Facebook: www.facebook.com/fengnz

觉得我的视频对你帮助很大的话, 请我喝杯咖啡吧
微信赞赏码: goo.gl/uKoE8w
-~-~~-~~~-~~-~-

本视频中使用的代码:

[javascript]

function doGet(e){
  return HtmlService.createHtmlOutput("Hello World!! No, this link should be hidden!!!");
  
 //  return HtmlService.createHtmlOutputFromFile('Index');
}


function doPost(e){
  var body = JSON.parse(e.postData.contents);
  

  var payload = preparePayload(body);
  var data = {    
    "method": "post",
    "contentType": 'application/json',
    "payload": JSON.stringify(payload),
  }
  
}
function preparePayload(body){
  var payload;

  body.message.text = body.message.text.toLowerCase();
  body.message.text = body.message.text.replace(/@temptestbot2/g, '');
  
  var paras = body.message.text.trim().split(" ");
  // remove empty strings
  paras = paras.filter(function(para){
    if (para){
      return true;
    }
  });
  
  if (body.message.text){
  
      payload = {
        "method": "sendMessage",
        "chat_id": body.message.chat.id,
        "text": "你好, 欢迎使用本机器人, 本机器人现在只认识颜色。",
        "parse_mode": "Markdown",
        "disable_web_page_preview": true,
      } 
      
      if(body.message.text.indexOf("/help") === 0){      
         payload.text = "你好, 欢迎使用本机器人, 本机器人现在只认识颜色。";
         return payload;
      }
      
      if(body.message.text.indexOf("/colors") === 0){   
         payload.text = "红\n黄\n蓝";        
         return payload;
      }
      
      if(body.message.text.indexOf("/list") === 0){ 
         if (paras[1]){
           switch (paras[1].toLowerCase()){
             case "people":  
               if (paras[2]){
                 if ("JS神技能".toLowerCase().indexOf(paras[2]) >= 0){
                   payload.text = "JS神技能 - https://www.youtube.com/channel/UC6tPP3jOTKgjqfDgqMsaG4g";
                 }
                 if ("悟空的日常".toLowerCase().indexOf(paras[2]) >= 0){
                   payload.text = "悟空的日常 - https://www.youtube.com/channel/UCii04BCvYIdQvshrdNDAcww";
                 }
                 if ("YuFeng Deng".toLowerCase().indexOf(paras[2]) >= 0){
                   payload.text = "YuFeng Deng - https://www.youtube.com/channel/UCG6xoef2xU86hnrCsS5m5Cw";
                 }
               } else {                 
                 payload.text = "JS神技能\n"
                   + "悟空的日常\n"
                   + "YuFeng Deng\n";        
                   return payload;
                }
               break;
             default:  
               payload.text = "红\n黄\n蓝";            
             break;
           }
                
           return payload;
         } else {         
           payload.text = "*JS神技能*\n"
             + "[悟空的日常](https://www.youtube.com/channel/UCii04BCvYIdQvshrdNDAcww)\n"
             + "[*YuFeng Deng*](https://www.youtube.com/channel/UCG6xoef2xU86hnrCsS5m5Cw)\n"
             + "_YuFeng Deng_\n"
             + "`01|" + "UCii04BCvYIdQvshrdNDAcww" + " | `\n"
             + "`02|" + "UCG6xoef2xU86hnrCsS5m5Cw" + " | `\n"
             + "```javascript\n"
             + 'payload = {\n'
             + '    "method": "sendMessage",\n'
             + '    "chat_id": body.message.chat.id,\n'
             + '    "text": body.message.text,\n'
             + '}'
             + "```"
             ;
                       
            var inlineKeyboardMarkup = {};
            inlineKeyboardMarkup.inline_keyboard = [];
            var keyboardRow = [];
            var keyboardButton1 = {
                text: "按钮1",
                url: "https://www.google.com"
            };
            
            var keyboardButton2 = {
                text: "按钮2",
                url: "https://www.google.com"
            };
            
            var keyboardRow2 = [];
            var keyboardButton3 = {
                text: "按钮3",
                url: "https://www.google.com"
            };
            
            var keyboardButton4 = {
                text: "按钮4",
                url: "https://www.google.com"
            };

            keyboardRow.push(keyboardButton1);
            keyboardRow.push(keyboardButton2);
            
            keyboardRow2.push(keyboardButton3);
            keyboardRow2.push(keyboardButton4);
            inlineKeyboardMarkup.inline_keyboard.push(keyboardRow);
            inlineKeyboardMarkup.inline_keyboard.push(keyboardRow2);
            payload.reply_markup = inlineKeyboardMarkup;

       
           return payload;
         }
      }
      

  
      payload = {
          "method": "sendMessage",
          "chat_id": body.message.chat.id,
          "text": body.message.text,
      } 
  }
  else if (body.message.sticker){
    payload = {
      "method": "sendSticker",
      "chat_id": body.message.chat.id,
      "sticker": body.message.sticker.file_id
    }
   }
  else if (body.message.photo){
    array = body.message.photo;
    text = array[1];
    payload = {
      "method": "sendPhoto",
      "chat_id": body.message.chat.id,
      "photo": text.file_id
    }
   }
    else {
    payload = {
      "method": "sendMessage",
      "chat_id": body.message.chat.id,
      "text": "Try other stuff"
    }
   }
  return payload
}


[/javascript]  

星期五, 九月 28, 2018

Angular 2+ How do you use Date pipe in typescript

Well, I was wrong in my last post. It's possible to use a pipe in your type script code. The problem with the [value] attribute setting the reactive from control pipe is that it will not update once the data changed.

It's better to pipe the data in the type script.

In the following code, createdDate is piped. You will need to import the DatePipe module. I use a VSCode extension to do this for me.

this.organizationStore.firstOrganization.subscribe(x => {
if (x) {
this.organization = x;
this.organizationForm.setValue({
domain: x.get('domain'),
address: x.get('address'),
phone: x.get('phone'),
isActive: x.get('isActive'),
licenseId: x.get('licenseId'),
name: x.get('name'),
description: x.get('description'),
logoBase64: x.get('logoBase64'),
createdDate: new DatePipe('en-NZ').transform(x.get('createdDate')),
modifiedDate: x.get('modifiedDate'),
createdBy: x.get('createdBy'),
modifiedBy: x.get('modifiedBy')
});
}
});

--
Feng

Angular 2+ Use pipe for reactive form controls

With Angular Reactive Form, your input value is automatically read from formControlName binding, which is defined in the type script file. 

There is no way you can use angular pipe in typescript. How would you pipe the formControl value?

In the following example, I would like to pipe the string ISO date to local date.

[html]
   <mat-form-field>
      <input matInput name="createdDate" readonly placeholder="Created Date:" formControlName="createdDate">
    </mat-form-field>
[/html]

Here is how I did it.

[html]
    <mat-form-field>
      <input matInput name="createdDate" readonly placeholder="Created Date:" formControlName="createdDate" [value]="organizationForm.value.createdDate | date">
    </mat-form-field>
[/html]

--
Feng

星期日, 九月 23, 2018

[Youtube]直播源如何使用?全面了解直播源,M3u/m3u8, TXT, DPL格式的介绍和在KODI,盒子,电脑上的使用方法

tags: 小米盒子, 直播源, KODI, m3u, m3u8, TXT, DPL, 电视家,小薇直播,直播源如何使用,直播源如何用,直播源怎么用


我这前发布过一些直播源的视频,有的小伙伴不了解它们的使用方法。 今天这个视频介绍一些流行的直播源列表格式,直播源的协议和它们的使用方法。涵盖电脑上,电视上的各类软件。包括KODI, 小薇直播等。


-~-~~-~~~-~~-~-

本频道旨在分享生活中各种小技巧, 如用小米盒子看国内视频, 如何使用KODI看电影等等. 点击进入我的频道: goo.gl/5tyxcf

🔷 订阅我的频道: goo.gl/KuF3bY
🔷 telegram电报群: t.me/fengsharegroup
🔷 我的博客: www.dengnz.com/blog
🔷 Facebook: www.facebook.com/fengnz

觉得我的视频对你帮助很大的话, 请我喝杯咖啡吧
微信赞赏码: goo.gl/uKoE8w
-~-~~-~~~-~~-~-

星期五, 九月 21, 2018

[Youtube]小米盒子增强版替换大流氓Kingroot5.3.7为SuperSu

tags: 小米盒子3增强版,kingroot, supersu

我之前出过个ROOT小米盒子3增强版的视频, 后来我又在这个基础上出了个替换kingroot为supersu的视频。有的小伙伴没有看我的第一个ROOT的视频,直接看第二个,就会替换不能成功, 因为他们用的是新版的KINGROOT来ROOT他们的盒 子。 如果你也是用了最新版 的KINGROOT已经ROOT了你的盒 子,那么,除了还原出出厂设置重新ROOT过,还有别的办法吗? 办法是有的,往 下看。虽然我删除KINGROOT的时候没出什么状况, 但大家要做好备份哦,难免碰到要系统还原的时候。如果大家想用最新版 的SUPERSU, 去官网下载然后覆盖安装就可以了。

-~-~~-~~~-~~-~-

本频道旨在分享生活中各种小技巧, 如用小米盒子看国内视频, 如何使用KODI看电影等等. 点击进入我的频道: goo.gl/5tyxcf

🔷 订阅我的频道: goo.gl/KuF3bY
🔷 telegram电报群: t.me/fengsharegroup
🔷 我的博客: www.dengnz.com/blog
🔷 Facebook: www.facebook.com/fengnz

觉得我的视频对你帮助很大的话, 请我喝杯咖啡吧
微信赞赏码: goo.gl/uKoE8w
-~-~~-~~~-~~-~-

星期三, 九月 19, 2018

[网络技术]RSA private key bad permission issue

I recently migrated my website to a new server. When I tried to git push my website to git server from my new server, it failed, error as below.

fennng@fengUbuntu2:~/Dropbox/fengUbuntu/wp/html$ git push
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
@         WARNING: UNPROTECTED PRIVATE KEY FILE!          @
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
Permissions 0644 for '/home/fennng/.ssh/id_rsa' are too open.
It is required that your private key files are NOT accessible by others.
This private key will be ignored.
Load key "/home/fennng/.ssh/id_rsa": bad permissions
git@bitbucket.org: Permission denied (publickey).
fatal: Could not read from remote repository.

Please make sure you have the correct access rights
and the repository exists.
fennng@fengUbuntu2:~/Dropbox/fengUbuntu/wp/html$ git push
Counting objects: 9, done.
Compressing objects: 100% (9/9), done.
Writing objects: 100% (9/9), 1.41 KiB | 721.00 KiB/s, done.
Total 9 (delta 8), reused 0 (delta 0)
remote: Checking connectivity: 9, done.
To bitbucket.org:fennng/wp-files.git
   70925ed..e6c612e  master -> master
fennng@fengUbuntu2:~/Dropbox/fengUbuntu/wp/html$


The keys were copied from the old server. What's wrong with it? Yes as it already stated. It's the file's permission.  I used SFTP to copy the files over, but the permission was not set properly by the SFTP client. To fix this issue, we need to set proper permission for the id_rsa file.


Solution:


fennng@fengUbuntu2:~/.ssh$ chmod 644 *
fennng@fengUbuntu2:~/.ssh$ chmod 600 id_rsa

星期二, 九月 18, 2018

2018年九月港澳台直播源更新

Tags: Kodi, 直播源, 港澳台,电视

好久没有给小伙伴们更新港澳台直播源列表了, 我把之前失效的直播源去除,又加了好些进去。直播源文件的制作方法在视频里有详细的介绍。视频里还介绍了用电脑软件播放测试直播源的方法。

直播源的表单和文件下载请到这里

编辑神器网址 https://columns.dengnz.com  


-~-~~-~~~-~~-~-

本频道旨在分享生活中各种小技巧, 如用小米盒子看国内视频, 如何使用KODI看电影等等. 点击进入我的频道: goo.gl/5tyxcf

🔷 订阅我的频道: goo.gl/KuF3bY
🔷 telegram电报群: t.me/fengsharegroup
🔷 我的博客: www.dengnz.com/blog
🔷 Facebook: www.facebook.com/fengnz

觉得我的视频对你帮助很大的话, 请我喝杯咖啡吧
微信赞赏码: goo.gl/uKoE8w
-~-~~-~~~-~~-~-

星期日, 九月 16, 2018

[Youtube]Telegram Bot 处理带参数的命令[第四集]

Tags:  
Telegram, 机器人,
 聊天机器人,机器人编程,机器人代码, Telegram代码,Telegram Bot, Telegram编程  

本视频是Telegram Bot 机器人编程系列的第四集。 本集介绍如何在一个主命令后增强参数来增强主命令的功能, 我们可以把一个主命令下再加二级命令,甚至三级命令。 这样,我们可以把一些相关的功能都放在同一个主命令底下处理。

编辑神器网址 https://columns.dengnz.com

相关的代码请
翻到下面

下期预告:
Telegram Bot 发送漂亮的消息,粗体,斜体,Markdown还有HTML[第五集]  


-~-~~-~~~-~~-~-

本频道旨在分享生活中各种小技巧, 如用小米盒子看国内视频, 如何使用KODI看电影等等. 点击进入我的频道: goo.gl/5tyxcf

🔷 订阅我的频道: goo.gl/KuF3bY
🔷 telegram电报群: t.me/fengsharegroup
🔷 我的博客: www.dengnz.com/blog
🔷 Facebook: www.facebook.com/fengnz

觉得我的视频对你帮助很大的话, 请我喝杯咖啡吧
微信赞赏码: goo.gl/uKoE8w
-~-~~-~~~-~~-~-

本视频中使用的代码:

[javascript]

function doPost(e){
  var dataFromTelegram = {
    "method": "post",
    "payload": e.postData.contents
  }
  var body = JSON.parse(e.postData.contents);
  

  var payload = preparePayload(body);
  var data = {
    "method": "post",
    "payload": payload
  }
  
  var dataToTelegram = {
    "method": "post",
    "payload": payload
  }

}
function preparePayload(body){
  var payload;

  body.message.text = body.message.text.toLowerCase();
  body.message.text = body.message.text.replace(/@temptestbot2/g, '');
  
  var paras = body.message.text.trim().split(" ");
  // remove empty strings
  paras = paras.filter(function(para){
    if (para){
      return true;
    }
  });
  
  if (body.message.text){
  
      payload = {
        "method": "sendMessage",
        "chat_id": body.message.chat.id,
        "text": "你好, 欢迎使用本机器人, 本机器人现在只认识颜色。",
      } 
      
      if(body.message.text.indexOf("/help") === 0){      
         payload.text = "你好, 欢迎使用本机器人, 本机器人现在只认识颜色。";
         return payload;
      }
      
      if(body.message.text.indexOf("/colors") === 0){   
         payload.text = "红\n黄\n蓝";        
         return payload;
      }
      
      if(body.message.text.indexOf("/list") === 0){ 
         if (paras[1]){
           switch (paras[1].toLowerCase()){
             case "people":  
               if (paras[2]){
                 if ("JS神技能".toLowerCase().indexOf(paras[2]) >= 0){
                   payload.text = "JS神技能 - https://www.youtube.com/channel/UC6tPP3jOTKgjqfDgqMsaG4g";
                 }
                 if ("悟空的日常".toLowerCase().indexOf(paras[2]) >= 0){
                   payload.text = "悟空的日常 - https://www.youtube.com/channel/UCii04BCvYIdQvshrdNDAcww";
                 }
                 if ("YuFeng Deng".toLowerCase().indexOf(paras[2]) >= 0){
                   payload.text = "YuFeng Deng - https://www.youtube.com/channel/UCG6xoef2xU86hnrCsS5m5Cw";
                 }
               } else {                 
                 payload.text = "JS神技能\n"
                   + "悟空的日常\n"
                   + "YuFeng Deng\n";        
                   return payload;
                }
               break;
             default:  
               payload.text = "红\n黄\n蓝";            
             break;
           }
                
           return payload;
         } else {         
           payload.text = "JS神技能\n"
             + "悟空的日常\n"
             + "YuFeng Deng\n";        
           return payload;
         }
      }
      

  
      payload = {
          "method": "sendMessage",
          "chat_id": body.message.chat.id,
          "text": body.message.text,
      } 
  }
  else if (body.message.sticker){
    payload = {
      "method": "sendSticker",
      "chat_id": body.message.chat.id,
      "sticker": body.message.sticker.file_id
    }
   }
  else if (body.message.photo){
    array = body.message.photo;
    text = array[1];
    payload = {
      "method": "sendPhoto",
      "chat_id": body.message.chat.id,
      "photo": text.file_id
    }
   }
    else {
    payload = {
      "method": "sendMessage",
      "chat_id": body.message.chat.id,
      "text": "Try other stuff"
    }
   }
  return payload
}
[/javascript]  

星期三, 九月 12, 2018

[软件开发] VSCode auto formatting change all single quotes to double quotes

Tags: VScode, Prettier

I recently switch to a new computer. After setting up my angular environment, I noticed that my single quotes are changed to single quotes after a auto indent operation.

This will result the TSLint to give errors. 

The problem is caused by the Prettier plugin. 




This is good plugin. So you don't have to uninstall it. Just add the following line into the user settings will resolve the problem.


"prettier.singleQuote": true,

It's also a good tool to transform all you double quotes to single quotes or vice versa.

星期二, 九月 11, 2018

[网络技术]Use docker mongo container to connect to remote mongo db

tags: mongodb, mongo shell, docker

If you would like to use mongo shell to connect to your mongodb but you don't bother to install mongo client. You can use following command if you have docker installed.

[bash]
docker run -it mongo mongo
mongodb_addr
.mlab.com:36577/mongo -u
username 
-p
password
 
[/bash]

[网络技术]Connect Local Mongo Express Docker container to MLab mongoDB

tags: mongodb, mongo express, docker, mlab,

The official docker mongo express document doesn't mention that you can connect to a remote mongo db. But it can.


Note that you cannot use your Mlab web credential for mongo db login. You have to create a db user after login to the web  portal.


Note that the following command is for windows. You will need to change ^ to \ and also add sudo in the beginning of the command.

docker run -it --rm  ^
    --name mongo-express  ^
    -p 8082:8081  ^
    -e ME_CONFIG_MONGODB_PORT="36577"  ^
    -e ME_CONFIG_MONGODB_SERVER="ds036577.mlab.com"       ^
    -e ME_CONFIG_MONGODB_AUTH_DATABASE="mongo" ^
    -e ME_CONFIG_MONGODB_AUTH_USERNAME="username" ^
    -e ME_CONFIG_MONGODB_AUTH_PASSWORD="password" ^
    -e ME_CONFIG_MONGODB_ENABLE_ADMIN="false" ^
    mongo-express 

Apart from restheart, Mlab also has a RESTful API

In some situation, you may not be able to use mongodb driver to connect mongo db database, for example, google apps script cannot connect mongodb directly. You can use restHeart as a middle man, but alternatively, you can use Mlab's RESTful API directly if you are using MLab's mongodb.

By default, the RESTful API of Mlab mongodb is disabled. You have to login to your user panel to activate it.






You can find more information here:


星期一, 九月 10, 2018

Google Oauth API Javascript ​Invalid cookiePolicy error

The following code works if it's served properly.

[html]
<script src="https://apis.google.com/js/api.js"></script>
<script>
  function authenticate() {
    return gapi.auth2.getAuthInstance()
        .then(function() { console.log("Sign-in successful"); },
              function(err) { console.error("Error signing in", err); });
  }
  function loadClient() {
        .then(function() { console.log("GAPI client loaded for API"); },
              function(err) { console.error("Error loading GAPI client for API", err); });
  }
  // Make sure the client is loaded and sign-in is complete before calling this method.
  function execute() {
    return gapi.client.youtubeAnalytics.reports.query({
      "ids": "channel==MINE",
      "startDate": "2017-01-01",
      "endDate": "2017-12-31",
      "metrics": "views,estimatedMinutesWatched,averageViewDuration,averageViewPercentage,subscribersGained",
      "dimensions": "day",
      "sort": "day"
    })
        .then(function(response) {
                // Handle the results here (response.result has the parsed body).
                console.log("Response", response);
              },
              function(err) { console.error("Execute error", err); });
  }
  gapi.load("client:auth2", function() {
    gapi.auth2.init({client_id: 'Your_Client_ID_Here'});
  });
</script>
<button onclick="authenticate().then(loadClient)">authorize and load</button>
<button onclick="execute()">execute</button>


[/html]



The two errors I encountered: 

Invalid cookiePolicy error:

This error happens when the html file is NOT served from a HTTP server but opened directly as a file.





N
ot a valid origin for the client:

This error happens when a origin is not added to the client id whitelist. And I have to use HTTPS instead of HTTP to make it work.






星期日, 九月 09, 2018

[Youtube]Telegram Bot 处理特定的命令[第三集]

Tags:  
Telegram, 机器人,
 聊天机器人,机器人编程,机器人代码, Telegram代码,Telegram Bot, Hello world, Telegram编程  



本视频是Telegram Bot 机器人编程系列的第三集。 本集介绍如何根据不同的命令回复不回的内容, 还会介绍怎么把机器人加的群中, 如何在群中使用机器人。 

相关的代码请
翻到下面

下期预告:
Telegram Bot 处理带参数的命令[第四集]  


-~-~~-~~~-~~-~-

本频道旨在分享生活中各种小技巧, 如用小米盒子看国内视频, 如何使用KODI看电影等等. 点击进入我的频道: goo.gl/5tyxcf

🔷 订阅我的频道: goo.gl/KuF3bY
🔷 telegram电报群: t.me/fengsharegroup
🔷 我的博客: www.dengnz.com/blog
🔷 Facebook: www.facebook.com/fengnz

觉得我的视频对你帮助很大的话, 请我喝杯咖啡吧
微信赞赏码: goo.gl/uKoE8w
-~-~~-~~~-~~-~-

本视频中使用的代码:

[javascript]

function doPost(e){
  var dataFromTelegram = {
    "method": "post",
    "payload": e.postData.contents
  }
  var body = JSON.parse(e.postData.contents);
  

  var payload = preparePayload(body);
  var data = {
    "method": "post",
    "payload": payload
  }
  
  var dataToTelegram = {
    "method": "post",
    "payload": payload
  }

}
function preparePayload(body){
  var payload;
  
  if (body.message.text){
  
      payload = {
        "method": "sendMessage",
        "chat_id": body.message.chat.id,
        "text": "你好, 欢迎使用本机器人, 本机器人现在只认识颜色。",
      } 
      
      if(body.message.text.indexOf("/help") === 0){      
         payload.text = "你好, 欢迎使用本机器人, 本机器人现在只认识颜色。";
         return payload;
      }
      
      if(body.message.text.indexOf("/colors") === 0){   
         payload.text = "红\n黄\n蓝";        
         return payload;
      }
  
      payload = {
          "method": "sendMessage",
          "chat_id": body.message.chat.id,
          "text": body.message.text,
      } 
  }
  else if (body.message.sticker){
    payload = {
      "method": "sendSticker",
      "chat_id": body.message.chat.id,
      "sticker": body.message.sticker.file_id
    }
   }
  else if (body.message.photo){
    array = body.message.photo;
    text = array[1];
    payload = {
      "method": "sendPhoto",
      "chat_id": body.message.chat.id,
      "photo": text.file_id
    }
   }
    else {
    payload = {
      "method": "sendMessage",
      "chat_id": body.message.chat.id,
      "text": "Try other stuff"
    }
   }
  return payload
}

[/javascript]  

星期六, 九月 08, 2018

[网络技术] Fix OBS Streaming black screen display on surfacebook2

To fix the OBS black screen problem on surfacebook2, I have to use integrated graph processor to run OBS.

Apply the following change as screenshot then restart OBS to resolve the problem.




星期四, 九月 06, 2018

[网络技术]解决 git push 时 error: pack-objects died of signal 9

Tags: git, git push

在Azure 的VM上用git push 的时候碰到下面这个问题

error: pack-objects died of signal 9


解决方法是
git config --global pack.windowMemory "32m"

原理嘛。。。我也不懂


--window-memory=<n>

This option provides an additional limit on top of --window; the window size will dynamically scale down so as to not take up more than <n> bytes in memory. This is useful in repositories with a mix of large and small objects to not run out of memory with a large window, but still be able to take advantage of the large window for the smaller objects. The size can be suffixed with "k", "m", or "g". --window-memory=0 makes memory usage unlimited. The default is taken from the pack.windowMemoryconfiguration variable.



[网络技术]如何改Mysql 的密码

Tags: Mysql, Docker

我在Mysql 服务器是跑在一个Docker容器里面的, 外网无法访问,只有在同一个Docker 网络的网站可以访问它, 所以我之前就懒得改密码。 默认的用户名和密码都是root. 

今天我要导出数据库, 所以临时用MYPHPADMIN来访问它, 但这样, 别人就可以通过我的MyPhpAdmin访问到它, 虽然我会很快关掉MyPhpAdmin, 但我还是觉得应该把密码改一下。 

现在先来说一个错误的方法

[bash]
sudo docker exec -it mysql2 mysql -uroot -p
ALTER USER 'root'@'localhost' IDENTIFIED BY 'Newpassword';
[/bash]

为什么说上面是个错误的方法呢, 因为它改变的虽然是root 的密码, 但是却不是网站用的那个,而是mysql 这个命令使用的密码。 当你用以上的方法改完密码后, 你下次再用 mysql -uroot -p 的时候就要用新密码登录了, 但是这样并不会改变网站连接MYSQL的密码。

正确的方法如下, 你要把 @'localhost' 去掉, 这样才会改变连接数据库的密码,而不是运行MYSQL这个命令时候的密码。 

[bash]
sudo docker exec -it mysql2 mysql -uroot -p
ALTER USER 'root' IDENTIFIED BY 'Newpassword';
[/bash]

创建一个Azure虚拟机,同时还有哪些资源被创建?

当你在AZURE上创建一个虚拟机的时候, 并不是当当只创建了虚拟机一个资源,而是有好几个相关资源被一起创建。

直接上图




[Youtube] Telegram Bot 第一个回声机器人 - 你是汤姆猫吧[第二集]

Tags: 
Telegram, 机器人,
聊天机器人, 回声机器人,汤姆猫机器人,机器人编程,机器人代码, Telegram代码,Telegram Bot, Hello world, Telegram编程


本视频是Telegram Bot 机器人编程系列的第二集。 本集介绍如何用简单不到60行的代码实现一个汤姆猫机器人, 就是你说什么, 它就说什么。 支持文字, 表情还有图片。 

相关的代码请
翻到下面

下期预告:

Telegram Bot 处理特定的命令[第三集]  

-~-~~-~~~-~~-~-

本频道旨在分享生活中各种小技巧, 如用小米盒子看国内视频, 如何使用KODI看电影等等. 点击进入我的频道: goo.gl/5tyxcf

🔷 订阅我的频道: goo.gl/KuF3bY
🔷 telegram电报群: t.me/fengsharegroup
🔷 我的博客: www.dengnz.com/blog

觉得我的视频对你帮助很大的话, 请我喝杯咖啡吧
微信赞赏码: goo.gl/uKoE8w
-~-~~-~~~-~~-~-

本视频中使用的代码:

[javascript]

function doPost(e){
  var dataFromTelegram = {
    "method": "post",
    "payload": e.postData.contents
  }
  var body = JSON.parse(e.postData.contents);
  

  var payload = preparePayload(body);
  var data = {
    "method": "post",
    "payload": payload
  }
  
  var dataToTelegram = {
    "method": "post",
    "payload": payload
  }

}
function preparePayload(body){
  var payload;
  
  if (body.message.text){
      payload = {
          "method": "sendMessage",
          "chat_id": body.message.chat.id,
          "text": body.message.text,
      } 
  }
  else if (body.message.sticker){
    payload = {
      "method": "sendSticker",
      "chat_id": body.message.chat.id,
      "sticker": body.message.sticker.file_id
    }
   }
  else if (body.message.photo){
    array = body.message.photo;
    text = array[1];
    payload = {
      "method": "sendPhoto",
      "chat_id": body.message.chat.id,
      "photo": text.file_id
    }
   }
    else {
    payload = {
      "method": "sendMessage",
      "chat_id": body.message.chat.id,
      "text": "Try other stuff"
    }
   }
  return payload
}

[/javascript]

星期日, 九月 02, 2018

Telegram Bot 回声机器人Google Apps Script 代码

以下代码是此Youtube视频中用到的示例:



[javascript]
function doPost(e){
  var dataFromTelegram = {
    "method": "post",
    "payload": e.postData.contents
  }
  var body = JSON.parse(e.postData.contents);
  

  var payload = preparePayload(body);
  var data = {
    "method": "post",
    "payload": payload
  }
  
  var dataToTelegram = {
    "method": "post",
    "payload": payload
  }

}
function preparePayload(body){
  var payload;
  
  if (body.message.text){
      payload = {
          "method": "sendMessage",
          "chat_id": body.message.chat.id,
          "text": body.message.text,
      } 
  }
  else if (body.message.sticker){
    payload = {
      "method": "sendSticker",
      "chat_id": body.message.chat.id,
      "sticker": body.message.sticker.file_id
    }
   }
  else if (body.message.photo){
    array = body.message.photo;
    text = array[1];
    payload = {
      "method": "sendPhoto",
      "chat_id": body.message.chat.id,
      "photo": text.file_id
    }
   }
    else {
    payload = {
      "method": "sendMessage",
      "chat_id": body.message.chat.id,
      "text": "Try other stuff"
    }
   }
  return payload
}

[/javascript]

其它博客地址

此博客的同步博客地址: http://fengnz.wordpress.com
这里进入我的MSN SPACE.