WebRTC detect connection type

WebRTC detect connection type

Test on Chromium 87 and 90

Detecting the connection type of webrtc, p2p or relay.

// Listen for connectionstatechange on the local RTCPeerConnection
peerConnection.addEventListener('connectionstatechange', event => {
    console.info("connectionstatech[......]

>> 阅读全文...

资源管理器重启后 electron 隐藏任务栏图标失效问题的解决方案

1. 问题现象

创建一个electron 窗口,设置skipTaskbar为true,即可隐藏应用的任务栏图标。

const {app, BrowserWindow} = require('electron')

function createWindow () {
  const mainWindow = new BrowserWindow({
    skipTaskbar: true
  })
  mainWindow.loadURL('https://www.baidu.com')
}

app.whenReady().then(() =>[......]

>> 阅读全文...

LeetCode-206-单链表逆序

问题描述

LeetCode – Reverse Linked List

将单链表逆序

算法1 插入法

性能:
Runtime: 4 ms, faster than 89.98% of C online submissions for Reverse Linked List.

算法思路:
类比于插入排序,两个指针 first 和 last 分别指向已经逆序好的开头和结尾,即 first->x->x->last->NULL

  1. 开始时,first和last都指向head。
  2. 然后从 head->next 开始,遍历链表,将每个节点 p 插入到(first,last)的开头[……]

    >> 阅读全文…

LeetCode-26-已排序数组去重

问题描述

LeetCode – Remove Duplicates from Sorted Array

对已经排好序的数组,去除其中重复的元素,并返回去重后的长度。如[1,2,2,3,3],去重后为[1,2,3] ,去重后长度为3

算法1

两个指针,前者(p)记录当前去重后的最后一个元素,后者(i)不断遍历数组,寻找新元素。

int removeDuplicates(int* nums, int numsSize){
    if(numsSize == 0) return 0;

    int p = 0; // 指向当前去重后数组的最后一个元素,初始为0位置

    for(int i[......]

>> 阅读全文...

算法-螺旋队列

问题

21  22  …
20  7   8   9   10
19  6   1   2   11
18  5   4   3   12
17  16  15  14  13

看清以上数字排列的规律,设 1 点的坐标是 (0,0),x 方向向右为正,y 方向向下为正。例如,7 的坐标为 (-1,-1),2 的坐标为 (0,1),3 的坐标为 (1,1)。编程实现输入任意一点坐标 (x,y),输出所对应的数字。

分析

以(0,0) 即 数字 1 为中心,螺旋的形式如图

圆心为第0圈,往外为第1圈,再往外为第2圈,依次类推

每一圈数字的右上角的点p, 它的数值是可以推导出来的[……]

>> 阅读全文…

mac 系统升级后,gcc/clang 提示 ld:malformed file 错误

问题

升级了系统到 macOS Mojave 10.14.4,使用gcc 和 clang 编译时,总是提示如下错误

➜ tmp gcc main.c
ld: malformed file
/Library/Developer/CommandLineTools/SDKs/MacOSX10.14.sdk/usr/lib/libSystem.tbd:4:18: error: unknown enumerated scalar
platform: zippered
^~~~~~~~
file ‘/Library/Developer/CommandLineTools/SDKs/MacOSX10.14[……]

>> 阅读全文…

生活的单调线

最能还原一段心情的,莫过于旧事的文字和熟悉的旋律

无意翻看到以前的文字,旧时光与心情瞬息间涌出,除了周围的人事,仿佛一下子回到那些时刻。

等醒悟过来,明白只能偶然的重入,而永远不能重回,另起几分惆怅。

感叹没有记录的生活,只是一次单调的往前不断延伸的直线,烦于生计的蒙眼前行。而近年莫不如此,或许皆因安于近态,倦于思考。

耳边在播放小刚的老歌,就这样暂时忘了一切吧[……]

>> 阅读全文…

C++ 智能指针的实现

1. shared_ptr 的特性

shared_ptr内部维护一个引用计数,当创建、copy、销毁时,引用计数都会变化

(1) 拷贝构造函数 p(q),会递增q的引用,p和q指向同一个对象

shared_ptr<string> q = make_shared<string>("smartptr");
shared_ptr<string> p(q); //递增q的引用计数,p和q指向同一个对象
std::cout << "p use_count=" << p.use_count() <&l[......]

>> 阅读全文...

CAS 的跨平台实现方案 以及 基于CAS 的无锁多线程安全日志类

CAS

CAS, compare-and-swap, 原子的比较和设置变量值。

#include <stdio.h>

#if defined(__linux__) || defined(__unix__)
    #define CAS32(ptr, val_old, val_new)({ char ret; __asm__ __volatile__("lock; cmpxchgl %2,%0; setz %1": "+m"(*ptr), "=q"(ret): "r"(val_new),"[......]

>> 阅读全文...

protobuf c++ 笔记

protobuf的github 源码地址为 https://github.com/google/protobuf

本次使用的环境为ubuntu,参照官方教程

1. 编译源码

sudo apt-get install autoconf automake libtool curl #安装工具
git clone https://github.com/google/protobuf #下载源码

进入源码目录,打开autogen.sh脚本,找到下面这行代码,注释掉该行。(因为google被墙,会连接超时)

curl $curlopts -O https://googlemock.googlecode.[......]

>> 阅读全文...

c++ bind1st 和 bind2nd的用法

std::bind1st 和 std::bind2nd将二元函数转换为一元函数,具体用法参加下面的代码。

代码介绍了两种使用方式,第一种是使用std::less和std::greater,第二种是使用自定义的仿函数。

#include <iostream>
#include <vector>
#include <string>
#include <iterator>
#include <algorithm>
#include <functional>

/**  
* std::bind1st  std::bind2nd[......]

>> 阅读全文...

日志函数

一个简单的日志函数示例,使用宏实现日志的打印和显示。

不足:没有考虑多线程的文件操作问题;宏较长,使用宏会使得代码体积膨胀。

#include <stdio.h>
#include <time.h>
#include <string>

#define __MODULE__ "main"

std::string get_time()
{
    time_t t = time(0);
    char tmp[64];
    strftime(tmp, sizeof(tmp), "%Y/%m/%d %X", loc[......]

>> 阅读全文...

libjpeg的交叉编译以及jpeg图片的缩放(缩略图)

libjpeg 库的交叉编译

libjpeg 库主要用于 jpeg 格式图片的编解码,其交叉编译过程如下

1. 下载源码

从官方网站http://www.ijg.org/files/ 下载libjpeg库的源码,本次编译过程使用的是jpegsrc.v9a.tar.gz

2. 解压源码

# 2.1 切换到下载目录,执行
tar -xzvf jpegsrc.v9a.tar.gz

# 2.2 切换到源码目录
cd jpeg-9a/ 

3. 交叉编译

# 3.1 设置交叉编译器的环境变量
export CC=/home/jarvischu/arm-linux-uclibcgnueabi-gcc

#[......]

>> 阅读全文...

这是人间好时节

春有百花秋有月

夏有凉风冬有雪

若无闲事挂心头

便是人间好时节

晚上在西溪跑步的时候,走在一个荷花池中的栈道时,停了下来,两旁是茂密的芦苇草,芦苇长的很旺盛,高高的超过了栈道,向着栈道压了下来。夜色已深,抬头那一轮近圆月挂在不远的天际,一颗星星也没有,月亮却显得那么明亮,明天就是十五,明个它就要圆满了吧。荷花池上凉风不断,满池的芦苇在月色中微微的摇荡,却让周围显现的愈加的静谧。这么晚了,夜跑的人们也大多回程了,路上都已是三三两两零零落落的,何况这偏离主道的荷花池上的隐秘的栈道,若不是那晚的偶然兴起,我亦不会发现还有这样一个安静少人的地方。凉风中夹杂着很清凉的味道,我想这是池水和水草混和[……]

>> 阅读全文…

晚点,但不会遗漏

这是我今晚和一个朋友时说的,本意是安慰对方,可却把自己的情绪陷进去了,沉静了好久。

“我相信这种种的安排都是为了更好的生活 因为命运知道怎么样的生活才是适合我们的 他给我们安排了这些 我们只是没有理解 只是一厢情愿的沉浸在自己的小情绪中 不懂得命运的安排而已
还不时的埋怨他 其实我们错了
等到所有结局到来的时候 才会明白
这一番安排 是多么的精心 多么的理所当然
而自己当时的各种虐心所为是多么愚昧无知
幸福会晚点 但从不会遗漏
调整好自己的生活,期待,时间会带来我们真正需要的

也许真正走出来的模样,是明白,是即便回望,更多的也是感激和感悟,还有对曾经自己那段年少痴狂的[……]

>> 阅读全文…