Wednesday, July 7, 2021

V2EX - 技术

V2EX - 技术


技术老大对开发闭源了基础库,打算自己写一套代替

Posted: 07 Jul 2021 04:04 AM PDT

公司两个后端项目公用一个基础库,技术老大从之前项目中抽出来的,然后闭源了(他还在公司)。。。只给 jar 包,没有代码,也没有文档,现在开发起来很 tm 蛋疼,像吃了苍蝇一样。

具体内容包括数据库访问,授权验证,http 服务器,程序启动和销毁等等,想改点东西都得通过他,比如想加个 log,记一下所有的 http 访问记录,只有在他的库里才能改。

这不只是一个技术问题,涉及到公司和技术老大之间的一堆事。

现在小弟在考虑通过技术手段解决,自己写一遍,尽量少动业务,去掉他的库,在考虑 Spring,但是没有相关的经验,各位有没有推荐的 spring 相关项目可以参考一下?或者有没有类似的经历交流交流?

这个库大概包括:

  1. 数据库访问、查询
  2. http 服务器
  3. 授权验证
  4. 用户系统
  5. tcp 模块
  6. 一些自己封装的工具函数,处理字符串、文件等(基本就是 Apache commons 再套一层)

公司现在的技术栈是 kotlin,mysql,jdbc, http 服务器用的 javalin,没上大框架。他的库不知道多少代码,估计大概一万行左右

2021 安卓最强保活

Posted: 07 Jul 2021 03:57 AM PDT

有没有需要的?

有什么基于短数字的唯一 id 生成器的实现?

Posted: 07 Jul 2021 03:56 AM PDT

我目前看到的雪花算法生成的 id 基本都是长整型,有没有短数字唯一 id 生成,直接生成 int,比如 b 站 av 号之类的。既然是短数字的唯一 id 生成,那就不会应用到类似"订单 id 生成"等诸如 1 秒内生成几百几千个 id 的场景中,

希望能在服务端内部生成,不用必须依赖数据库来生成 id,能控制长度(比如长度固定,或者数字长度不低于几位不高于几位之类的)

有没有序无所谓,当然如果能选择无序模式或有序模式的话,那最好不过了。

那么有哪些实现的呢,或者哪些工具类有这些功能了

F**K,数据库被黑客删光了

Posted: 07 Jul 2021 03:56 AM PDT

删的啥都没了,建了一个 README 表。里面写了句话:

以下数据库已被删除:**** 。 我们有一个完整的备份。 要恢复它,您必须将 0.018 比特币( BTC )支付给我们的比特币地址 bc1qs82lvzrrag7aqpnyme4njv32qquky0slrclftr 。 有关说明,请通过 yang21@tutanota.com 通过电子邮件联系我们。 任何与付款无关的邮件都将被忽略!

反思: 1 、不要开放 3306 端口公开访问 2 、密码设置的要复杂

Linux 下程序开发的正确姿势是什么?想尽量接近 Windows 下 Visual Studio 和 TortoiseGit 这类工具的体验

Posted: 07 Jul 2021 03:53 AM PDT

如题,以前一直是在 Windows 平台上开发。
现在有项目需要在 Linux 下进行编译和调试,想了解下正确姿势是什么。

网上搜索看到的一些回答感觉比较偏执,如果在 Linux 中开发时,图形界面程序就是都是垃圾我也就认了,老老实实地去熟悉命令行操作。如果有更方便的、能提高效率的方式,还是很想知道的。

举几个具体操作的例子,可能更清楚些:

1. 在 Visual Studio 中编译之后的警告和错误信息会统一在问题面板中列出,双击就能定位到源码中的位置。
在 Linux 中,一般是怎么做的?直接在终端中看输出的错误信息吗?还是配置一下 VS Code 之类的工具来调用编译,并且把结果按格式显示

2. 在 Linux 中一般怎么调试?如果没用 IDE 的话,就只能直接命令行 gdb 吗?
用 IDE 的话,有什么用着方便可靠的吗?

3. Windows 下我用 TortoiseGit, Linux 下图形界面的 Git 客户端有没有好用的?
SmartGit 还没试,因为定价太高了。GitKraken 刚试过,作为一个订阅费每月 $5 的软件,操作居然会卡,也远到不了 TortoiseGit 的水平

DNSPod Public DNS 专业版出来了

Posted: 07 Jul 2021 03:49 AM PDT

https://dns.pub

选择专业版,登陆你的 DNSPod 账号,创建一个新配置

然后,感受下?

Windows 更换系统字体哪个更好看

Posted: 07 Jul 2021 03:49 AM PDT

[![RHtjBj.png]( https://z3.ax1x.com/2021/07/07/RHtjBj.png)]( https://imgtu.com/i/RHtjBj)
苹果电脑的字体确实美观看起来丝滑般的清澈,我也想在 Windows 更改系统字体为苹果方或者其他字体,各位大佬有测试过吗 那种字体更加适合 windows 系统字体

是插本还是接着工作?

Posted: 07 Jul 2021 03:45 AM PDT

大专狗一枚,今年 7 月份毕业了,去年开始出来实习
第一份 java 实习工 3K
第二份被其他公司看上了,直接走入职流程第二天就上班了,目前是 12K+
地点在深圳,公司的同事大都是本科,有时候自己会感觉到很不自在
主要是钱给得太多了,但为了后路着想还是想升本,每天上班我都在矛盾中度过

Java 有没有轻量级的服务注册中心,现在搜了一圈下来就看到阿里的有个 nacos,如果自己写的话 是不是更好

Posted: 07 Jul 2021 03:38 AM PDT

背景

目前只是简单的几个按业务不同,单独以域名的方式分割了两三个服务,每个服务三四台机器,都是 spring boot 单机版

需求

现在有两个服务可能有相互通信的必要,因为要更新应用内部的一些信息,所以需要按 IP 加端口的形式去通知。比如说后台更新了分组,需要通知到特征计算各个机器上去。目前就是简单的特征项目启动的时候上报自己的 IP+节点,然后后台挨个去通知。

但是为了响应统一号召,我们全面再切 k8s,所以就不像之前的物理机了,IP 都是固定,机器数量也可能变得动态,所以可能需要一个简单的服务注册中心。并且实时的判断特征服务的节点是否还活着

有没有简单版的注册中心

目前有个想法是直接用公司现有基于 etcd 的,我自己做个轻量级常驻的 watch 就行了

题外话

阿里的 nacos 不知道实际用起来轻量不轻量,但是福报厂的东西有些质量很一般,还有些没法自定义的东西,或者宣传吹的很牛逼,实际跑起来 250 。

SDK 开发中,模块间的通信问题

Posted: 07 Jul 2021 03:22 AM PDT

Context:

  1. 去年做的一个 Android SDK 是多模块的形式开发的,除了主模块,宿主可以按需依赖其他子模块。
  2. 问题是, 因为功能要求,需要在 SDK 初始化时将每个子模块都注册到主模块 manager 中。但主模块是不知道有哪些子 module 存在的。

如果是一般的 App 开发,借助 ARouter 可以实现类似的功能,但因为我是 SDK 开发,所以尽量不依赖外部 SDK 。

解决方案:

  1. proguard 保留每个模块的入口类名,让宿主 app 在初始化时创建子模块入口对象。 弊端是主动暴露了 SDK 更多信息,入口类必须保留名称
  2. 方案 1 的变体, 既然保留了类名,那么完全可以在主模块中通过反射获取 Class 对象并创建实例。弊端是入口类必须保留名称
  3. 借助 ContentProvider 的初始化特点,每个模块的 ContentProvider 在应用启动时注册至主模块中。 相比方案 2,入口类可以不保留类名,弊端是 manifest 中多了一堆 provider 标签。
  4. 方案 2 的变体,借助构建工具,子模块在编译期往当前模块的 asset 目录中写入混淆后的入口类名称,主模块读取 asset 获取类名完成反射。相比方案 2 的优势是,类名不必保留,模块可以单独迭代,弊端是 asset 中多了一些信息。

当时停留在方案 2 了,最近脑子里总冒出来这个问题,大家有其他建议吗?

有什么长续航的安卓备用机推荐吗?

Posted: 07 Jul 2021 03:18 AM PDT

预算 2000 左右,最好小屏~

怎么修改用户名?我想发文,但是不想被同事认出来

Posted: 07 Jul 2021 03:13 AM PDT

windows11 有没有对 wsl2 做改进啊

Posted: 07 Jul 2021 03:11 AM PDT

还是真就只换了个 UI ?

现在 wsl2 至少我遇到的问题就是 localhost 访问时灵时不灵,有时得用 ip 才能访问,不知道是啥问题

tcp/ip 协议栈中,子网掩码是存哪的?

Posted: 07 Jul 2021 03:10 AM PDT

网络数据报文里好像没有保存子网掩码的部分。假设有如下场景:

路由器,A 口网段:192.168.128.0/24,B 口网段:192.168.128.0/23,如果有人给 192.168.128.0/24 网段的某个机器发了个数据报,路由器怎么知道是转发给 A 口还是 B 口?

用 Travis CI 发布 Github Pages 是真的方便,求分享 GitHub 心得。

Posted: 07 Jul 2021 03:05 AM PDT

多年前使用 GitHub Pages,还需要自己构建后向仓库推送代码,现在只需要在 Github Marketplace 中安装 Travis CI,在项目里加入一个 .travis.yml 文件简单配置下就可以享受云端的 CI 服务,还是相当方便的。

推送到 https://github.com/lcomplete/TechShare 上之后,CI 服务自动构建并更新 github pages 分支。

使用 VuePress 构建的 https://lcomplete.github.io/TechShare/ 网站,使用起来也是挺简单的,多年前用 Octopress 还挺折腾的。

还有哪些 GitHub 实用心得,求分享。

omnet 创建四个节点相互传送信息,核心代码是什么啊

Posted: 07 Jul 2021 02:58 AM PDT

这个是 ned 代码 package tictocs;simple Txcs1{ gates: input in[]; output out[];}network Tictocs1{ submodules: t[4]:Txcs1; connections: t[0].out++ --> { delay = 100ms; } --> t[1].in++; t[0].in++ <-- { delay = 100ms; } <-- t[1].out++; t[0].out++ --> { delay = 100ms; } --> t[2].in++; t[0].in++ <-- { delay = 100ms; } <-- t[2].out++; t[0].out++ --> { delay = 100ms; } --> t[3].in++; t[0].in++ <-- { delay = 100ms; } <-- t[3].out++; t[1].out++ --> { delay = 100ms; } --> t[2].in++; t[1].in++ <-- { delay = 100ms; } <-- t[2].out++; t[1].out++ --> { delay = 100ms; } --> t[3].in++; t[1].in++ <-- { delay = 100ms; } <-- t[3].out++; t[2].out++ --> { delay = 100ms; } --> t[3].in++; t[2].in++ <-- { delay = 100ms; } <-- t[3].out++; }

请问网页选择思源黑体,应该用什么格式的字体文件?

Posted: 07 Jul 2021 02:32 AM PDT

https://github.com/adobe-fonts/source-han-sans/tree/release

思源黑体, 它这个 github 仓库有好多字体文件, 请问我网页应该选择哪个?

感谢🙏

使用 mix/vega + mix/db 进行现代化的原生 PHP 开发

Posted: 07 Jul 2021 02:13 AM PDT

最近几年在 javascript 、golang 生态中游走,发现很多 npm 、go mod 的优点。最近回过头开发 MixPHP V3,发现 composer 其实一直都是一个非常优秀的工具,但是 phper 们对 composer 的用法很多都不是很深入,今天我就采用 composer 手撸一个原生项目,帮助大家理解现代化的原生 PHP 开发流程。

PHP 的开发者可能是所有语言里被惯坏的最厉害的,因为几乎每个框架都提供了脚手架,像这样:

composer create-project 

这个在 npm 、go mod 是没有这个功能的,需要自己创建程序骨架,当然 npm 和 go 生态产生了自己的解决方案,就是 vue-cli 和 mixcli 这样的脚手架工具来负责创建。

创建一个项目

和 npm init 、go mod init 一样,我们使用 composer init 创建一个项目

mkdir hello cd hello composer init  

交互式填写一些内容后,生成了 composer.json 文件

{     "name": "liujian/hello",     "type": "project",     "autoload": {         "psr-4": {             "Liujian\\Hello\\": "src/"         }     },     "require": {} } 

这个文件是以 composer 库的标准创建的,必须要两级名称,这让我很蛋疼,所以我修改一下

{     "name": "project/app",     "type": "project",     "autoload": {         "psr-4": {             "App\\": "src/"         }     },     "require": {} } 

选择我需要使用的库

和 node.js 、go 生态一样,第二步就是寻找我们需要的库,通常我们的需求是写一个 API 服务,就需要一个 http server 库,一个 db 库就可以开始工作了。

由于是现代化的 PHP 开发,因此我选择了 PHP CLI 模式的常驻高性能库,这里我选择的是:

  • mix/vega Vega 是一个用 PHP 编写的 CLI 模式 HTTP 网络框架,支持 Swoole 、WorkerMan
  • mix/database 可在各种环境中使用的轻量数据库,支持 FPM 、Swoole 、WorkerMan,可选的连接池 (协程)

这两个都是 MixPHP V3+ 的核心组件。

Mix Vega & Mix Database 安装

Vega 同时支持 Swoole 、WorkerMan,以后还会支持 Swow,最简单原则,因为 WorkerMan 可以不需要安装扩展即可执行,开发先采用 WorkerMan 来驱动 Vega,上线可根据自己的需要切换。

安装 Workerman

composer require workerman/workerman 

安装 Mix Vega

composer require mix/vega 

安装 Mix Database

composer require mix/database 

创建一个入口文件

vue 的入口通常是 src/main.js 因为 js 通常是单入口项目,我们还是按二进制的惯例,创建一个 bin/start.php 入口文件

<?php require __DIR__ . '/../vendor/autoload.php';  $vega = new Mix\Vega\Engine(); $vega->handleF('/hello', function (Mix\Vega\Context $ctx) {     $ctx->string(200, 'hello, world!'); })->methods('GET');  $http_worker = new Workerman\Worker("http://0.0.0.0:2345"); $http_worker->onMessage = $vega->handler(); $http_worker->count = 4; Workerman\Worker::runAll(); 

然后我们模仿 npm 的搞法,在 composer.json 增加:

"scripts": {       "server": "php bin/start.php start" }, 

这里我非常困惑 composer 的搞法,npm 的入口文件中可不需要 require __DIR__ . '/../vendor/autoload.php'; 直接 npm run server 执行的脚本是自己可以找到对应依赖的,但是 composer 即便使用 composer run server 执行对应的脚本,依然要在代码里处理 autoload,给差评。

现在我们 composer run server 启动服务试试:

% composer run server > php8 bin/start.php start Workerman[bin/start.php] start in DEBUG mode ----------------------------------------- WORKERMAN ----------------------------------------- Workerman version:4.0.19          PHP version:8.0.7 ------------------------------------------ WORKERS ------------------------------------------ proto   user            worker          listen                 processes    status            tcp     liujian         none            http://0.0.0.0:2345    4             [OK]             --------------------------------------------------------------------------------------------- Press Ctrl+C to stop. Start success. 

写一个 API 接口

我们将上面的入口文件改造一下,写一个用户查询接口,Vega 的使用非常简单。

<?php  require __DIR__ . '/../vendor/autoload.php';  const DSN = 'mysql:host=127.0.0.1;port=3306;charset=utf8;dbname=test'; const USERNAME = 'root'; const PASSWORD = '123456';  $db = new \Mix\Database\Database(DSN, USERNAME, PASSWORD);  $vega = new Mix\Vega\Engine(); $vega->handleF('/users/{id}', function (Mix\Vega\Context $ctx) use ($db) {     $row = $db->table('users')->where('id = ?', $ctx->param('id'))->first();     if (!$row) {         throw new \Exception('User not found');     }     $ctx->JSON(200, [         'code' => 0,         'message' => 'ok',         'data' => $row     ]); })->methods('GET');  $http_worker = new Workerman\Worker("http://0.0.0.0:2345"); $http_worker->onMessage = $vega->handler(); $http_worker->count = 4; Workerman\Worker::runAll(); 

curl 测试一下:

% curl http://127.0.0.1:2345/users/1 {"code":0,"message":"ok","data":{"id":"1","name":"foo2","balance":"102","add_time":"2021-07-06 08:40:20"}} 

使用 PSR 调整一下目录结构

前面我们定义了 PSR

"autoload": {     "psr-4": {         "App\\": "src/"     } }, 

接下来我们采用自动加载来合理拆分上面入口文件的代码,拆分后目录结构如下:

├── bin │   └── start.php ├── composer.json ├── composer.lock ├── src │   ├── Controller │   │   └── Users.php │   ├── Database │   │   └── DB.php │   └── Router │       └── Vega.php └── vendor 
  • bin/start.php
<?php  require __DIR__ . '/../vendor/autoload.php';  $vega = \App\Router\Vega::new();  $http_worker = new Workerman\Worker("http://0.0.0.0:2345"); $http_worker->onMessage = $vega->handler(); $http_worker->count = 8; Workerman\Worker::runAll(); 
  • src/Router/Vega.php
<?php  namespace App\Router;  use App\Controller\Users; use Mix\Vega\Engine;  class Vega {      /**      * @return Engine      */     public static function new()     {         $vega = new Engine();          $vega->handleC('/users/{id}', [new Users(), 'index'])->methods('GET');          return $vega;     }  } 
  • src/Controller/Users.php
<?php  namespace App\Controller;  use App\Database\DB; use Mix\Vega\Context;  class Users {      public function index(Context $ctx)     {         $row = DB::instance()->table('users')->where('id = ?', $ctx->param('id'))->first();         if (!$row) {             throw new \Exception('User not found');         }         $ctx->JSON(200, [             'code' => 0,             'message' => 'ok',             'data' => $row         ]);     }  } 
  • src/Database/DB.php
<?php  namespace App\Database;  use Mix\Database\Database;  const DSN = 'mysql:host=127.0.0.1;port=3306;charset=utf8;dbname=test'; const USERNAME = 'root'; const PASSWORD = '123456';  class DB extends Database {      static private $instance;      public static function instance()     {         if (!isset(self::$instance)) {             self::$instance = new self(DSN, USERNAME, PASSWORD);         }         return self::$instance;     }  } 

调整完基本就完成了一个正式项目的雏形了,接下来大家可以自由发挥。

压测一下

mysql: docker mysql8 本机
cpu: macOS M1 8 核
mem: 16G
wokerman (未安装 libevent): 8 进程,相当于 8 个 mysql 连接

% wrk -c 1000 -d 1m http://127.0.0.1:2345/users/1 Running 1m test @ http://127.0.0.1:2345/users/1   2 threads and 1000 connections   Thread Stats   Avg      Stdev     Max   +/- Stdev     Latency    36.08ms    8.11ms 428.09ms   95.38%     Req/Sec     3.49k   211.80     4.00k    71.00%   416817 requests in 1.00m, 109.31MB read   Socket errors: connect 749, read 295, write 1, timeout 0 Requests/sec:   6943.38 Transfer/sec:      1.82MB 

最全开源硬件(安全研究方向)列表,打板么?

Posted: 07 Jul 2021 02:11 AM PDT

最近"嘉立创"推出了四层,双层,单层打样全免费,大家开始躁动了,按捺不住想薅一把。到了要打什么板的时候了,有什么可以打的呢?总结了一些开源硬件项目放在文末,师傅们开整(下单)吧!

开源硬件。研究人员开源了软硬件方案,爱好者可以自行定制打板制作。打板可以去嘉立创(打样免费),然后买芯片自己焊接,最后刷写软件部分。

  • Throwing Star LAN TAP: A passive tap for monitoring 10/100 Ethernet

  • JTAGulator: Assisted discovery of on-chip debug interfaces

  • Focaccia-Board: Multipurpose Breakout for the FT232H

  • Bus Pirate: An open source hacker multi-tool that talks to electronic stuff

  • GoodFET41: A nifty little tool for quickly exposing embedded system buses to userland Python code

  • Facedancer21: An open-source USB emulator and fuzzer

  • Tigard: An FTDI FT2232H-based multi-protocol tool for hardware hacking

  • Hackrf: Low cost software radio platform

  • PandwaRF: A RF analysis tool with a sub-1 GHz wireless transceiver controlled by a smartphone or a PC

  • YARD Stick One: A sub-1 GHz wireless transceiver controlled by your computer

  • Ubertooth: An open source wireless development platform suitable for Bluetooth experimentation

  • Proxmark: A powerful general purpose RFID tool

  • ChameleonMini: A versatile contactless smartcard emulator compliant to NFC

  • Crazyradio: A long range open USB radio dongle based on the nRF24LU1+ from Nordic Semiconductor

  • OpenVizsla: FT2232H-based USB sniffer

  • ApiMote: IEEE 802.15.4/ZigBee Sniffing Hardware

  • USBKeylogger: 带 Wi-Fi 功能的硬件键盘记录器。

更多内容见微信公众号:从 0 到 1 建设物联网安全实验室之设备篇

扫描下方二维码查看。

公众号

Linux 提交内核补丁,以支持 Rust 作为内核开发第二语言,各位怎么看

Posted: 07 Jul 2021 02:07 AM PDT

镜像讨论:rust for linux

Github Copilot 是否违反 GPL 协议?

Posted: 07 Jul 2021 01:47 AM PDT

看见公众号推送的,想了想觉得挺有意思:

在 GitHub Copilot 直接复制快速平方根倒数算法这个过程中有个矛盾点,即这段代码是遵循 GNU GPL 2.0 协议进行开源的,而 GitHub Copilot 却要在未来扩展为付费服务提供。

在此基础上,就产生了一个巨大争议:这个现象表示 GitHub Copilot 在训练过程中必定使用过 GPL 协议下的代码,那么机器学习系统产生的作品,甚至机器学习系统本身,都算是 GPL 协议中规定的衍生作品吗?

  • 如果答案是"否",那是不是说明开发者可以利用 GitHub Copilot 来"清除"代码的 GPL 协议,从此再也无需遵循该协议?

  • 如果答案是"是",那么不仅 GitHub Copilot 应该免费开源,整个 GitHub 都要成为一个开源项目:据 GitHub 博客中"在 GitHub Copilot 的早期开发过程中,作为内部试用的一部分,近 300 名员工在日常工作中使用了它"的说法,这些员工很有可能已经将 GitHub Copilot 生成的代码整合到 GitHub 的方方面面,那么 GitHub 就也应该是个开源项目。

有人知道 ansible setup 这个模块的原理吗?

Posted: 07 Jul 2021 01:39 AM PDT

源码看不大明白,使用这个模块能获取到目标服务器的详细信息,包括 cpu,内存,磁盘,网卡,用户等等几乎常见的信息,在 playbook 中指定 gather_facts=true 也能达到相同目的,ansible 没有 agent,如果是通过 ssh 连接到目标服务器再查看相关系统信息效率应该不高吧,再加上 python 执行效率本来就捉襟见肘,那么有没有什么不为人知的骚操作?

RN 使用 expo 如何保证信息送达 ?

Posted: 06 Jul 2021 11:54 PM PDT

最近研究手机 APP,因为不懂原生开发,选择了 expo.io 来处理,后面丰富的库给开发提供了帮助。还有很多贴心的小组件。

碰到一个推送的问题,expo 需要我们第三方服务器,里面会有用户的设备 token 跟用户 id,来推送不同信息到他们 expo 的服务器。expo 的服务器负责信息分发到 firebase 和 APNs 服务。 我们信息通过后端到他们服务器,会有一个叫做 push tikect 的东西,但是他的返回不会包括我们用户 id (我们没有办法在推送信息中添加), 而是他们生成的 id 。https://docs.expo.io/push-notifications/sending-notifications/ 官方文档 然后根据这个 tikect 集合来轮训 消息是否到达 firebase 或者 APNs 服务。

因为他们的结果返回只包括他们自己的 id,没有办法知道,这个 id 或者这条信息跟本地设备的关系。支付宝回调会返回支付宝的处理 id 跟我们自己加入的 id 。 不知道有没有老哥做过这样的业务。 根据文档提到的 "The requests above will respond with a JSON object with two optional fields, data and errors. data will contain an array of push tickets in the same order in which the messages were sent (or one push ticket object, if you send a single message to a single recipient)." 返回的 数据,跟推送的数据顺序一样,难道要自己重写个算法来确定 消息推送是否成功么?

Push tickets 返回的例子,id 是 expo 生成的。。

{   "data": [     { "status": "ok", "id": "XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX" },     { "status": "ok", "id": "YYYYYYYY-YYYY-YYYY-YYYY-YYYYYYYYYYYY" },     { "status": "ok", "id": "ZZZZZZZZ-ZZZZ-ZZZZ-ZZZZ-ZZZZZZZZZZZZ" },     { "status": "ok", "id": "AAAAAAAA-AAAA-AAAA-AAAA-AAAAAAAAAAAA" }   ] } 

我的情景是,如果信息没有送达,就不会继续推送。

为什么 Chrome 在 iPad 上没法放大字体?

Posted: 06 Jul 2021 11:49 PM PDT

手机上是有的,iPad 上没有 zoom text 的选项,怎么回事?

请问有在安卓设备上开发社保卡的吗

Posted: 06 Jul 2021 09:50 PM PDT

最近需要在设备上开发社保卡的相关功能,硬件都没问题,就是社保 cpu 卡相关的文档实在看不懂,网上也搜不到什么有用的,有没有大佬做过的帮帮忙

编程久了是不是动手能力就提升了

Posted: 06 Jul 2021 09:44 PM PDT

没用过的后端框架,一查就能上手撸,比如 uniapp,一查就重构个小程序,这个是属于有难度还是没难度的啊。敲了 lumen 几天,我可以说我会 laravel 吗,用 uniapp uview 几天,我可以说我会了吗。

成为全栈式数据管控平台, CloudQuery 1.4 概述

Posted: 06 Jul 2021 08:50 PM PDT

「近年来,新兴的互联网服务领域,以及电信、金融和交通等各传统行业出现了数据资产的爆炸性增长,这些数据资产的类型以非结构化和半结构化为主,如何低成本且高效率地存储和处理 PB 甚至 EB 量级的数据成了极大的挑战。」 ——摘自《 Hbase 权威指南》 "随着大数据时代

数据量不断增长、企业规模不断扩大、业务系统更加多元,我们面对同源、异源数据的分析处理能力无时无刻在经受巨大的考验,分布式系统对数据一致性要求极高,同时大量的业务数据以及数据上云的时代趋势数次证明了数仓的便利性,但在数仓的实际工作中只有 20%的时间花费在数据挖掘上,其余时间大多用来数据同步、任务调度、数据清洗等等构造符合条件的数据上。本文从该时代背景出发来介绍本次 CloudQuery 1.4 版本整体新增的功能点以及未来迭代规划

引入「 DTS 」概念,数据工具大集成

上文中提到数仓工作中大量的时间用来进行数据处理,CloudQuery 本意旨在解决用户在数据操作中遇到的问题。1.4 之前的版本我们将重心放在优化编辑器体验以及攻克重难点上,在我们逐步完善数据操作工作台时也发现以 SQL 方式(手写 SQL 或可视化数据查询编辑、终端操作)来进行数据操作只是数据库相关人员工作中的一部分,更多时候我们需要跟数据进行批量交互,如批量数据导入、数据迁移等,此时再采用 SQL 或终端的形式则远远达不到我们对于该功能的期望。

因此 CloudQuery 在 1.4 版本提出「 DTS 」概念,意为「数据库工具箱服务」。「导入导出」作为「 DTS 」的一个子模块,为 DBA 、运维等角色提供了数据传输上的便利。

1.4.0 版本,我们首先推出 MySQL 和 Oracle 数据库的 dump 格式导出数据功能,后续会根据每个数据源进行针对性的数据工具支持,例如 PostgreSQL  dump 相关导入导出功能,同时数据库工具也纳入权限管控,用户使用数据库工具需要管理员进行授权。

此外,在 1.4 的迭代过程中,「数据迁移」也会作为一个工具加入「 CloudQuery DTS 」大家庭。我们在设计「数据迁移」模块时考虑到当前分布式业务系统通常不会使用单一数据源进行数据存储的情况,提出了「同源 /异源迁移」,同时根据数据库结构的异同会存在「同构 /异构迁移」的情况,所以提供的迁移形式也更加多样化,具体如下:

  • 迁移数据量
    • 全量
    • 增量
  • 迁移时机
    • 实时
    • 定时
  • 迁移端
    • 同源
    • 异源
      • 关系型 to 关系型
      • 关系型 to 非关系型
      • 关系型 /非关系型 to 大数据 /数仓
    • 同构
    • 异构
  • 选择性迁移
    • 水平分割
    • 垂直分割

因为「数据迁移」的设计相对复杂且包含范围较广,所以「数据迁移」功能我们会在 1.4 版本中持续推出完善,也希望大家在使用中提出自己的建议,我们在认真分析之后会对功能进行调整。 

「可视化」模块,数据操作无需有求于人

如果说「 DTS 」贴近数据库底层数据,那么「可视化」则更贴近业务场景。CloudQuery 1.4 版本推出的第二大功能就是「可视化」,包括两个模块:「可视化辅助查询」和「 ER 建模」。

可视化辅助

查询企业中并非每一个用户都能熟练使用 SQL 语句,对于没有 SQL 基础但需要进行数据查询的用户就需要「可视化」来辅助。

CloudQuery 1.4.0 版本新增「可视化辅助查询」功能,让用户以图形化的方式进行数据操作,添加查询、筛选、排序等条件时更加简便易懂,即使不懂 SQL 或不懂数据库也能得到自己需要的结果数据。

同时,我们后续也会支持用户查询画布保存或生成 SQL 语句保存,方便在以后的使用中直接获取结果。

ER 建模

「 ER 建模」则针对相对高阶用户,以 ER 图的形式来渲染数据库下表关系,让主外键以及约束关系更加直观。

同时在 ER 图呈现画布上支持针对表结构的变更操作,例如 添加表、设计表、删除表、添加约束等。ER 图画布同样支持图片格式导出,方便 DBA 进行数据库元素关系整理,在业务内部传阅。

新增数据源支持,覆盖全类型数据库

CloudQuery 作为数据库统一入口,数据源支持是最基础的功能,同时作为以社区为重心的产品,用户的需求至关重要。我们在 1.3 版本迭代过程中持续收集社区用户的使用建议,经过评估后我们会在 1.4 迭代过程中加入以下数据源:

  • Hive
  • Es
  • DB2
  • PolarDB
  • OceanBase

CloudQuery 在持续扩充数据源种类的同时也不会忽略每个数据源自身的特性,同时在未来不久的版本中会对数据操作区的自动提示、结果集展示进行整体优化。 

OpenAPI,发挥社区的力量

CloudQuery 是在社区中持续成长的产品,但同时我们自身能做的事情又十分有限。所以在我们功能迭代的路上将持续开放 API,方便有开发能力的用户来进行企业内部第三方应用、组织架构以及其他资源接入。

接下去我们会优先开放「用户」模块的部分接口,但在调用接口前需要系统管理员在平台内部开发者中心进行指定用户的开发者身份激活,身份激活后会得到 appID 和对应的 secret,以此作为密钥来进行 API 接口的鉴权和调用。

总结

以上就是 CloudQuery 在未来的 1.4 版本中整体的功能以及迭代规划。后面我们对针对 1.4 版本的新功能出系列文章,详细阐述每个新功能点及其背后技术,让大家更好地了解 CloudQuery 的体系。同时我们会持续完善自身的基础能力,为社区用户带来更加便利、快捷的数据操作与交互体验。

官网地址: https://cloudquery.club/

已解决

Posted: 06 Jul 2021 07:55 PM PDT

已解决

大家怎么做账户系统中的短信验证码注册/登录、一键手机号验证注册/登录的?请问是自己从头开发,手写接入,还是有现成的框架可以用

Posted: 06 Jul 2021 07:35 PM PDT

如果只是基于用户名密码的登录注册,Keycloak 看起来直接就能用。但现在需要短信验证码注册 /登录、一键手机号验证注册 /登录功能。我知道发短信、手机号验证都有 API 可以直接调用,但如果自己写代码接入到 Keycloak 的话,可能存在一些代码安全风险。

因此请问大家是怎么做的?如果是自己写代码接入的话,如何保证安全性的?

想请教一下,这个图片中的字体是什么呀?

Posted: 06 Jul 2021 07:24 PM PDT

Python 起多个线程会充分用到多核 cpu 的资源吗

Posted: 06 Jul 2021 10:02 AM PDT

我们公司的项目是用 django+supervisor+gunicorn 配的,  启着几个 workers 监听着:  workers = multiprocessing.cpu_count() * 2 + 1 worker_class = 'sync' 但是现在我们的一些统计报表导出会导致我们的服务器 cpu 报警、mysql 服务器 cpu 也会经常报警。  这种情况下是 1.升级一下 cpu 配置从目前的 4 核升级到 8 核, 2.还是买一个同样配置的服务器重新部署一套,来个负载均衡。 哪一个更好,想着是那种一劳永逸的解决。 我目前更倾向于后者总感觉 python 线程没有真正把多核 cpu 的资源利用起来。 

各位大佬给个建议

有没有面向开发者的音乐试听的服务?

Posted: 06 Jul 2021 08:33 AM PDT

最近项目中需要一个音乐试听的功能,试听时间在 30 秒以上,最好可以指定试听的开始时间,搜索了下没找到比较满意的。 有人用过类似的服务吗? 提供 API 或 SDK, 没有版权争议,最好是国外的。

谢谢~

那些一起写过的代码 – 7 年编码环境变化记(https://gangdaomeimei.cn/?p=567)

Posted: 06 Jul 2021 07:20 AM PDT

翻了翻我的照片,发现 7 年很快就过去了,我也从当时懵懂无知的少年变成了一个懵懂无知的职场人士。和大家分享一下我的桌面变迁。

https://gangdaomeimei.cn/?p=567

兄弟们,有没有因为夏天天气太热而睡不好的,求支招!

Posted: 06 Jul 2021 06:43 AM PDT

坐标北京。

最喜欢夏天了,有各种水果可以吃,也不用穿那么多繁琐的衣物,而且白天时间还最长,能各种玩,各种浪,但是也有一点不太好,就是太热有时候睡不着觉。

开空调睡觉,一是感觉声音大,嗡嗡的睡不着,二是空调风吹到身体上总感觉不舒服。
不开空调,开窗户睡觉也是有噪音,而且早上鸟儿起的特别早,叽叽喳喳的总是被吵醒,夜里下雨稀稀拉拉的也容易醒。

没办法,最近买了隔音耳塞试了试,发现这个东西也不太好用,虽然能隔(部分噪)音,但是自己的呼吸声和心跳声又会感觉特别大,而且塞进耳朵里总会感觉不舒服。

也尝试了不开空调也不开窗户睡觉,实在是太闷了......

No comments:

Post a Comment