博文

目前显示的是 2017的博文

使用Python发邮件(顺便写了一个小工具以方便实验室服务器运维)

前言: 命令行方式发邮件是非常重要的一个功能,搞过服务器运维的同学们肯定深有感触。如果一台服务器的 ip 设置为自动分配,服务器每次重启都会改变 ip ,经常去机房查ip是一件非常抓狂的事情。我今天参考了一些资料学习了一下 sendmail ,写了个小脚本,支持发送图片/附件/html等,可以用来发送日志等。
源代码在这里: https://github.com/the0demiurge/Notes/blob/master/Languages/Python/sendmail/sendmail.py
我基于这个函数做了一个自动获取IP(ifconfig)和服务器日志(dmesg)的小脚本,在这里: https://github.com/the0demiurge/Notes/blob/master/Linux/Server_Maintenance/sendmail.py
大致的用法: 只需要构造三个字典变量: sender: 记录发送者的信息,包括smtp服务器地址(比如qq,163什么的一般都会提供,不过需要在设置里面开启smtp才行)receivers: 记录收邮件的人的信息,可以指定多个邮件接收者mail: 定义邮件的内容,包括附件等信息。 配置示例: sender = {'address': 'sender@domain.tld','nickname': 'My Name','password': 'password','smtp_server': 'smtp.domain.tld','smtp_port': 465, } receivers = [('Your Name', 'receiver@domain.tld')]

[SOLVED] Supermicro cannot connect to VGA video port or iKVM

图片
Error Message: iKVM doesn't support add-on VGA device.  Please change the D-SUB connector to Add-on VGA device…
TL;DR:Go HERE and download Supermicro IPMI Utilities and install on your own PCConnect your server to the network (NOTICE: YOU MAY HAVE MORE THAN ONE NETWORK PORT, AND IF YOU DO NOT KNOW WHICH PORT SHOULD CONNECT TO THE NET, CONNECT THOSE ALL), power on and press "DEL" during startup until that error message come outThere will be an IP showing on screen, keep it in your mindGo to your own PC, enter that IP on your web browser, if  you see a webpage below, go to next You may log in and change default username and password. The default username and password are both "ADMIN" Run IPMIView (downloaded at STEP 1). If you are using Windows, it's easy, and go to next step. In my PC (Ubuntu), you can just type:
    tar xvaf IPMIView_2.13.0_build.170504_bundleJRE_Linux_x64.tar.xz
    cd IPMIView_2.13.0_build.170504_bundleJRE_Linux_x64
    ./IPMView20 Click &q…

免费爬墙网站项目(ShadowSocksShare)开发简记

今年(2017)年暑假,我本科刚刚毕业,保研到本校读研。这个暑假,跟同实验室的师兄聊天的时候聊到爬虫,起了一点兴趣,并做了一个小项目玩了玩,并从某些网站爬到了一些漫画看。同样是这个夏天,本来我的首席上谷歌方法(Hosts)失效了,迫使我到处寻找其他免费、不限量科学上网方法,最终选定使用SSR。

  最开始,我写了一个Python脚本,使用qrcode库,可以将网上爬到的ss帐号变成二维码,这样就不需要手动输入服务器信息了,真的很方便。可是好东西只有我自己用,心里过意不去,便想了好多方法来分享我找到的帐号,以便大家都能顺利地访问谷歌。最开始打算用微信公众号自动分享,或者用微信小程序。在一个周末,我便申请了微信开发平台,创建了一个微信公众号。看官方教程发现微信小程序需要用到javascript,而使用微信公众号自动发布新爬到的ss帐号需要web服务器。后来一想,既然js和web我都不会,那我还是学着做一个网站比较好,不必依托于微信。

  说到做到,在某个周日下午,我阅读Flask文档和W3CSchools的HTML教程,以及网上Flask的例子,做出了本项目的最初版本。后来,为了寻找免费服务器托管我的项目,我先后找到了OpenShift和Heroku,并学习了一下两家服务器的使用管理方法,将网站托管到了OpenShift,加入了许多其他网站(因为最初的那个网站加入了反爬措施,我暂时不想用太多精力处理反爬)。为了处理一些难以定位的Bug,和一些莫名其妙的异常,我使用了大量try(当然这并不是一个良好的方案)和logging输出日志,通过阅读日志定位并解决掉了服务器稳定性的问题。当访问量增加,我又学着用了一下多线程threading和并发爬取数据multiprocessing,重构代码,以及最后稍微学习了一点点shadowsocks的源码。

  看到自己GitHub加星我心里很是高兴,毕竟是第一个比较受关注的项目;网站上加了个捐款链接也只是放着玩,没想到还真有不少人捐款,哈哈:)知道有这么多人使用我的小项目,我也使用了大量时间进行维护、改Bug、增加功能、改进UI。收获是对html和javascript熟悉了不少,后来做数据分析需要调用百度地图API之类的就比较轻松了:)建站的时候也有了不少收获,理解了用户、性能、运维、ssl、CDN、代码风格、项目的文件安排等等需要…

2018年1月31日:Linux上国产第三方软件指南

图片
2018年1月31日更新:出现许多选择 最近发现QQ和微信已经有了好几种非常优秀的选择,推荐给大家。顺便感慨一下,AppImage发展得确实越来越好了,期待以后有更大的影响力。
1. QQ/TIM:https://github.com/askme765cs/Wine-QQ-TIM 基于AppImage,加上可执行权限,直接用鼠标点开一般就行。TIM性能还很差,但QQ很完美
2. 微信:electronic-wechat:和上面那个微信比起来,还是上面那个微信略胜一筹(wewechat已经封号,看来只有这个能用了) 3. QQ音乐:coco-music:比较简单,也算够用 4. 网易云音乐:ieaseMusic:自称最好的网易云音乐客户端,确实非常好看。目前bug有点多,但是不太影响使用,外貌协会专用
附录:AppImage资源GitHub: AppImageKit AppImage官方网站 Linux游戏站 AppImage中文论坛 2017年10月16日:今天TM2013突然无法使用及应对方案 在网上一查,发现腾讯说今年九月三十号就不再支持TM了。


网上其他上QQ的办法也有很多,包括Wine TIM、虚拟机(VirtualBox/KVM),也有Crossover的QQ8.9,还有Longene团队后来开发的新版QQ(有deb包)。

Longene提供的deb包经常CPU占到100%,其他方法也很麻烦。所以我的选择是: 不用QQ,改用微信,安装好Google-Chrome之后可以用这个小脚本开启微信网页版。 把这个小脚本放入$PATH里面,如果用Albert的话,可以直接在输入框输入">wechat"直接打开微信


题外话,我不再使用QQ还因为,腾讯系列产品实在太流氓了:
https://program-think.blogspot.com/2010/04/howto-cover-your-tracks-2.html
http://www.chinagfw.org/2010/05/qq_28.html
http://www.chinagfw.org/2009/09/qq_26.html

CharlesTermux发布,谈谈命令行神器Termux

最近我的平板被我重置了,发现重新安装好多包好麻烦,所以弄了一个和CharlesScripts一样的东西,区别在于这里面功能减少了一些,所以可以写安装脚本了。里面做了一个一键安装脚本,直接一键用上我的配置。
网址在这里:https://github.com/the0demiurge/CharlesTermux
Termux简介 Termux有点像一种Linux发行版(当然不是),使用apt作为包管理器,只支持很有限(却很够用)的部分软件,支持ssh(或者作为ssh服务器),可以用python写代码(虽然好多库都装不上),可以写c语言(有clang编译器和gcc,当然gcc要费点力气才装的上),甚至texlive和graphviz都有。 如果出差的话,可以用安卓平板做紧急开发了,配上realvnc,加上罗技的k380蓝牙键盘,能作为超级本的廉价替代品了。 题外话,上个学期我跨校区上课的时候,用它写论文,很给力。 部署方法 运行命令:apt update;apt install -y curl;bash -c "$(curl -fsSL https://git.io/vdUkk)"
功能 自动解决powerline字体等问题,安装fish,omf,tmux,ipython并配置主题,添加源,可以用apt装scipy,numpy,octave等。
可以自动备份安装列表,fork本项目之后可以将你自己维护的列表上传到自己的github。
关于快捷键 我常用的是以下几个功能: 音量键+和Q一块按,会出现一条常用按键。 把这个黑条向左滑,会出现一个输入框,便于粘贴和编辑。把屏幕向左/向右滑动可以切换终端

OpenShift v3 如何自定义域名

图片
经过好几天的探索找到了问题的解决办法,例子请看我的网站 ss.pythonic.life 用一句话来说,就是在 OpenShift 的后台增加一条路由,指向你的域名。 具体步骤: 在选择网页界面登陆之后 Open Web Console,选择你的项目在左侧选择 Applications,选择 Routes





3. 选择右上角的 Create Route,把 Hostname 改成你想用的域名就可以了


4. 在你的域名提供商设置好 CNAME 记录,其中目标为 OpenShift 默认的域名



如果我的回答帮到了你,不妨 Star/Fork/Code Review 一下这个我放在 OpenShift 上的小网站项目

深度学习服务器使用指南(三):如何让终端里面的任务一直运行

简介: 如果你用ssh连到远程服务器跑任务,如果连接断开或者本地电脑关机,那这个任务进程是会被kill掉的。为了避免这种问题,我将在这里介绍3个方法。 1. ssh 在上一篇指南里提了一下,用ssh的T参数: ssh user@host -T "command" 可以提交一个命令之后断开连接,在服务器开一个进程一直跑任务,用起来当然不是很方便,而且有的软件也不支持这么提交,但是不需要配置或者安装特殊的软件。 2. vnc 在第一篇指南中配置好 vnc 之后,可以在 vnc 里面进行各种操作,事后断开 vnc 的连接也没关系。当然,当 vnc 服务器关闭的时候,之前打开的所有软件包括任务都会被 kill 。 3. tmux 当你只想用ssh连接服务器,可以使用 tmux 进行操作。 tmux 可以随意断开连接,再重新连回去,类似于 vnc 吧,优点在于只需要终端操作。
    操作指南: 启动tmux:$tmux断开连接:Ctrl+b, 按完组合键之后按d重新连接:首先,输入 tmux ls 查看已经打开的会话;找到想要连接的会话之后输入 tmux attach -t <会话名称> 就连回去了。其中,第一个会话的会话名称为 “0”, 那么直接 tmux attach -t 0 就能连接回来第一个会话,其他的以此类推。

Cross-Entropy Method (CEM, 交叉熵方法) 与强化学习

前言 之前阅读Deep Reinforcement Learning: Pong from Pixels的时候,作者在文中最后提到“One should always try a BB gun before reaching for the Bazooka. In the case of Reinforcement Learning for example, one strong baseline that should always be tried first is the cross-entropy method (CEM), a simple stochastic hill-climbing “guess and check” approach inspired loosely by evolution.” (如果你做强化学习,就应该先用最原始的方法即CEM先测试一下,当然试验结果也可以充当benchmark进行对比。) 由于(居然)没找到相关的中文资料,我就来简要介绍一下吧。 简介 交叉熵方法是一种蒙特卡洛方法,主要用来优化和重要性采样。和进化算法类似,在空间中按照某种规则撒点,获得每个点的误差,再根据这些误差信息决定下一轮撒点的规则。交叉熵方法之所以叫这个名字,是因为该方法(从理论上来说)目标是最小化随机撒点得到的数据分布与数据实际分布的交叉熵(等价于最小化 KL 距离),尽量使采样分布(撒的点)与实际情况同分布。 该方法适当选取撒点规则就可以适应多目标优化等情况,在组合优化中也有许多应用。本文主要讨论 CEM 在强化学习的策略优化中的应用。 CEM 流程 简介说得花里胡哨,可是实际应用起来基本没有交叉熵什么事,实际应用通常是以下步骤:

首先,建模,将问题的解参数化。比如强化学习中,假设状态 S 为一个 n 维向量,动作总共有 2 种,最简单的想法就是建立一个 n 维参数向量 W ,求 ST  $\times$ W 得到一个标量 Q ,当 Q > 0 则采取第一种动作,否则采取第二种。强化学习问题转化为优化问题。(接下来其实可以使用任何优化算法求解最优的 W ,只不过交叉熵方法可以很快很稳定地收敛。)假设参数 W 属于高斯分布,随机设置一个 n 维向量 $\mu$ 和一个 n 维向量 $\sigma^2$ ,分别对应于 W 的每一维。以 $\mu…

关于为什么Q-Learning与DQN有效

图片
前言: 我之前看了不少Q-Learning的介绍和deep mind的两篇论文:play atari with deep reinforcement learning与human control through deep reinforcement learning,后来复习的时候思考了很久为什么DQN会有效,按照a painless q learning tutorial里面的例子写了一个Q-Learning的代码Q-Learning笔记,想明白了原因。如果理解有误欢迎指正。
本文假设读者明白q-learning和DQN,如果不够明白请参考上面提到的三篇资料和我写的笔记 Q-Learning: Q-Learning是通过迭代来更新Q表的,在更新Q值时,采取ϵ-greedy实际上就是以ϵ的概率进行贪心,$1-\epsilon$的概率进行蒙特卡罗。Q表按照下面的公式进行更新:


从公式中可以看出,当前位置的Q值(价值)等于当前位置的瞬时回报+在当前位置采取所有动作之后的最大Q值(价值)。
以a painless q learning tutorial中的例子为例,如下图所示(左图为地图,右图中的数字表示回报R(state, action):





使用这个地图定义Q表和R(回报)表:


当我们的目标为5时,我们定义到达5的回报为100,经过第一轮迭代之后,Q表中$$[1,5]、[4,5]、[5,5]$$的Q值就是$$R(any state, 5) + \gamma \times Max[Q(next state, all actions)]=100+\gamma  \times 0=100$$,其他"[状态,动作]对"的Q值为0.而重点在于之后的迭代,当遇到第二轮迭代的时候,$$[3,1]、[3,4]、[0,4]$$的Q值由0变为$$0+\gamma\times100$$,实际上Q值在不断地向所有可行初始位置反向扩散,由于$\times<1$,而距离目的地越近,Q值也就越大。也就是说,选择Q值最大的路径就是最优路线。 观看Q表的扩散,可以运行我写的小程序,使用jupyter notebook运行。 地址在这里,也可以通过网页直接观察在我电脑上运行的结果。 DQN为何会有效? DQN实际上是使用神经元网络来拟合Q表,原本的Q表为$q=Q(state,…

如何在终端(apt)使用ShadowSocks代理--tsocks简介及教程

有的时候安装Google的包,还是会连接失败,而apt本身不支持socks代理。近期hosts不给力,所以还是要靠ShadowSocks。这里简要介绍一下tsocks。
安装方法: 用apt就能装 配置方法: 编辑/etc/tsocks.conf 如果没有以下信息,则加入:
local = 127.0.0.0/255.0.0.0
server = 127.0.0.1
server_type = 5
server_port = 1080 其中,第一行指定不走代理的ip',我们指定凡是127开头的都不走代理。server_type官方要求为5才能用,剩下俩看名字就知道是干啥的,采取默认即可。 使用方法: tsocks command 测试: tsocks curl ip.cn
tsocks curl google.com 使用apt: sudo tsocks apt update 注意:经过尝试发现sudo要放在tsocks前面,否则apt会走不了代理。 可以试试我写的apt bash小脚本,把它放到/usr/local/bin并加入可执行权限就可以运行。

免费ShadowSocks帐号分享网页

之前在这里写的一个小爬虫,我把它做成了网页,放在了openshift-v3上面,这样就不用自己部署了。
点击这个链接查看:ss.pythonic.life
如果你想部署到自己的服务器或openshift帐号上,可以点击这里查看源码和部署指南。
如果用起来觉得不错,不妨给我加个星呗~

这里可以直接看我的网页:

刚刚写的自动生成免费共享ShadowSocks二维码和URI的Python脚本

图片
自从上次介绍了一个免费的ShadowSocks帐号共享网站,我女朋友(其实主要是我自己)嫌手动添加ss帐号到各个软件太麻烦,所以写了一个小python脚本,可以自动从这个页面解析到各种配置,并生成URI和二维码,方便一键配置。

本代码使用了regex beautifulsoup4 qrcode这三个第三方库,只支持Python3以上的版本,在Linux下写成,请读者自行安装这三个第三方库,如果遇到任何运行问题请联系我。
如果觉得这个脚本帮到了你,不妨为我的GitHub项目加个星呗~

代码地址:
https://github.com/the0demiurge/Python-Scripts/blob/master/src/MinorProjects/shadowsocks_free_qrcode.py

运行截图:



PRML学习笔记(第二章,一)共轭分布与拉格朗日乘子

图片
共轭分布与拉格朗日乘子 对于分类器来说,其实概率分布的共轭分布是一个数学trick,它的作用在于不断使用数据更新分类器(后验概率)的参数之后,后验概率的数学形式仍不变,其实只是为了省事,并没有那么强的物理意义。

在公式推导中提到了拉格朗日乘子,之前上课的时候学了一部分,但是还是不很理解,今天看了这个知乎回答对其有了进一步加深理解:拉格朗日乘子法其实也是一个数学trick,构造一个同解的最优化目标函数,引入$\lambda$的同时使最优解必满足约束条件,而我们也只关心最优解的情况,所以实际上加入拉格朗日乘子是把约束条件加入到最优化目标中的一种等效方法。

该回答的备份如下:
作者:戏言玩家
链接:https://www.zhihu.com/question/38586401/answer/105588901
来源:知乎
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

这个可以比较直观的解释。
想象一下,目标函数是一座山的高度,约束是镶嵌在山上的一条曲线如下图。(渣画技看看就好了)

&amp;lt;img src="https://pic1.zhimg.com/ecf06d062b493f1674bd81d34d3446a8_b.png" data-rawwidth="1020" data-rawheight="539" class="origin_image zh-lightbox-thumb" width="1020" data-original="https://pic1.zhimg.com/ecf06d062b493f1674bd81d34d3446a8_r.png"&amp;gt;
你为了找到曲线上的最低点,就从最低的等高线(0那条)开始网上数。数到第三条,等高线终于和曲线有交点了(如上图所示)。因为比这条等高线低的地方都不在约束范围内,所以这肯定是这条约束曲线的最低点了。
而且约束曲线在这里不可能和等高线相交,一定是相切。因为如果是相交的话,如下图所示,那么曲线一定会有一部分在B区域,但是B区域比等高线低,这是不可能的。

&amp;lt;img src="https://pic3.zhi…

2017年6月爬墙简报->推荐一个GitHub项目

2017.6.20更新:后来发现hosts出问题原来是我修改的脚本写错了。。去广告的hosts把原来的爬墙hosts给覆盖掉了。把这个修改之后还是和以前一样好用,不过和ss比起来确实还是不够快。

以下是原文:
最近爬墙不太平啊,Google Hosts又没有以前那么快了,Linux爬墙用Lantern也没有那么舒服了——Lantern给的流量太少,不堪用。

最近发现了一个GitHub项目https://github.com/Alvin9999/new-pac,已加星。

给几个关键词,大家去找找就行了。

ShadowSocks共享帐号ShadowSocks-qt5浏览器插件(谷歌Switchy Omega,火狐AutoProxy-ng

Tux Cursor: 使用Linux吉祥物小企鹅当作你的鼠标指针

图片
Tux cursor!

网址:
原始版本可变更大小的版本 安装方法: 解压然后把tuxcursor文件夹复制到/usr/share/icons或~/.icons里面,就可以在gnome-tweak里面换了

最后附赠一个Bread Cursors https://www.gnome-look.org/p/1176812/

Ubuntu Gnome 酷炫完整指南(二):主题篇

图片
我的各种配置全都放在https://github.com/the0demiurge/MyScripts,代码质量很一般,只是functional,欢迎大家Fork&提交PR~ Ubuntu Gnome酷炫完整指南系列: Ubuntu Gnome 酷炫完整指南(一):小工具篇 Ubuntu Gnome 酷炫完整指南(二):主题篇 Ubuntu Gnome 酷炫完整指南(三):Gnome-shell 扩展篇
5月30日更新:加入了FireFox的Arc主题和Chrome的插件Scroll Style 主题: https://github.com/andreisergiu98/arc-flatabulous-theme
arc-flatabulous-darker是最好的主题
图标: numix系列 https://github.com/numixproject/numix-icon-theme-circle https://numixproject.org/
papirus系列
ultra-flat 背景: 把我写的小脚本放到crontab里面,然后在gnome-tweak里面设置好脚本里设置的图片下载地址即可自动修改背景为Google Earthview背景 https://github.com/the0demiurge/CharlesScripts/blob/master/charles/bin/wallpaper-earthview Chrome设置: 使用GTK+主题和系统title bar和borders,上面的按钮就不会那么丑
另外使用Scroll Style插件把滚动栏风格改一下,你会发现非常值得。插件链接
有机会可以找个时间讲讲我的Chrome插件。
FireFox主题: 直接放网址:Arc 主题合集 里面有三种配色,我选的是Darker

字体: nerdfont
https://github.com/ryanoasis/nerd-fonts
fcitx 字体:  Config->Appearance->font

libreoffice 图标: Tools->Optins->LibreOffice->View->User Interface->Icon size and style, choose breez…

Ubuntu Gnome 酷炫完整指南(三):Gnome-shell 扩展篇

图片
这是我使用的Gnome-shell拓展列表,以后再写介绍,几乎各个都是精品。 我的各种配置全都放在https://github.com/the0demiurge/MyScripts,代码质量很一般,只是functional,欢迎大家Fork&提交PR~
Ubuntu Gnome酷炫完整指南系列:
Ubuntu Gnome 酷炫完整指南(一):小工具篇
Ubuntu Gnome 酷炫完整指南(二):主题篇
Ubuntu Gnome 酷炫完整指南(三):Gnome-shell 扩展篇
Installed ExtensionsAlternateTabbyfmuellner
ONOFF System extension Substitute Alt-Tab with a window based switcher that does not group by application. Appfolders Management extensionbyMaestroschan
ONOFF System extension An easy way to manage "appfolders" (folders in the applications view) directly from the applications view. Bonus feature : it is possible to change the number of columns. Applications Menubyfmuellner
ONOFF System extension Add a category-based menu for applications. Auto Move Windowsbyfmuellner
ONOFF System extension Move applications to specific workspaces when they create windows. Autohide Batterybyiskin
ONOFF <

此博客中的热门博文

免费爬墙网站项目(ShadowSocksShare)开发简记

Ubuntu Gnome 酷炫完整指南(一):小工具篇