Skip to content

Instantly share code, notes, and snippets.

View wpaladins's full-sized avatar
🎯
focusing

Sheng wpaladins

🎯
focusing
  • Peking University
  • BeiJing, China
View GitHub Profile
@wpaladins
wpaladins / main.go
Created April 23, 2022 03:15 — forked from metafeather/main.go
Get goroutine id for debugging
# ref: https://play.golang.org/p/OeEmT_CXyO
package main
import (
"fmt"
"runtime"
"strconv"
"strings"
"sync"
)
@wpaladins
wpaladins / dslogs
Created April 22, 2022 07:20 — forked from JJGO/dslogs
Script for pretty printing logs of MIT 6.824 labs
#!/usr/bin/env python
import sys
import shutil
from typing import Optional, List, Tuple, Dict
import typer
from rich import print
from rich.columns import Columns
from rich.console import Console
from rich.traceback import install
@wpaladins
wpaladins / dstest
Created April 22, 2022 07:20 — forked from JJGO/dstest
Utility for running MIT 6.824 lab test in parallel and saving failed logs
#!/usr/bin/env python
import itertools
import math
import signal
import subprocess
import tempfile
import shutil
import time
import os
@wpaladins
wpaladins / smart-caps-lock.md
Created March 30, 2022 03:06 — forked from tanyuan/smart-caps-lock.md
Smart Caps Lock: Remap Caps Lock to Control AND Escape

Smart Caps Lock: Remap to Control AND Escape (Linux, Mac, Windows)

Caps Lock 變成智慧的 Control 以及 Escape

  • 單獨輕按一下就是 Escape
  • 若按下時同時按著其他鍵,就會是 Control

這應該是 Vim 和 Emacs 的最佳解了!(Emacs? Bash 的快捷鍵就是 Emacs 系列的)

  • Send Escape if you tap Caps Lock alone.
@wpaladins
wpaladins / libuv-vs-libev.md
Created December 20, 2021 02:18 — forked from robbie-cao/libuv-vs-libev.md
libuv vs libev

libuv 和 libev ,两个名字相当相近的 I/O Library,最近有幸用两个 Library 都写了一些东西,下面就来说一说我本人对两者共同与不同点的主观表述。

高性能网络编程这个话题已经被讨论烂了。异步,异步,还是异步。不管是 epoll 也好,kqueue 也罢,总是免不了异步这个话题。

libuv是异步的,libev是同步的多路IO复用。

libev 是系统I/O复用的简单封装,基本上来说,它解决了 epoll ,kqueuq 与 select 之间 API 不同的问题。保证使用 livev 的 API 编写出的程序可以在大多数 *nix 平台上运行。但是 libev 的缺点也是显而易见,由于基本只是封装了 Event Library,用起来有诸多不便。比如 accept(3) 连接以后需要手动 setnonblocking。从 socket 读写时需要检测 EAGAIN 、EWOULDBLOCK 和 EINTER 。这也是大多数人认为异步程序难写的根本原因。

libuv 则显得更为高层。libuv 是 joyent 给 Node 做的一套 I/O Library 。而这也导致了 libuv 最大的特点就是处处回调。基本上只要有可能阻塞的地方,libuv 都使用回调处理。这样做实际上大大减轻了程序员的工作量。因为当回调被 call 的时候,libuv 保证你有事可做,这样 EAGAIN 和 EWOULDBLOCK 之类的 handle 就不是程序员的工作了,libuv 会默默的帮你搞定。

// This function is called when the websocket connection is established
void MediaManagerInterface::OnConnected()
{
// _signaling is the object of sending signaling through websocket
_signaling->AsyncRequest("getRouterRtpCapabilities", nlohmann::json(), [this](nlohmann::json jMsg) {
createFactory(); // Create webrtc threads, etc.
mediasoupclient::PeerConnection::Options op;
op.factory = _peerConnectionFactory;
if(!_device->IsLoaded()) {
_device->Load(jMsg["data"], &op);
v=0
o=- 7423721318464670085 4 IN IP4 127.0.0.1
s=-
t=0 0
a=group:BUNDLE 0 1 2
a=msid-semantic: WMS 0
m=audio 49796 UDP/TLS/RTP/SAVPF 111 103 104 9 102 0 8 106 105 13 110 112 113 126
c=IN IP4 192.168.1.194
a=rtcp:9 IN IP4 0.0.0.0
a=candidate:836222334 1 udp 2122260223 192.168.1.194 49796 typ host generation 0 network-id 1 network-cost 10
string longestPalindrome(string s) {
int n = s.size(), jT = 0, kT = 0, maxL = 0;
for (int i = 0; i < n; ++i) {
int j = i, k = i;
while (j >= 0 && k < n) {
if (s[j] == s[k]) {
j--;
k++;
}
else {