程序員有哪些平時自己開發的小工具來簡便工作?


又看到了一個好的問題,正好我有好的答(guang)案(gao)

1. 在我需要把我的幾百書錄入的時候,我想了一個APP來掃描書後面的條形碼,再通過Douban API來獲取書名,最後上傳到我的伺服器上。

GitHub: GitHub - phodal-archive/bookshelf: A Android Application for count your books.

2. 在我還在使用諾基亞手機的時候,我寫了一個APP來獲取圖片的地理信息,再將圖片顯示到地圖上。

GitHub: GitHub - phodal/onmap: python exifread cartodb build self small image data

3. 再我懶得寫測試的時候,我寫了一個工具來幫我Diff測試前後DOM的變化:

GitHub: GitHub - phodal/luffa: A Test Framework Helper for Fun

4. 在我需要一個技術趨勢的時候,做了一個簡單的趨勢雷達

GitHub: GitHub - phodal/techstack: 項目技術棧趨勢圖

5. 在我想總結一些學習的路線的時候,做了一個技能樹:

GitHub: GitHub - phodal/sherlock: Skill Tree Sherlock

6. 在我想學React和做簡歷的時候,給自己了一個基於Markdown的簡歷生成器:

GitHub: GitHub - phodal/resume: RESUME Generator

7. 在我的女朋友需要一個微信編輯器的時候,我做了一個簡單的微信編輯器:

GitHub: GitHub - phodal/congee: A Web Editor design for Baimizhou

8. 在我想使用Badge放我GitHub的時候,就有了這個

GitHub: GitHub - phodal/brand: Design for Fun

。。。。廣告打得太多了,就不繼續打了。。。。

更多Idea請見:GitHub - phodal/ideas: Ideas of Phodal in Practise

關於如何實踐這些Idea,請參考:GitHub - phodal/ideabook: 一個全棧增長工程師的練手項目集. A Growth Engineering Idea in Action.


2016.12.7更新vc代碼自動生成工具和SlxCom

---------------------------------------------------------------------------------------------

0、從系統日誌中讀取每一天的開關機時間並形成excel表和圖:

下載地址:

PcActiveStat/PcActiveStat_src/PcActiveStat/Release at master · Shilyx/PcActiveStat · GitHub

----------------------以上內容為2016.5.19添加---------------------------------

1、平時新建vs工程太多配置項(加入64位生成、Release版調試信息格式、附加包含目錄、附加庫目錄、計算相對路徑),加上有時候需要直接創建一個某種類型的工程(例如sdk對話框、托盤圖標、系統服務、動態庫),再有時候可能會建多個版本的工程(vc6、vs2008、vs2010、vs2012、vs2013),所以寫了個工具,由模板自動生成工程,並添加到同一個解決方案:

下載地址:vc代碼自動生成工具

(2016.12.7)下載地址:vc代碼自動生成工具2016.12 - 下載頻道 - CSDN.NET

更新了部分模板中存在的問題;使用中文模板名,支持保存上次的配置:

2、區域網的arp工具:

攻擊成功後本機會收到目標機器的包,用抓包工具就可以分析了。

3、寫一個屏幕保護:

從黑點自動尋路到紅點,已開源,代碼位置:Shilyx/MazeScrnSave · GitHub

配置項:

4、抓包工具,針對所有網卡上的所有埠上的疑似HTTP包:

地址:【原創】UrlSniffer,Url嗅探器

5、突破路由器的dns過濾,目前傻瓜路由器都支持域名過濾,不讓指定的dns請求包通過路由器,達到控制內網上網行為的目的。

已通過工具突破,地址:【原創】突破路由器的域名過濾

6、一個後門,安裝後即便不登陸系統就可以在登陸界面通過特定操作調出後門程序,為所欲為(非網路版)

7、方便工作生活的工具集合:SlxCom插件,這個是我一直維護中的一個系統增強插件,功能很多。

a,複製圖片到qq。如果桌面上有個圖片,想發送給qq好友,這時如果拖動到聊天窗口,則成了發送文件;打開後截圖,又恐失真;gif就更麻煩了,估計需要藉助瀏覽器。

插件提供了複製qq圖片的功能,右擊圖片複製就可以到qq窗口粘貼了。

b,重命名幫助。大家都知道按f2重命名文件,在插件的幫助下,繼續按f2,會自動選擇文件名部分、自動選擇擴展名部分、自動選擇整個文件名部分來回循環,幫你選擇要改動的部分。

c,文件哈希值計算和對比功能。這個功能很多軟體都有,也順帶提供了,直接放到了文件的屬性頁中。

d,文件時間修改功能,偷看了文件,直接統一將訪問時間改回去。

e,通過快捷鍵置頂指定窗口(或取消置頂)。

f,通過快捷鍵隱藏任意窗口到系統托盤區(可恢復)。

圖為chrome君、vs2013君、vs2008君在托盤中安坐。

g,通過快捷鍵打開任意窗口所屬程序所在的目錄,或直接殺死所屬進程。

h,右擊com組件程序時會提供註冊和卸載的菜單。

i,手動校驗任意文件的數字簽名,給所有的具有合法數字簽名的程序加入一個圖標覆蓋。

這裡可以看出,hosts文件被修改過。

j,右擊文件,複製其完成路徑(Win7自帶此功能,主要彌補xp等的不足)。類似彌補xp不足的功能還有右擊文件夾打開命令提示符,右擊快捷方式提示打開文件所在位置,在任務欄右側模擬一塊區域用於「顯示桌面」等。

k,註冊表關鍵位置一鍵直達,自動跳轉。

l,手動重啟explorer,用於強制某些設置生效。重啟後會自動打開調用命令時的目錄並定位的原文件。

m,右擊任意文件,都可以強制以notepad打開,直接看最原始的內容。

n,查看文件引用,右擊任意文件,可以查看哪個程序佔用了此文件,並可以強制解鎖。

(2016.12.7)o,右鍵拖動文件創建硬鏈接;郵件拖動文件夾創建軟鏈接。軟鏈接尤其好用,妙不可言:

(2016.12.7)p,支持整點報時,可選出現一個錶盤,也可以關閉。

(2016.12.7)q,剪貼板工具,自動轉義字元串,自動定位剪貼板中的註冊表路徑。

(2016.12.7)r,運行對話框上增加「提權」按鈕(前提是沒有關閉uac):

其實這個窗口上還隱藏了一個按鈕,加速鍵為E,可以更加靜默的提權,一定程度上避免談UAC窗,適合以管理員許可權運行有把握的程序。

地址:Shilyx/SlxCom_bin

附:本程序不要求管理員許可權(運行在explorer中),不具備聯網能力。

8、文件隱藏工具,讓系統外殼看不到指定的文件,對付一般人可以。

9、遠程桌面獨佔程序,連接上遠程桌面後運行此程序,可以確保不被別人擠下來。

10、用於linux程序調試的dbgview,可以在windows端查看linux上程序的日誌,界面仿照微軟的dbgview工具。

11、惡作劇程序,運行後鎖定桌面,各種系統快捷鍵通通屏蔽,右擊屏幕出現隨機算術題,全部答對才可以解鎖,當然,是留有快速解鎖的後門的。


恩……被建議修改了……然而我並沒有放出什麼很不和諧的東西啊……

總之刪去了源碼中的鏈接以及截圖。

=======================================================

python爬蟲練手的時候覺得爬豆瓣電影沒意思,不如爬點島國XX。

然後就寫了個爬蟲,爬取某網站下某一分類電影的封面以及番號。然後在自己電腦上就可以舒坦地篩選封面了。

代碼如下,

#!/usr/bin/python3
# -*- coding: utf-8 -*-
import requests
from bs4 import BeautifulSoup
from threading import Thread
import queue

_session = requests.session()
url_base = "URL WAS HERE"
page = "1"
for page in range(0,100):
print(page)
r = _session.get(url_base + str(page))
print(r)
soup = BeautifulSoup(r.content)
box = soup.find_all("div", class_="item")
av = []
for i in range(len(box)):
av += [[box[i].div.img["src"], box[i].div.img["title"],box[i].find("date").text]]
DMM_session = requests.session()
for i in av:
img = DMM_session.get(i[0].replace("ps","pl"),stream=True)
with open("covers/"+i[2]+"__"+i[1][:40].replace("[^w]","")+".jpg","wb") as f:
f.write(img.content)
f.close()

後來因為下載的圖片實在是太多了,以及被女朋友鄙視了……就沒有繼續開發了。

使用前需要在當前目錄下創建一個covers文件夾。

效果大致如下


還是學生,不務正業造了好些雜七雜八的小輪子,下面分享一些出來,希望偶爾也能助你前行。

1 晨間日記模板及習慣培養模板-Web應用版。自己用Evernote記了很長一段時間,覺得編輯每天的模板比較繁瑣浪費時間,寫了個網頁版的,每天打開網址即可記錄,時間日期累計記錄天數等等自動記錄,so easy。亦加入習慣培養模板,記錄自己的習慣培養,增加滿滿的動力。

傳送門:lanbing510/GTDWeb · GitHub

2 閱讀摘錄工具。平時讀書和讀論文有很多寫的很贊的句子等等,摘抄起來很不方便(pdf中複製-&>最小化pdf-&>粘貼到文檔-&>打開pdf繼續閱讀),還會中斷閱讀思路。於是乎,又開始不務正業,寫了個小工具,從此閱讀中遇到好的句子,可以ctrl+v一下然後接著閱讀即可,摘錄的句子會自動保存,還可以加入自己的注釋,自動保存截圖等。

傳送門:lanbing510/Collect · GitHub

3 論文篩選工具。計算機視覺領域的人應該都知道cvpapers這個網站,頂會的論文合集,但每個合集的論文數都非常多,找自己領域相關或感興趣的很不方便,於是乎,又開始不務正業,寫了個小工具,用來篩選感興趣的論文,大大減少了人工篩選的工作量。

傳送門:lanbing510/CVPapersTool · GitHub

4 爬豆瓣找好書工具。業餘時間很喜歡讀書,讀書當然要讀自己感興趣的經典的好書,一般都是通過豆瓣評分和評論來篩選。過來一段時間發現可以看的書有不多了,於是乎,又開始不務正業,寫了個豆瓣讀書的爬蟲,爬下了豆瓣所有300多萬本書籍的信息,然後根據評分和評論人數等信息篩選。現在,愁的不是沒好書看了,愁的是時間。

傳送門:lanbing510/DouBanSpider · GitHub

5 圖像標註工具。工作上需要對圖像上目標進行標註,網上怎麼都找不到合適的工具,於是乎,又開始不務正業,寫起了工具,寫完了不說,繼續不務正業的增加半自動標註。

傳送門:lanbing510/ImageLabel · GitHub

6 定時鎖屏改變熬夜作死小工具。前一段時間養成了熬夜的習慣,每每到了回宿舍的時間點還會悶在實驗室寫程序,於是乎,又開始不務正業,自己寫了個定時鎖屏的工具作死,到點後會自動鎖屏第二天才會自動解鎖,鎖屏時間段內無法使用電腦,提(bi)醒(po)你停下來休息。現在已經改了熬夜的習慣,只有這個工具每天自己鎖屏解屏鎖屏解屏。

傳送門:lanbing510/SleepHook · GitHub

7 自動簽到掙Karmas,隨意下高質量電子書籍。自己的書除了特別想收藏的,自己一般都是從ReadFar網站找高質量的電子書。下載需要的Karmas點嗖嗖的降,於是乎,又開始不務正業,寫了個自動簽到掙Karmas的腳本,每天可以自動的賺上幾個Karmas。不知不覺中已近千的Karmas點了。

8 自動簽到掙度娘下載券。某一天,從百度文庫下載,開始要了下載券。哎,沒有,於是乎,又開始不務正業,在7的基礎上填了個百度文庫自動簽到掙券的部分。現在不至於乾瞪眼了。

9 照片整理工具。手機里的照片很久不整理整天提示空間不足,自己一般都是將照片拷到電腦以年月命名的文件夾,方便存儲和回首歲月時光,這次看到鋪天蓋地的照片,整個人都雜亂了,於是乎,寫了個小腳本,一鍵整理了近千張照片,整個世界都乾淨了。

傳送門:按拍攝日期一鍵歸類照片 Python

10 CSDN博客完整備份工具。由於最近博客搬家,想對CSDN博客做個完整的本地備份,但官網上提供的備份工具根本不能用,其他的備份工具要麼是只備份網頁,不能備份網頁中的圖片等資源,要麼就是收費。於是乎,自己又花幾個小時造了次輪子,將CSDN博客做了完整的備份。Python實現,免費開源,可自由DIY去備份其他博客。

傳送門:lanbing510/CSDNBlogBackup · GitHub

11 鏈家爬蟲。最近計劃在北京買房,誰想房價開始瘋長,鏈家的房價等數據分析只給了一小部分,遠遠不能滿足自己的需求。於是晚上花了幾個小時的時間寫了個爬蟲,爬下了北京所有的小區信息及北京的所有歷史成交記錄。

傳送門:鏈家爬蟲 | 冰藍記錄思考的地方

現在遇到了學業壓力,於是乎,不能再不務正業下去了。


我的女神也在知乎,所以就用python寫了個小爬蟲,把她在知乎的動向發到我郵箱

知乎的個人主頁只能顯示關注提問回答等,不會顯示在哪裡評論什麼東西,但是女神評論多於點贊,所以我就建了一個小號,關注問題/關注人/收藏夾都和女神的一樣,定時抓取timeline上的問題回答及發現里的熱門問題的所有回答的評論,篩選是否有女神的

代碼很簡單但是很有效,買了許多女神評論「好漂亮/好美/好像要」的禮物,多了好多共同話題

別問我要代碼,在女神有男票以後已經刪了,果然一切都要看臉


即時公式預覽器,當然,對我來說只是個demo級別的東西,不過也不難用。

做個這樣的東西其實也沒啥難的。


  1. 獲取實時可用代理ip
  2. 微信訂閱號集成日常功能開發
  3. 把文本轉成語音的腳本

1、日常工作中經常需要用到代理ip,雖然某寶可以買但是不想買,想到有一些網站上面有可用的ip代理,但是大家都知道這些網站裡面10個有9個是不能用的,好了現在就寫了一個腳本,提取這種網站的所有代理ip一一進行測試,獲取實時可用的代理ip,代碼分享:

#encoding=utf8

import urllib2
import cookielib
import lxml.html
from __builtin__ import False
import threading
import time

ip_list = []#最後的可用列表

def prepare():
cj = cookielib.MozillaCookieJar()
cookie_support = urllib2.HTTPCookieProcessor(cj)
opener = urllib2.build_opener(cookie_support)
opener.addheaders = [("User-agent","Mozilla/5.0 (X11; Linux x86_64; rv:38.0) Gecko/20100101 Firefox/38.0 Iceweasel/38.3.0")]
urllib2.install_opener(opener)

def page(j):
prepare()
try:
url = "http://www.xicidaili.com/wn/"+str(j)
response = urllib2.urlopen(url)
http = response.read().decode("utf-8")
doc = lxml.html.fromstring(http)
results = doc.xpath("//div/table[@id="ip_list"]/tr/td/text()")
return results
except:
pass

def page_content(j):
url = "http://www.xicidaili.com/wn/"+str(j)
results = page(j)
for i in range(1,100):
try:
proxy = results[i*10]+":"+results[i*10+1]
sContent = urllib2.urlopen(url,timeout=3).getcode()
if(sContent == 200):
print(proxy)
ip_list.append(proxy)
else:
print("***")
except:
pass

class everpage(threading.Thread):
def __init__(self,page):
threading.Thread.__init__(self)
self.page = page
self.thread_stop = False

def run(self):
while not self.thread_stop:
page_content(self.page)

self.stop()

def stop(self):
self.thread_stop = True

if __name__=="__main__":
for i in range(1,100):
try:
everpage(i).start()
time.sleep(5)
except:
pass

2、(微信訂閱號)很多時候我們希望一些日常的功能能集合到一共庫中,比如有一天我突發奇想,想把日常需要用到的功能都集成到一個微信公眾號中,於是就有了以下的功能:

python基於新浪sae開發的微信公眾平台,實現功能:

輸入段子---回復笑話

輸入開源+文章---發送消息到開源中國

輸入快遞+訂單號---查詢快遞信息

輸入天氣---查詢南京最近五天天氣狀況

輸入微博熱點---回復微博當前熱門話題

輸入電影+名稱---回復百度雲盤中搜索的鏈接

主要代碼如下:

# -*- coding: utf-8 -*-
import hashlib
import web
import lxml
import time
import os
import urllib2,json
import urllib
import re
import random
import hashlib
import cookielib
from urllib import urlencode
from lxml import etree

class WeixinInterface:

def __init__(self):
self.app_root = os.path.dirname(__file__)
self.templates_root = os.path.join(self.app_root, "templates")
self.render = web.template.render(self.templates_root)

def GET(self):
#獲取輸入參數
data = web.input()
signature=data.signature
timestamp=data.timestamp
nonce=data.nonce
echostr=data.echostr
#自己的token
token="weixin9047" #這裡改寫你在微信公眾平台里輸入的token
#字典序排序
list=[token,timestamp,nonce]
list.sort()
sha1=hashlib.sha1()
map(sha1.update,list)
hashcode=sha1.hexdigest()
#sha1加密演算法
#如果是來自微信的請求,則回復echostr
if hashcode == signature:
return echostr

def POST(self):
str_xml = web.data() #獲得post來的數據
xml = etree.fromstring(str_xml)#進行XML解析
content=xml.find("Content").text#獲得用戶所輸入的內容
msgType=xml.find("MsgType").text
fromUser=xml.find("FromUserName").text
toUser=xml.find("ToUserName").text
if(content == u"天氣"):
url = "http://m.ip138.com/21/nanjing/tianqi/"
headers = {
"Connection": "Keep-Alive",
"Accept": "text/html, application/xhtml+xml, */*",
"Accept-Language": "en-US,en;q=0.8,zh-Hans-CN;q=0.5,zh-Hans;q=0.3",
"User-Agent": "Mozilla/5.0 (Windows NT 6.3; WOW64; Trident/7.0; rv:11.0) like Gecko"}
req = urllib2.Request(url, headers = headers)
opener = urllib2.urlopen(req)
html = opener.read()
rex = r"(?&<=img src="/image/s[0-9].gif" alt=").{1,6}(?=" /&>)"
rexx = r"(?&<=div class="temperature">).{5,15}(?=&)"
n = re.findall(rex,html)
m = re.findall(rexx,html)
str_wether = ""
for (i,j) in zip(m,n):
str_wether = str_wether + j + " " +i + "
"
return self.render.reply_text(fromUser,toUser,int(time.time()),"最近五天天氣:
"+str_wether)
elif(content[0:2] == u"電影"):
keyword = urllib.quote(content[2:].encode("utf-8"))
url = "http://www.wangpansou.cn/s.php?q="+keyword
headers = {
"Connection": "Keep-Alive",
"Accept": "text/html, application/xhtml+xml, */*",
"Accept-Language": "en-US,en;q=0.8,zh-Hans-CN;q=0.5,zh-Hans;q=0.3",
"User-Agent": "Mozilla/5.0 (Windows NT 6.3; WOW64; Trident/7.0; rv:11.0) like Gecko"}
req = urllib2.Request(url, headers = headers)
opener = urllib2.urlopen(req)
html = opener.read()
rex = r"https?://pan.baidu.com.*?uk=[0-9]{10}.*[d+?]""
m = re.findall(rex,html)
string = u""
for i in m:
string = string + i + "
"
return self.render.reply_text(fromUser,toUser,int(time.time()),u"以下是電影鏈接:
"+string)
elif(u"段子" in content):
url_8 = "http://www.qiushibaike.com/"
url_24 = "http://www.qiushibaike.com/hot/"
headers = {
"Connection": "Keep-Alive",
"Accept": "text/html, application/xhtml+xml, */*",
"Accept-Language": "en-US,en;q=0.8,zh-Hans-CN;q=0.5,zh-Hans;q=0.3",
"User-Agent": "Mozilla/5.0 (Windows NT 6.3; WOW64; Trident/7.0; rv:11.0) like Gecko"}
req_8 = urllib2.Request(url_8, headers = headers)
req_24 = urllib2.Request(url_24,headers = headers)
opener_8 = urllib2.urlopen(req_8)
opener_24 = urllib2.urlopen(req_24)
html_8 = opener_8.read()
html_24 = opener_24.read()
rex = r"(?&<=div class="content">).*?(?=&