算法题:完美平方

给一个正整数 n,写一个函数找到若干个完全平方数(比如 1,4,9,…)使得他们的和等于 n。要求为你需要让平方数的个数最少,输出需要的最少的平方数的个数。

格式:
输入每一行输入一个 整数 n,输出每一行输出需要最少的平方数的个数。
样例输入

n = 12
n = 13

样例输出

3
//12 = 4 + 4 + 4
2
//13 = 4 + 9

解 (用高亮打不出来,日

#include <iostream>
#include <cmath>
using namespace std;
int perfect_square(int);
int main(){
cout<<perfect_square(10)<<endl;
return 0;
}
int perfect_square(int number){
int result = -1;
int start = floor(sqrt(number));
cout<<“start:”<<start<<endl;
if((int)pow(start,2)==number){
return 1;
}
return 1+perfect_square(number-pow(start,2));
}

MySQL导致关机时间长(Waiting for table flush)

首先说结论:双系统时区同步( timedatectl set-local-rtc 1 )导致

一直以来我这个笔记本在关机的时候都有些慢,本来也没想去管它(因为以前也试图跟开关机的错误作斗争,但我没赢过)

但是随着我的时间越来越紧,也没耐心等它慢慢关机了,就稍微做了个笔记,去搜了一下,大体上是说,mysql在清理垃圾数据,而时区设置导致mysql认为有来自未来(8小时之后)的数据,为了保持数据缓存干净,所以一直在等待,在网络越来越好的情况下,双系统时间同步对我也没那么重要了,所以把这个设置调回了默认值,然后重启系统,好了

后记:这篇记录太早了,才发现没发布出去,大部分都是后来补写的,有没太写清楚的地方,请见谅。

[SOLVED]using dkms to install driver with errors

起因

由于笔记本(ThinkPad X1C 2014)在Linux下的待机时间远不如Windows,经过简单的搜索,发现了TLP这款能耗管理神器,调教起来还比较简单,基本只要用自带的能源方案就已经够了,其他的就不多说了,因为美帝良心想的本子都有一个电源管理设置叫充放电阈值(这个还是刚查的)有利于笔记本电源的保养,在我的历代笔记本里都是电池先DIE,所以对此比较在意,就查了一下,TLP是支持[仅ThinkPad]的该项设置,在/etc/default/tlp中,需要acpi-call这个模块,对,这就是本文的主角。
按照TLP官网教程安装过程很顺利


sudo apt-get update && sudo apt-get install acpi-call-dkms
# 好,没有报错,那现在来检查一下有没有效果

sudo tlp-stat
# 结果还是inactive,显示没有安装,我想,那是不是dkms要手动安装啊?Google上没找到,然后我想到了软件自带的帮助

sudo dpkg -l | grep dkms # 确认一下有这个软件包

sudo dkms install # 猜测是这么用

#然后会提示这么用不对,使用 help 命令查询使用方式

sudo dkms help #诶!这个autoinstall好像可以

Usage: /usr/sbin/dkms [action] [options]
[action] = { add | remove | build | install | uninstall | match | autoinstall
| mkdriverdisk | mktarball | ldtarball | mkrpm | mkkmp | mkdeb | mkbmdeb | status }
[options] = [-m module] [-v module-version] [-k kernel-version] [-a arch]
[-d distro] [-c dkms.conf-location] [-q] [--force] [--all]
[--templatekernel=kernel] [--directive='cli-directive=cli-value']
[--config=kernel-.config-location] [--archive=tarball-location]
[--kernelsourcedir=source-location] [--no-prepare-kernel] [--no-initrd]
[--binaries-only] [--source-only] [-r release (SuSE)] [--verbose]
[--size] [--spec=specfile] [--media=floppy|iso|tar] [--legacy-postinst=0|1]
[--no-depmod]
[-j number]
Error! No action was specified.
sudo dkms autoinstall

问题

提示是这样的,大概意思就是说引用函数没有找到

DKMS make.log for acpi_call-1.2.0 for kernel 4.12.1-chrysalis (x8664)
Thu Jul 13 19:31:39 CEST 2017
make -C /lib/modules/4.12.1-chrysalis/build M=/var/lib/dkms/acpi_call/1.2.0/build modules
make[1]: Entering directory ‘/tmp/linux-4.12.1’
CC [M] /var/lib/dkms/acpi_call/1.2.0/build/acpi_call.o
/var/lib/dkms/acpi_call/1.2.0/build/acpi_call.c: In function ‘acpi_proc_write’:
/var/lib/dkms/acpi_call/1.2.0/build/acpi_call.c:307:9: error: implicit declaration of function ‘copy_from_user’ [-Werror=implicit-function-declaration]
if (copy_from_user( input, buff, len )) {
^~~~~~~~~~~~~~
cc1: some warnings being treated as errors
make[2]: *** [scripts/Makefile.build:309: /var/lib/dkms/acpi_call/1.2.0/build/acpi_call.o] Error 1
make[1]: *** [Makefile:1512: _module/var/lib/dkms/acpi_call/1.2.0/build] Error 2
make[1]: Leaving directory ‘/tmp/linux-4.12.1’
make: *** [Makefile:7: default] Error 2

然后在网上找了很久,对应的方法都没有解决:

  • 加上-Werror=implicit-function-declaration编译选项
  • 用define更改定义(这个不完全符合,所以没有办法尝试)
  • 可能没有引包(最开始我觉得这官方源不应该出这种错误啊,虽然也不是这个错误,但这是最接近的一个)

后来注意到有两个版本:copy_from_user这个函数在<asm/uaccess.h>另一说是在<linux/uaccess.h>,用locate命令查到源码位置后,发现是引用的是<asm/uaccess.h>,之前挖坑的时候遇到过不在标准位置这个问题,就想着这个是不是在linux/下面,于是把asm改成了linux,先手动运行了一下make,跑通了,然后


sudo dkms autoinstall

HQL Builder

这是个啥呢

一个用于快速构建HQL(Hibernate)的工具,同时伴生有SQLBuilder
灵感来源于Yii的Query类,这么好用的东西为什么不能移植到JAVA中呢,就算是一个劣化版,写起来也要方便很多
另外还有一点私心,就是某个Android项目,不支持Hibernate,那就需要手动写SQL,我觉得这样太麻烦了,要用一种更易于理解和写的方式来实现这一过程
因为SQL本身就是结构化的,所以这是一个很方便,并且可以练习SQL的方式

Windows下的dot中文渲染乱码解决

dot语言绘图有很多渲染器,默认渲染器在windows下无论如何调整(gvedit.exe)都会把中文渲染成乱码。

尝试解决方案如:在graph/node段加入fontname=”Microsoft Yahei” (cairo引擎中这种方式在node段生效)

于是我开始思考,是不是需要手动调用呢?事实很快在我脸上甩了一巴掌:手动调用报13错误。

在网上搜索了好一段时间之后,终于在一篇说明如何使用dot渲染矢量图的文章里找到了解决方法

dot -T类型:渲染器 文件名 -o 输出文件

此处我们使用cairo作为渲染器,完美解决问题

修复OpenProject

大体上来讲是这样@OpenProject Community

2016-11-20 17:08:23,386 CRIT Supervisor running as root (no user in config file)
2016-11-20 17:08:23,386 WARN Included extra file “/etc/supervisor/conf.d/supervisord.conf” during parsing
2016-11-20 17:08:23,420 INFO RPC interface ‘supervisor’ initialized
2016-11-20 17:08:23,420 CRIT Server ‘unix_http_server’ running without any HTTP authentication checking
2016-11-20 17:08:23,421 INFO supervisord started with pid 1
2016-11-20 17:08:24,424 INFO spawned: ‘postgres’ with pid 88
2016-11-20 17:08:24,426 INFO spawned: ‘apache2’ with pid 89
2016-11-20 17:08:24,429 INFO spawned: ‘web’ with pid 90
2016-11-20 17:08:24,433 INFO spawned: ‘worker’ with pid 91
2016-11-20 17:08:24,436 INFO spawned: ‘postfix’ with pid 92
2016-11-20 17:08:24,439 INFO spawned: ‘cron’ with pid 93
2016-11-20 17:08:24,441 INFO spawned: ‘memcached’ with pid 94
2016-11-20 17:08:24,462 INFO success: postfix entered RUNNING state, process has stayed up for > than 0 seconds (startsecs)
2016-11-20 17:08:24,586 INFO exited: apache2 (exit status 0; not expected)
2016-11-20 17:08:24,875 INFO exited: postfix (exit status 0; expected)
2016-11-20 17:08:25,877 INFO success: postgres entered RUNNING state, process has stayed up for > than 1 seconds (startsecs)
2016-11-20 17:08:25,880 INFO spawned: ‘apache2’ with pid 200
2016-11-20 17:08:25,880 INFO success: web entered RUNNING state, process has stayed up for > than 1 seconds (startsecs)
2016-11-20 17:08:25,881 INFO success: worker entered RUNNING state, process has stayed up for > than 1 seconds (startsecs)
2016-11-20 17:08:25,881 INFO success: cron entered RUNNING state, process has stayed up for > than 1 seconds (startsecs)
2016-11-20 17:08:25,881 INFO success: memcached entered RUNNING state, process has stayed up for > than 1 seconds (startsecs)
2016-11-20 17:08:25,957 INFO exited: apache2 (exit status 0; not expected)
2016-11-20 17:08:28,092 INFO spawned: ‘apache2’ with pid 261
2016-11-20 17:08:28,181 INFO exited: apache2 (exit status 0; not expected)
2016-11-20 17:08:31,200 INFO spawned: ‘apache2’ with pid 266
2016-11-20 17:08:31,276 INFO exited: apache2 (exit status 0; not expected)
2016-11-20 17:08:31,921 INFO gave up: apache2 entered FATAL state, too many start retries too quickly

 

简单来讲就是apache服务没有起来,在创建docker 容器的时候加上参数 --restart always就可以每次start容器都和重启一样,可以减少出现apache启动冲突的概率

纪念一下docker建站

第一句:docker真是改变人类生产效率的好东西,docker大法好!

考虑搞一套自己的服务器已经好久了,今天算是第一次成功的把三个站点布在了一个服务器(ThinkPad X1C 2014)上,运行还蛮流畅的,下面简述一下建站流程。

数据库:mysql(本机)


sudo apt-get update && sudo apt-get install mysql-server

博客:WordPress


docker run -itd --name wordpress \

-v /opt/wordpress/html:/var/www/html \

-p 12080:80 \

wordpress

项目管理软件:OpenProject


docker run -itd --name openproject \

-v /opt/openproject/pgdata:/var/lib/postgresql/9.6/main \

-v /opt/openproject/logs:/var/log/supervisor \

-v /opt/openproject/static:/var/db/openproject \

-p 10080:80 \

openproject/community

版本控制软件:GitLab


docker run -itd --name gitlab \

--hostname gitlab.endercaster.lan \

-v /opt/gitlab/config:/etc/gitlab \

-v /opt/gitlab/logs:/var/log/gitlab \

-v /opt/gitlab/data:/var/opt/gitlab \

-p 11080:80 \

-p 11022:22 \

-p 11443:443 \

gitlab/gitlab-ce

其实这里可以不用绑定端口的,使用docker run –ip可以指定固定IP(前提是使用自建的网桥docker network create)

这时其实还没完,在wordpress里还要配置apache的servername,否则会无法访问。

反向代理:nginx

这个是在本机安装的,监听80端口,根据host进行转发,一开始本来使用Apache的,但是配置了好久都不能用,经过查阅,nginx的反向代理配置相对简单快速,转而使用nginx。