V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
V2EX  ›  xylophone21  ›  全部回复第 1 页 / 共 21 页
回复总数  402
1  2  3  4  5  6  7  8  9  10 ... 21  
7 小时 36 分钟前
回复了 qin20 创建的主题 FFmpeg 程序 FFmpeg 准确切割视频问题,请大神指教?
copy 模式下,开头不是关键帧怎么播放呢?

切两次呗
13 天前
回复了 seakingii 创建的主题 Linux 是否有这样的定时任务开源软件?
曲线一下, Jenkins, Github action 似乎都可以
一看你的客户是谁,二看你的业务这么开展.

@fkdog 的例子就很好, 你做支付的,经常性的接一个新的支付(夸张了)就是你的业务, 对接的这个人就是你的客户. 让他们每次干活的时候不需要修改你的代码.

但你的代码里, 假设原来用的是 mysql,你要切到 postgresql, 当然可以改你的代码.

再深入一步, 你当然也可在设计之初,就想好, 如果后面要改数据库, 我是不是可以不修改, 留好扩展. 但这不是你的业务, 想多了就是过度设计了. 除非你做这个支付系统的目的, 就是为了测试各种不同的数据库系统. 或者说以及有现成的轮子了, 用起来几乎没有代价 (比如这个换数据库的例子,从某种意义上来说,就是有轮子的情况)

再进一步, 换数据库虽然不是你的业务, 但他其实是框架的业务, 比如对 Spring Data JPA 来说, 他的一个目标就是不论他的用户用什么数据库, 核心流程都差不多. 那么换数据库就是他的业务.
17 天前
回复了 dzdh 创建的主题 程序员 现如今的开源代码请谨慎使用
其实一直不理解,像这种'xx 系统'这种业务层面的开源,其抽象程度真的能满足真实业务场景需求吗? 如果要改, 不是比自己重写还难受?
另外,这种改装的,如果原开关关闭以后,用 WiFi 还能不能打开最好问一下,因为原开关是物理带状态的, 如果还能打开物理状态会错乱,所以样式和功能,可能只能二选一
https://item.taobao.com/item.htm?spm=a1z10.5-c-s.w4002-22454015630.31.4619339fnY862v&id=596771503698

之前买过他们家的开关用起来还行, 改造模块也也,但没试过
35 天前
回复了 lazy21 创建的主题 推广 让后端开发写个 API 文档就有那么难吗?
为什么 API 文档要后端写?
只有代码片段,没有背景,适用范围,总结,注意事项,心得,流程吗?
40 天前
回复了 cxp 创建的主题 问与答 程序员如何比较规范的整理资料
》》但是苦于不同平台的不同代码,记录的时候总会产生分支

这个是你代码没有把相同的流程统一,而是 DRY 了,文档是无从解决的
当然,这不是你的问题,你们公司选择了直接使用 SDK,在上面修改。而不是自己实现 SDK,把硬件差异抽象出来。

如果一定要解决,我建议是整理协议这些更稳固的东西,而不是整理 SDK,你正在整理的 SDK,可能就是别人抱怨的 x 山
如果一定要整理,那就只能忍着,想想你在整理 x 山就好了
可以看一看钉钉是怎么防虚拟定位打卡的
传统的
1. 客户端各种加密,防止非官方 App
2.客户端各种检测,防止 root 、虚拟机等模拟 GPS
以及比较狠的
1. [传说] 发现问题不报错,但是在后台标记,等着管理员找你
69 天前
回复了 FATEQiang 创建的主题 Android Android 单元测试如何规范
@ahao99 然而在 Android 端,一般来说业务并不是很多?
用 golang 吧
score 越大,可能性越高

```c
static int mov_probe(const AVProbeData *p)
{
int64_t offset;
uint32_t tag;
int score = 0;
int moov_offset = -1;

/* check file header */
offset = 0;
for (;;) {
int64_t size;
int minsize = 8;
/* ignore invalid offset */
if ((offset + 8ULL) > (unsigned int)p->buf_size)
break;
size = AV_RB32(p->buf + offset);
if (size == 1 && offset + 16 <= (unsigned int)p->buf_size) {
size = AV_RB64(p->buf+offset + 8);
minsize = 16;
} else if (size == 0) {
size = p->buf_size - offset;
}
if (size < minsize) {
offset += 4;
continue;
}
tag = AV_RL32(p->buf + offset + 4);
switch(tag) {
/* check for obvious tags */
case MKTAG('m','o','o','v'):
moov_offset = offset + 4;
case MKTAG('m','d','a','t'):
case MKTAG('p','n','o','t'): /* detect movs with preview pics like ew.mov and april.mov */
case MKTAG('u','d','t','a'): /* Packet Video PVAuthor adds this and a lot of more junk */
case MKTAG('f','t','y','p'):
if (tag == MKTAG('f','t','y','p') &&
( AV_RL32(p->buf + offset + 8) == MKTAG('j','p','2',' ')
|| AV_RL32(p->buf + offset + 8) == MKTAG('j','p','x',' ')
)) {
score = FFMAX(score, 5);
} else {
score = AVPROBE_SCORE_MAX;
}
break;
/* those are more common words, so rate then a bit less */
case MKTAG('e','d','i','w'): /* xdcam files have reverted first tags */
case MKTAG('w','i','d','e'):
case MKTAG('f','r','e','e'):
case MKTAG('j','u','n','k'):
case MKTAG('p','i','c','t'):
score = FFMAX(score, AVPROBE_SCORE_MAX - 5);
break;
case MKTAG(0x82,0x82,0x7f,0x7d):
case MKTAG('s','k','i','p'):
case MKTAG('u','u','i','d'):
case MKTAG('p','r','f','l'):
/* if we only find those cause probedata is too small at least rate them */
score = FFMAX(score, AVPROBE_SCORE_EXTENSION);
break;
}
if (size > INT64_MAX - offset)
break;
offset += size;
}
if (score > AVPROBE_SCORE_MAX - 50 && moov_offset != -1) {
/* moov atom in the header - we should make sure that this is not a
* MOV-packed MPEG-PS */
offset = moov_offset;

while (offset < (p->buf_size - 16)) { /* Sufficient space */
/* We found an actual hdlr atom */
if (AV_RL32(p->buf + offset ) == MKTAG('h','d','l','r') &&
AV_RL32(p->buf + offset + 8) == MKTAG('m','h','l','r') &&
AV_RL32(p->buf + offset + 12) == MKTAG('M','P','E','G')) {
av_log(NULL, AV_LOG_WARNING, "Found media data tag MPEG indicating this is a MOV-packed MPEG-PS.\n");
/* We found a media handler reference atom describing an
* MPEG-PS-in-MOV, return a
* low score to force expanding the probe window until
* mpegps_probe finds what it needs */
return 5;
} else {
/* Keep looking */
offset += 2;
}
}
}

return score;
}
```
ffmpeg
81 天前
回复了 KageroY 创建的主题 C# VScode 配置 c 语言环境求助
是的,实际工作中很少看到有人用 codeblocks
82 天前
回复了 KageroY 创建的主题 C# VScode 配置 c 语言环境求助
C/C++主流的还是 gcc/clang + cmake ( gn 其实也很不错,不过还稍微小众一点) + gdb/lldb,这些搞明白后再配 vscode 就很好理解,建议用 clangd + compile_commands.json + CodeLLDB.

codeblocks 哪一套,除非是即学即抛,否则后面还是要转到前面去的;之于 VisualStudio,C#它不香吗
92 天前
回复了 icemanpro 创建的主题 C++ 如何将 list 的值传给函数的可变参数?
依稀记得多年前是用汇编搞定的
97 天前
回复了 nikanon 创建的主题 汽车 车险改革之后,买保险比之前更贵了?
新车损险 ≈ (旧车损保 + 旧抢盗险 + 旧自然险 + 旧发动机涉水险 + 旧玻璃险 + 旧找不到第三方特约 + 旧不计免赔) * 小折扣

如果你之前只买旧车损保 + 旧不计免赔 ==> 涨价
如果你之前是这些全买 ===》 便宜了

===》 多听话,少思考,从小事做起
99 天前
回复了 20ng21 创建的主题 SSL 自签名 SSL,浏览器提示不安全
又想到一个方案:浏览器总是打开云上的一个页面,用类似 https://github.com/szimek/sharedrop 的方法找到局域网上的所有设备,进入设备时仍然访问云端页面,这个页面通过 WebRTC 与设备 P2P 传输数据,再交给前端渲染。

sharedrop 的实现原理要看一下他的代码,关键是怎么猜测两个端在同一个局域网,不过对你的场景来说,假设所有的设备都在一个局域网,问题应该也不大,联不通的显示一下就好了。
99 天前
回复了 20ng21 创建的主题 SSL 自签名 SSL,浏览器提示不安全
@xylophone21

想复杂了,简化一下:
1. 每个设备上线时向云发送指令,让云帮忙分配一个域名,指向设备的内网地址(类似 DDNS ),下线是回收
2. 用户总是打开你云端的页面,列出所有在线的设备,然后用临时域名跳转,访问设备
1  2  3  4  5  6  7  8  9  10 ... 21  
关于   ·   帮助文档   ·   API   ·   FAQ   ·   我们的愿景   ·   广告投放   ·   感谢   ·   实用小工具   ·   2778 人在线   最高记录 5497   ·     Select Language
创意工作者们的社区
World is powered by solitude
VERSION: 3.9.8.5 · 41ms · UTC 11:41 · PVG 19:41 · LAX 03:41 · JFK 06:41
♥ Do have faith in what you're doing.