作者归档: 童燕群

近期技术文章搜藏

阅读全文 »

| 1 分2 分3 分4 分5 分 (5.00- 1票) Loading ... Loading ... | 归档目录:IO编程, Java, WEB网络, 存储技术, 数据库, 算法数据结构, 编程基础, 语言基础 | 标签: , , , , |

网传清华学子斩获6个互联网大厂Offer的面试题汇总

看到这些题目忍不住转过来,觉得能把这些都完整解答,功力不是一般深厚了。有具体的coding、大量算法还有一些常用的基础知识和原理等。

转自微信公众号:程序猿石头,PC版链接:羡慕,又一清华学弟斩获 6 个大厂 SSP Offer | 面经分享

清华学子斩获 6 个大厂 SSP Offer

阅读全文 »

| 1 分2 分3 分4 分5 分 (5.00- 1票) Loading ... Loading ... | 归档目录:WEB网络, 多线程编程, 数据库, 算法数据结构, 编程基础, 语言基础 | 标签: , , |

分享AWS博客的两个RSS源

为了第一时间获取AWS的几百个云服务的最新资讯,做了一个自动抓取AWS博客标题,生成RSS Feeds的服务,分别提供中英文版本:
中文:https://photo.codefine.site:12524/rssfactory/awsblogcn
英文:https://photo.codefine.site:12524/rssfactory/awsblog (过滤标题中包含存储相关关键词的博客。)
AWS存储:https://photo.codefine.site:12524/rssfactory/awsblog-storage (订阅存储、大数据和数据库类别的博客。)

| 1 分2 分3 分4 分5 分 (5.00- 1票) Loading ... Loading ... | 归档目录:Amazon S3, Java, 云计算/云存储, 文字网摘, 软件应用 | 标签: , , |

一图梳理大数据知识体系

转自阿里技术社区

简介: 对海量数据进行存储、计算、分析、挖掘处理需要依赖一系列的大数据技术,而大数据技术又涉及了分布式计算、高并发处理、高可用处理、集群、实时性计算等,可以说是汇集了当前 IT 领域热门流行的 IT 技术。本文对大数据技术知识体系进行划分,共分为基础技术、数据采集、数据传输、数据组织集成、数据应用、数据治理,进行相关的阐述说明,并列出目前业界主流的相关框架、系统、数据库、工具等。(文末福利:下载大数据知识体系图)

阅读全文 »

| 1 分2 分3 分4 分5 分 (5.00- 1票) Loading ... Loading ... | 归档目录:云计算/云存储, 存储技术, 架构设计 | 标签: , , , , , |

安装 FileRun,HomeNAS 秒变网盘

HomeNAS上面虽然可以使用SFTP、WebDAV和NAS等协议分享文件,但是在易用性上面还是不如网盘的短连接+简单密码的方式好用。一直想找一个类似网盘的HTTP短连接分享的系统。EMBY的分享按钮似乎不能正常工作,更别谈使用带密码校验的功能了。之前Windows系统的Everything,只支持单个账户登录。

集中搜索了一下类网盘的解决方案,发现NextCloud、H5AI和FileRun都有类似功能,首先安装了NextCloud,发现其只能管理新上传的文件,所有文件必须进入了NextCloud的数据库才能被管理起来,NextCloud提供了命令行工具,扫描指定目录的所有文件和目录加入到其数据库中,但是每次目录有变化都需要重新扫描,不是太友好。直接放弃。

H5AI就没有尝试,主要发现该软件多年未更新。

最后FileRun,从软件的主页上面就看到了不需要导入文件的介绍:

FIleRun

使用docker镜像安装,网上其他资料都是介绍的使用docker-compose安装的,这里我本机已经有mysql的容器在运行了,因此直接使用docker run启动FileRun容器:

docker run -d \
--name filerun \
-p 8080:80 \
-v /opt/filerun/html:/var/www/html \
-v /media:/user-files \
-e FR_DB_HOST=yourdbhostip \
-e FR_DB_PORT=3306 \
-e FR_DB_NAME=filerun \
-e FR_DB_USER=filerun \
-e FR_DB_PASS='yourdbpasswrod' \
-e APACHE_RUN_USER=www-data \
-e APACHE_RUN_USER_ID=33 \
-e APACHE_RUN_GROUP=www-data \
-e APACHE_RUN_GROUP_ID=33 \
afian/filerun

其中/media是HomeNAS希望被管理的文件的根目录。使用superuser:superuser登录后,修改默认密码,完美呈现出media目录的所有文件。所有的文件相关操作均可在FileRun的WEB客户端上面操作。也能使用链接分享文件或者目录。访问分享链接的客户能在页面上一键打包下载所有文件,也能单个下载某个文件。

image

| 1 分2 分3 分4 分5 分 (5.00- 1票) Loading ... Loading ... | 归档目录:WEB网络, 移动互联 | 标签: , , , , |

WordPress启用HTTPS同时支持WindowsLiveWriter配置

一直都习惯使用WindowsLiveWriter发日志,开启HTTPS后发现WindowsLiveWriter用不了,推测是WLW不支持HTTPS的原因。于是重新审视“.httpaccess”文件,最终使用如下配置支持全站HTTPS和WLW继续使用。

阅读全文 »

| 1 分2 分3 分4 分5 分 (5.00- 1票) Loading ... Loading ... | 归档目录:WEB网络, 实用脚本, 建站技术 | 标签: , |

使用Emby + Picard管理音乐

最近把NAS上面累积下来的音乐都整理了一下,用emby建了一个音乐集。emby自带musicbrainz的插件,能从这个强大的音乐库中搜索MP3的元数据信息。然后从多个维度对音乐进行分类呈现。但是有个问题,很多MP3经过各个二道贩子编辑后,关键元数据信息都跟音乐本身没有任何关联了,因此自动搜索出来的元数据匹配存在一些问题,甚至有的MP3文件经过转码后,只剩下音乐本身,tag元数据全部丢失。只能人工填写,一两千个文件,逐一搜索排查可想而知难度有多大。找到了picard这个工具,可以自行匹配,然后没有匹配的再人工搜索,这样极大提高了准确率。比emby自动但是做了的错误的匹配要好的多。经过picard处理后的音乐文件再导入到emby中,就能准确识别歌手,专辑等信息,进而补充下载专辑唱片封面图等。

难得的是,picard在Win、Linux和Mac平台都能使用。对于Ubuntu 20,使用官方给出的命令很快就能安装成功:

sudo add-apt-repository ppa:musicbrainz-developers/stable
sudo apt-get update
sudo apt install picard

软件界面截图:
picard

导入/emby的效果:
emby

| 1 分2 分3 分4 分5 分 (5.00- 1票) Loading ... Loading ... | 归档目录:数码硬件, 移动互联, 软件应用, 软件技术 | 标签: , , , |

基于Dlib、Flask和Sqlite的人脸检测和识别服务

这个十一原定的计划取消了,没有做好备份计划,也就不打算出远门了,关在家里,把一直都想做的一个本地化的人脸识别服务整了一下。提供人脸分析的开源服务似乎很多年都没有大的变化了,一直都是Dlib和OpenCV,对比了一下,Dlib更容易使用。一直没有正经写过Python代码,翻出N年前买的Python编程书,边翻书Google、边写代码。基本的代码流程比较简单,Dlib官方也有例子,很容易运行起来,但是要服务化,要做人脸比对,并且是增量的人脸比对和识别,并不容易。说做就做,最终整个服务形成如下架构。

架构图:
image

代码和部署使用方法在如下git工程:https://git.codefine.site:3000/Shentar/facerec

首先需要将探测的过的“人脸”存储起来,然后能输入一张人脸返回与该人脸近似的所有人脸,这样客户端好做人脸归集。很快做好了一个初步的框架:使用Flask提供REST接口接收照片,在响应中返回人脸的特征标识,使用SHA256对人脸68点位的描述向量进行HASH,返回给客户端。同时将HASH值和实际的token存储到Sqlite。第一天大概就完工了这个功能。

运行起来,发现单纯的Flask不能并发,第二个请求会报错,一次只能接受和处理一个请求。于是又按照网上的经验,使用Gunicorn和Gevent来做多线程的方案,因为习惯了单进程多线程的方式,多线程访问Sqlite需要加锁,按照通用的做法,使用一个队列来管理Sqlite实例。继续验证,发现多线程并不能加速Detect的效率,貌似Dlib不支持多线程加速。调整为多进程,四个CPU都能运用起来。

1d2dd2b5bcde40b6a563996821d84843

终于找到了一个能将这个3.2GHZ的四核CPU跑满的业务了 ^_^

Architecture: x86_64
CPU op-mode(s):                  32-bit, 64-bit
Byte Order:                      Little Endian
Address sizes:                   39 bits physical, 48 bits virtual
CPU(s):                          4
On-line CPU(s) list:             0-3
Thread(s) per core:              2
Core(s) per socket:              2
Socket(s):                       1
NUMA node(s):                    1
Vendor ID:                       GenuineIntel
CPU family:                      6
Model:                           94
Model name:                      Intel(R) Core(TM) i3-6100T CPU @ 3.20GHz

人脸检测的效果还不错,错误率的话,自己家用是够了。特别是在侧脸检测上面,比较准确。在人脸比对方面,错误率就要高一些了,反复验证,发现0.36的比对阀值比较合适。侧脸虽然检测率高,但是在比对上面,只用通用的拟合范数,结果会表现为差异很大。因此这里应该是需要有定制化的比对实现,只做部分比对。这块需要深入到人脸检测技术内部,去分析128D的特征值向量的每一个值,短时间内没办法去研究透了。

由于采用了多进程,因此没法共用一个Sqlite运行时实例,强行并发读写访问会导致数据库错乱,不得不又做了一个服务来封装Sqlite,多个检测进程输出的人脸特征值都发给该服务来顺序存储,同时也返回给客户端。两个服务之间同样采用REST接口交互。

准备大规模上量,将jAlbum目前使用的线上人脸识别服务切换到这个本地服务上面,又发现检测时长非常高,一张4M的图片,大概需要几秒的时间,并且还有些非常小的区块被检测到了。对于检测慢的问题,考虑降低输入的照片的像素,图片减小后,长宽的像素点都相应减少了,但是人脸的特征点并不会损失太多。因此先对图片进行降低像素和尺寸,识别完成后,对识别到的人脸在照片上的位置也要相应做缩放,对比了一下,原始大小检测和缩放后检测,再对结果做相反的缩放,最终结果误差不大,但是这样能极大提速。对于非人脸和质量不高的人脸被检测到的问题,做了一些粗浅的限制,人脸长宽必须大于100的阀值才认为是正常的人脸。Dlib应该有正统的输出人脸的质量的参数,查了很久,没有找到合适的方法,就只能先这样吧。在比对方面,还有一些重要的概念,没有弄明白,如人脸对齐、年龄、性别检测等,不清楚我的代码里面是否已经有调用已经做了这块。

具体的处理代码:

data = np.frombuffer(data, np.uint8) 
if data is None: 
    raise Exception('image is required.') 

zoom_ratio = 1 
if data.size > 6 * 1024 * 1024: 
    img = cv2.imdecode(data, cv2.IMREAD_REDUCED_COLOR_4) 
    zoom_ratio = 4 
elif data.size > 4 * 1024 * 124: 
    img = cv2.imdecode(data, cv2.IMREAD_REDUCED_COLOR_2) 
    zoom_ratio = 2 
else: 
    img = cv2.imdecode(data, cv2.IMREAD_COLOR) 

faces = [] 
dets = detector(img, 1)

总的来说,开源项目,适合做一下Demo,如果要尽善尽美,那么就要深入到源码,有针对性的去优化检测和比对模型。作为个人的实验和家用还是很不错的。至少在快速编程和服务化这方面。

| 1 分2 分3 分4 分5 分 (5.00- 2票) Loading ... Loading ... | 归档目录:WEB网络, 数码硬件, 架构设计, 移动互联, 软件应用 | 标签: , , , , , |

docker本地安装tiny tiny rss记录

# 启动mariadb 10.0.38
docker run --name mariadb -p 3306:3306 \
-e MYSQL_ROOT_PASSWORD='password' \
-d mariadb:10.0.38

# 安装docker php 5.6
docker run -p 9000:9000 --name php \
-v /opt/codefine.site/:/opt/codefine.site/ \
-v /opt/codefine:/opt/codefine \
-v /media/c2/php//conf:/usr/local/etc/php \
-v /media/c2/php/logs:/phplogs \
-v /opt/phpmyadmin:/opt/phpmyadmin  \
-d php6:latest

# 安装php插件。借助于内部家里的内部梯子。懒得设置debian镜像。
export http_proxy=http://22.22.22.14:10080
apt update
apt install libxml2-dev
apt install libxml2
apt install libcurl3
apt install libcurl4-gnutls-dev
ln -s x86_64-linux-gnu/curl curl
apt-get install -y libfreetype6-dev libjpeg62-turbo-dev libpng-dev

docker-php-ext-configure gd --with-freetype --with-jpeg
docker-php-ext-install -j$(nproc) gd
docker-php-ext-install mysql
docker-php-ext-install mysqli
docker-php-ext-install intl
docker-php-ext-install pdo
docker-php-ext-install pdo_mysql
docker-php-ext-install fileinfo
docker-php-ext-install xml
docker-php-ext-install mbstring
docker-php-ext-install json
docker-php-ext-install opcache

docker-php-ext-enable intl
docker-php-ext-enable pdo
docker-php-ext-enable pdo_mysql
docker-php-ext-enable fileinfo
docker-php-ext-enable xml
docker-php-ext-enable mbstring
docker-php-ext-enable json
docker-php-ext-enable opcache
docker-php-ext-enable mysql
docker-php-ext-enable mysqli
docker-php-ext-enable gd

# 生成新的镜像。
docker save -o php.tar php
docker load -i php.tar
# 重新run一个新的container。

# nginx
cat /etc/nginx/sites-enabled/ttrss
server {
	listen 12345 ssl;
	root /opt/codefine.site/;
	index index.php index.html index.htm;
	server_name photo.codefine.site;
	ssl_certificate     /path/of/server/file.pem;
	ssl_certificate_key /path/of/server/key/file.pem;
	ssl_protocols TLSv1 TLSv1.1 TLSv1.2;

	location / {
		try_files $uri $uri/ =404;
	}

	location ~ \.php$ {
		include snippets/fastcgi-php.conf;
		fastcgi_pass   127.0.0.1:9000;
	}
}
| 1 分2 分3 分4 分5 分 (5.00- 1票) Loading ... Loading ... | 归档目录:移动互联, 软件应用, 软件技术 | 标签: , , , |

Ubuntu 20.04桌面体验

对于Ubuntu桌面的印象还停留在很多年前,当年的感觉是,比较容易崩溃,需要修改配置文件的地方太多,一不小心系统就崩溃了。家里近10年前的笔记本,几次操作系统自动升级后,已经变得一打开Win10系统就开始呼呼叫。像是一个年迈的老人,稍微快步走路就气喘一样。想试一下最新的Ubuntu,装系统很容易,直接下载镜像,写入U盘,制作成启动盘,引导安装。最可贵的是,居然自动识别老的Win10系统,做成了双系统,需要的时候还能进入Win10。用了几天,感觉Gnome桌面的整体风格跟Mac越来越像了,几乎不需要手动修改配置。自动发现U盘、界面连接Wifi、安装软件等体验都不错。其实日常家里使用笔记本也就是看看文档、浏览网页、看看开源代码,还有一些常用的社交应用的网页版,无缝访问家里的NAS系统。Ubuntu生态里面,离完全满足这些应用还有距离,但是在性能体验上面,已经远远超出Windows了,特别是硬件资源不足的情况。生态欠缺也是硬伤,如:微信微博等没有linux版本客户端,没有一些通用的轻量级代码编辑器:Nodepad++和VSCode等。好在现在越来越多的东西都可以在Web页面上解决。

阅读全文 »

| 1 分2 分3 分4 分5 分 (5.00- 2票) Loading ... Loading ... | 归档目录:数码硬件, 软件应用, 软件技术 | 标签: , |
返回顶部