<?xml version="1.0" encoding="UTF-8"?><rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>云居</title>
	<atom:link href="http://gerry.lamost.org/blog/?feed=rss2" rel="self" type="application/rss+xml" />
	<link>https://gerry.lamost.org/blog</link>
	<description></description>
	<lastBuildDate>Tue, 17 Jan 2023 08:20:36 +0000</lastBuildDate>
	<language>zh-Hans</language>
	<sy:updatePeriod>
	hourly	</sy:updatePeriod>
	<sy:updateFrequency>
	1	</sy:updateFrequency>
	<generator>https://wordpress.org/?v=6.7.5</generator>
	<item>
		<title>华米手表2023月历表盘</title>
		<link>https://gerry.lamost.org/blog/?p=296260</link>
					<comments>https://gerry.lamost.org/blog/?p=296260#respond</comments>
		
		<dc:creator><![CDATA[gerry]]></dc:creator>
		<pubDate>Tue, 17 Jan 2023 08:20:36 +0000</pubDate>
				<category><![CDATA[砍柴铸刀]]></category>
		<category><![CDATA[Pebble]]></category>
		<category><![CDATA[手表]]></category>
		<category><![CDATA[日历]]></category>
		<category><![CDATA[表盘]]></category>
		<category><![CDATA[装备]]></category>
		<guid isPermaLink="false">https://gerry.lamost.org/blog/?p=296260</guid>

					<description><![CDATA[多年来，我一直习惯佩戴手表。查看时间日期时抬一下手腕总比掏出手机更方便。2012年，Pebble在Kickst [&#8230;]]]></description>
										<content:encoded><![CDATA[<div id="attachment_296279" style="width: 210px" class="wp-caption alignleft"><img fetchpriority="high" decoding="async" aria-describedby="caption-attachment-296279" class="wp-image-296279 size-full" src="https://gerry.lamost.org/blog/wp-content/uploads/2023/01/Pebble_Timely.jpg" alt="Pebble Time" width="200" height="376"/><p id="caption-attachment-296279" class="wp-caption-text">Pebble Time 的Timely月历表盘</p></div>
<p>多年来，我一直习惯佩戴手表。查看时间日期时抬一下手腕总比掏出手机更方便。2012年，Pebble在<a href="https://www.kickstarter.com/" target="_blank" rel="noopener">Kickstarter</a>上众筹大获成功后，卡西欧电子表就不再是我的首选。Pebble拥有小巧的体积，可以同步显示手机信息的高对比度电子纸屏幕，长达一周的续航，以及不到千元的价格。这在当时都是革命性的跨越，让它迅速在大众市场获得成功。Pebble市场中丰富的表盘和应用，更是满足了许多不被大公司考虑的小众需求。2014年，苹果、谷歌等巨头纷纷进入这个新兴的市场。而Pebble 的第二代产品仍能在2015年众筹超过 2030 万美元，成为 Kickstarter 成立以来筹资速度最快和筹资总额最高的明星产品。我也很喜欢其中配备彩屏的Pebble Time。它的月历视图表盘(<a href="https://github.com/cynorg/PebbleTimely" target="_blank" rel="noopener">Timely</a>，精美的彩色版在收购后悄悄下架了……)和多样化的应用定义了我对智能手表的印象。可惜Pebble在不久后陷入了资金危机，于2016年被竞争对手Fitbit收购，随后便消失在公众的视线中。手表虽然还戴在我的手上，但表盘和应用市场都先后停止服务，无法继续使用，使得这块硬件完好的手表形同鸡肋。虽然有<a href="https://rebble.io/" target="_blank" rel="noopener">rebble</a>社区志愿进行后续维护，但产品的没落已无可挽回。我第一次意识到依赖网络服务的设备并不完全属于用户。我开始以它为标准期待一块有更长待机时间的智能手表。但后来的这些产品都没能在软件生态上达到Pebble的高度。苹果的iWatch纵然有许多应用，可它的待机时间短到影响使用。</p>
<p>2017年华米科技推出同样采用彩色墨水屏的米动手表青春版1S(英文名Amazfit bip)，待机时间超过1个月。即使放在今天也是待机时间最长的智能手表之一。虽然官方提供的表盘很少，不过<a href="https://amazfitwatchfaces.com/" target="_blank" rel="noopener">AW用户社区</a>中的月历表盘起码满足了我对智能手表的基本需求。只是华米手表的月历表盘无法通过接口自动生成，只能以图片的形式逐月定制。每年的月历都是一个独立的表盘。于是每年跨年都需要手动更换表盘。如果喜欢的表盘没有人及时更新，只能自力更生。我把相关工具和方法记录在这里，算是个纪念。<br />
<span id="more-296260"></span></p>
<p>青春版的表盘编辑可以使用<a href="http://gerry.lamost.org/upload/rar/AmazfitBipTools-1.0.3.1.zip" target="_blank" rel="noopener">AmazfitBipTools工具</a> ，在终端命令行下用下列命令解压或压缩表盘（GTR的处理方法类似）。<br />
<code><br />
WatchFace.exe -size176 "Bip.bin"<br />
WatchFace.exe -size176 "Bip/Bip.json"<br />
WatchFace.exe -size390 "GTR.bin"<br />
WatchFace.exe -size390 "GTR/GTR.json"<br />
</code></p>
<div id="attachment_296262" style="width: 186px" class="wp-caption alignright"><a href="http://gerry.lamost.org/upload/23/wk-2023_packed.bin" target="_blank" rel="noopener"><img decoding="async" aria-describedby="caption-attachment-296262" class="wp-image-296262 size-full" src="https://gerry.lamost.org/blog/wp-content/uploads/2023/01/wk-2023_packed_static.png" alt="Bip 月历表盘2023-1" width="176" height="176" srcset="https://gerry.lamost.org/blog/wp-content/uploads/2023/01/wk-2023_packed_static.png 176w, https://gerry.lamost.org/blog/wp-content/uploads/2023/01/wk-2023_packed_static-150x150.png 150w" sizes="(max-width: 176px) 100vw, 176px" /></a><p id="caption-attachment-296262" class="wp-caption-text">Bip 月历表盘2023-1（kota2）</p></div>
<div id="attachment_296261" style="width: 186px" class="wp-caption alignright"><a href="http://gerry.lamost.org/upload/23/movical2023cn.bin" target="_blank" rel="noopener"><img decoding="async" aria-describedby="caption-attachment-296261" class="wp-image-296261 size-full" src="https://gerry.lamost.org/blog/wp-content/uploads/2023/01/movical2021_hun3_packed_static.png" alt="Bip 月历表盘2023-2" width="176" height="176" srcset="https://gerry.lamost.org/blog/wp-content/uploads/2023/01/movical2021_hun3_packed_static.png 176w, https://gerry.lamost.org/blog/wp-content/uploads/2023/01/movical2021_hun3_packed_static-150x150.png 150w" sizes="(max-width: 176px) 100vw, 176px" /></a><p id="caption-attachment-296261" class="wp-caption-text">Bip 月历表盘2023-2（HD21）</p></div>
<p>表盘解压后会看到一个同名的json文件和相关的图片资源。这些图片的显示位置和调用顺序都在json文件中设定。更新月历表盘只需要编辑12个月的对应图片然后重新打包即可。需要格外注意的是由于青春版的内存限制，表盘大小不能超过 200kB。表盘制作好之后，可以通过替换系统表盘的办法（将下载的第三方表盘bin文件改成手机中的任意系统表盘文件的名字并覆盖替换，然后同步该系统表盘即可），或者直接用 Notify for Amazfit &amp; Zepp 软件进行更新。相比之下，10年前发布的Pebble在软件生态和使用体验上都要简单得多。</p>
<div id="attachment_296267" style="width: 210px" class="wp-caption alignright"><a href="http://gerry.lamost.org/upload/23/calendar_2023_packed.bin"><img decoding="async" aria-describedby="caption-attachment-296267" class="wp-image-296267" src="https://gerry.lamost.org/blog/wp-content/uploads/2023/01/calendar_2023_packed_static.png" alt="GTS2 月历表盘2023" width="200" srcset="https://gerry.lamost.org/blog/wp-content/uploads/2023/01/calendar_2023_packed_static.png 348w, https://gerry.lamost.org/blog/wp-content/uploads/2023/01/calendar_2023_packed_static-118x150.png 118w" sizes="(max-width: 348px) 100vw, 348px" /></a><p id="caption-attachment-296267" class="wp-caption-text">GTS2 月历表盘2023（sav2504）</p></div>
<p>对于华米在2020年发布的Amazfit GTS 2，它的表盘制作方法也类似。可以使用 <a href="http://gerry.lamost.org/upload/rar/py_amazfit_tools-GTR2.zip" target="_blank" rel="noopener">py_amazfit_tools</a> 来处理。先用其中的 GTR2_Packer.exe 来解压表盘，然后用 main.py 来释放内容。打包过程与此相反，先用main.py 来打包，然后用 GTR2_Packer.exe 进行压缩。具体命令如下（GTR/GTR2版本的处理语法类似，具体可参考压缩包中的readme文件）：</p>
<p><code>GTR2_Packer.exe -unc2 WATCH_FACE_FILE.bin<br />
python main.py --gts2  --file WATCH_FACE_FILE.bin<br />
python main.py --gts2  --file WATCH_FACE_FILE.json<br />
GTR2_Packer.exe -cmp2 WATCH_FACE_FILE_packed.bin</code></p>
<p>我在社区中其他作者制作的表盘基础上更新了2023年的月历，有需要的朋友可点击图片下载。以后就算没有人更新表盘，也可以藉此自给自足了。</p>
]]></content:encoded>
					
					<wfw:commentRss>https://gerry.lamost.org/blog/?feed=rss2&#038;p=296260</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>2022年天文学研究热门术语</title>
		<link>https://gerry.lamost.org/blog/?p=296250</link>
					<comments>https://gerry.lamost.org/blog/?p=296250#respond</comments>
		
		<dc:creator><![CDATA[gerry]]></dc:creator>
		<pubDate>Mon, 09 Jan 2023 13:01:46 +0000</pubDate>
				<category><![CDATA[坐井观天]]></category>
		<category><![CDATA[arXiv]]></category>
		<category><![CDATA[名词]]></category>
		<category><![CDATA[天文]]></category>
		<category><![CDATA[总结]]></category>
		<category><![CDATA[术语]]></category>
		<category><![CDATA[论文]]></category>
		<guid isPermaLink="false">https://gerry.lamost.org/blog/?p=296250</guid>

					<description><![CDATA[2022年，疫情仍没有消失，但人们都在努力回到正常的生活之中。天文学家们的工作效率似乎并没有明显起色。论文预印 [&#8230;]]]></description>
										<content:encoded><![CDATA[<p>2022年，疫情仍没有消失，但人们都在努力回到正常的生活之中。天文学家们的工作效率似乎并没有明显起色。论文预印本网站Arxiv上的天文学论文数量仍在下降，2022年全年共收到13393篇，比2021年的文章数少了1054 篇，下降约7%（今年统计的2021年文章总数为14447，和2022年1月统计的数目13243相差1204篇，怀疑arxiv系统将2022年提交的2021年文章的更新版本也计入在内）。虽然没有大家所期待的触底反弹，但下降的势头无疑有所放缓。随着各国形势逐渐恢复正常，天文界的科研交流和产出也能在今年逐渐恢复吧。<br />
<img loading="lazy" decoding="async" class="aligncenter size-large wp-image-296251" src="https://gerry.lamost.org/blog/wp-content/uploads/2023/01/numtrends2022-550x413.png" alt="" width="550" height="413" srcset="https://gerry.lamost.org/blog/wp-content/uploads/2023/01/numtrends2022-550x413.png 550w, https://gerry.lamost.org/blog/wp-content/uploads/2023/01/numtrends2022-350x263.png 350w, https://gerry.lamost.org/blog/wp-content/uploads/2023/01/numtrends2022-150x113.png 150w, https://gerry.lamost.org/blog/wp-content/uploads/2023/01/numtrends2022-768x576.png 768w, https://gerry.lamost.org/blog/wp-content/uploads/2023/01/numtrends2022-624x468.png 624w, https://gerry.lamost.org/blog/wp-content/uploads/2023/01/numtrends2022.png 960w" sizes="auto, (max-width: 550px) 100vw, 550px" /><br />
<span id="more-296250"></span></p>
<p>我们照例统计了这些论文中的热门术语，回顾2022年天文学的热点与主题。根据包含相关术语的论文总数，只考虑在正文中反复提到（大于5次）相关概念的文章，排名前10的关键术语有</p>
<ol>
<li>magnetic field（磁场，1271篇）</li>
<li>light curve （光变曲线，972篇）</li>
<li>stellar mass （恒星质量，937篇）</li>
<li>star formation （恒星形成，781篇）</li>
<li>power spectrum （功率谱，665篇）</li>
<li>black hole （黑洞，585篇）</li>
<li>dark matter （暗物质，503篇）</li>
<li>orbital period （轨道周期，400篇）</li>
<li>emission line （发射线，397篇）</li>
<li>neutron star （中子星，392篇）</li>
</ol>
<p><img loading="lazy" decoding="async" class="aligncenter size-large wp-image-296255" src="https://gerry.lamost.org/blog/wp-content/uploads/2023/01/top_term_2022-550x544.png" alt="2022年天文术语词云" width="550" height="544" srcset="https://gerry.lamost.org/blog/wp-content/uploads/2023/01/top_term_2022-550x544.png 550w, https://gerry.lamost.org/blog/wp-content/uploads/2023/01/top_term_2022-350x346.png 350w, https://gerry.lamost.org/blog/wp-content/uploads/2023/01/top_term_2022-150x148.png 150w, https://gerry.lamost.org/blog/wp-content/uploads/2023/01/top_term_2022-768x759.png 768w, https://gerry.lamost.org/blog/wp-content/uploads/2023/01/top_term_2022-624x617.png 624w, https://gerry.lamost.org/blog/wp-content/uploads/2023/01/top_term_2022.png 979w" sizes="auto, (max-width: 550px) 100vw, 550px" /></p>
<p>排名前十的缩略词和去年类似，这里考虑在正文中反复提到（大于5次）相关缩略词的文章：</p>
<ol>
<li>活动星系核（AGN，1061篇），</li>
<li>能谱分布（SED，831篇），</li>
<li>引力波（GW，758篇），</li>
<li>暗物质（DM，739篇），</li>
<li>宇宙微波背景辐射（CMB，678篇），</li>
<li>星际介质（ISM，628篇），</li>
<li>信噪比（S/N，617篇），</li>
<li>恒星形成率（SFR，594篇）</li>
<li>黑洞（BH，578篇）</li>
<li>超新星（SN，472）</li>
</ol>
<p>今年的焦点无疑是接替哈勃的“韦布”空间望远镜。它在去年12月底成功发射升空，并于2022年7月12日公布首批彩色图像和光谱数据。相应的论文在此后集中发表，形成一个高峰，全年论文总数超过300篇。而作为去年热点的“盖亚”第三批早期数据（EDR3），在2022年6月13日的第三批正式数据（Gaia DR3）释放之后，基于旧数据的论文数明显下降，基于新数据的论文平滑衔接。两个标签加起来也将近300篇。</p>
<p><img loading="lazy" decoding="async" class="aligncenter size-large wp-image-296256" src="https://gerry.lamost.org/blog/wp-content/uploads/2023/01/jwst-550x413.png" alt="" width="550" height="413" srcset="https://gerry.lamost.org/blog/wp-content/uploads/2023/01/jwst-550x413.png 550w, https://gerry.lamost.org/blog/wp-content/uploads/2023/01/jwst-350x263.png 350w, https://gerry.lamost.org/blog/wp-content/uploads/2023/01/jwst-150x113.png 150w, https://gerry.lamost.org/blog/wp-content/uploads/2023/01/jwst-768x576.png 768w, https://gerry.lamost.org/blog/wp-content/uploads/2023/01/jwst-624x468.png 624w, https://gerry.lamost.org/blog/wp-content/uploads/2023/01/jwst.png 960w" sizes="auto, (max-width: 550px) 100vw, 550px" /></p>
<p>我们也照例统计了论文中的常见词组，列表如下：</p>
<ol>
<li>other hand (7957篇)</li>
<li>right panel&nbsp;（4521篇）</li>
<li>upper limit (4409篇)</li>
<li>left panel (4124篇)</li>
<li>wide range（4011篇）</li>
<li>standard deviation （3961篇）</li>
<li>large number（3840篇）</li>
<li>future work （3545篇）</li>
<li>bottom panel（3541篇）</li>
<li>free parameter（3539篇）</li>
<li>previous study（3424篇）</li>
<li>parameter space（3430篇）</li>
</ol>
<p>这里统计这些常见词组并不是因为它们很重要。而是由于它们的出现频率实在太高，很难将它们和真正的专业术语区分开来。如何设计算法自动识别术语至今仍是尚未解决的问题，也许机器学习在此也有用武之地。</p>
]]></content:encoded>
					
					<wfw:commentRss>https://gerry.lamost.org/blog/?feed=rss2&#038;p=296250</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>平面数据点提取脚本</title>
		<link>https://gerry.lamost.org/blog/?p=296241</link>
					<comments>https://gerry.lamost.org/blog/?p=296241#respond</comments>
		
		<dc:creator><![CDATA[gerry]]></dc:creator>
		<pubDate>Mon, 26 Dec 2022 05:37:58 +0000</pubDate>
				<category><![CDATA[砍柴铸刀]]></category>
		<category><![CDATA[code]]></category>
		<category><![CDATA[Python]]></category>
		<category><![CDATA[脚本]]></category>
		<guid isPermaLink="false">https://gerry.lamost.org/blog/?p=296241</guid>

					<description><![CDATA[在工作中有时会遇到一些需要从图像中提取数据点的情况。例如文献中展示了图像，却没有给出相应的数据。如果只是定性的 [&#8230;]]]></description>
										<content:encoded><![CDATA[<p>在工作中有时会遇到一些需要从图像中提取数据点的情况。例如文献中展示了图像，却没有给出相应的数据。如果只是定性的比较，不一定需要联系作者索要数据。可以简单地通过一些软件来得到近似的数据。比如老牌的<a href="https://www.originlab.com/" rel="noopener" target="_blank">Origin</a>，轻量级的 <a href="http://www.getdata-graph-digitizer.com/download.php" rel="noopener" target="_blank">GetData Graph Digitizer</a>，或者免费的 <a href="https://sourceforge.net/projects/graphixy/" rel="noopener" target="_blank">Graphixy</a> 不过这三个都是Windows下的软件，在Linux/UNIX 和 Mac 下，可以考虑 <a href="https://automeris.io/WebPlotDigitizer/download.html" rel="noopener" target="_blank">WebPlotDigitizer</a> ，或者直接使用它的<a href="https://apps.automeris.io/wpd/index.zh_CN.html" rel="noopener" target="_blank">在线版</a>。</p>
<p>我是觉得这个功能不难，就用Python 写了一个脚本，使用pynput模块获取鼠标的屏幕位置，总共也就50行左右的代码。原理是用鼠标的屏幕坐标进行归算，所以图片越大，屏幕分辨率越高，获得的数据精度就会越好。做粗略的比较展示足够了，但要发表还是应该老老实实找原作者请求数据。</p>
<p><span id="more-296241"></span><br />
在调用时给定图像的xy轴边界，然后用鼠标依次点击图像四个顶点进行标定，接下来用鼠标左键单击需要提取的数据点即可，单击右键退出。就可以在终端和工作目录下看到提取的数据了。</p>
<p></p><pre class="urvanov-syntax-highlighter-plain-tag">from pynput.mouse import Listener,Button
import numpy as np

def grabdata():
    points = []
    def on_click(x, y, button, pressed):
        if pressed:
            print(x,y,button,pressed)
            points.append([x, y])
        if button == Button.right:
            return False
            
    with Listener(on_click=on_click) as listener:
        listener.join()
        
    return points

def main(boundary,flag=&quot;&quot;):
    boundary = np.array(boundary)
                        
    positions = grabdata()
    print(positions)
    data = np.array(positions)
    if flag == &quot;loglog&quot;:
        boundary = np.log10(boundary)
    elif flag == &quot;xlog&quot;:
        boundary[0] = np.log10(boundary[0])
    elif flag == &quot;ylog&quot;:
        boundary[1] = np.log10(boundary[1])
    print(boundary)
    # convert zero point from left-top to left-bottom
    data[:,1] = np.max(data[:,1]) - data[:,1]  
    resu = (data - np.min(data,axis=0))/(np.max(data,axis=0)-np.min(data,axis=0)) * (boundary[:,1]-boundary[:,0]) + boundary[:,0]

    if flag == &quot;loglog&quot;:
        resu = 10**resu
    elif flag == &quot;xlog&quot;:
        resu[0] = 10**resu[0]
    elif flag == &quot;ylog&quot;:
        resu[1] = 10**resu[1]
    
    print(&quot;DATA:\n&quot;,resu)
    np.savetxt(&quot;data.txt&quot;,resu[4:])
    
if __name__ == &quot;__main__&quot;:
    main(boundary=[[0,1],[0,1]])</pre><p></p>
]]></content:encoded>
					
					<wfw:commentRss>https://gerry.lamost.org/blog/?feed=rss2&#038;p=296241</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>Linux下的索尼DPT-RP1电纸书管理</title>
		<link>https://gerry.lamost.org/blog/?p=296227</link>
					<comments>https://gerry.lamost.org/blog/?p=296227#respond</comments>
		
		<dc:creator><![CDATA[gerry]]></dc:creator>
		<pubDate>Tue, 09 Aug 2022 16:08:48 +0000</pubDate>
				<category><![CDATA[砍柴铸刀]]></category>
		<category><![CDATA[Python]]></category>
		<category><![CDATA[电子纸]]></category>
		<category><![CDATA[硬件]]></category>
		<category><![CDATA[索尼]]></category>
		<guid isPermaLink="false">https://gerry.lamost.org/blog/?p=296227</guid>

					<description><![CDATA[作为一个重度电子阅读者，索尼2017年推出的DPT-RP1是我最喜欢的一款电纸书产品。 它13.3寸的屏幕可以 [&#8230;]]]></description>
										<content:encoded><![CDATA[<p>作为一个重度电子阅读者，索尼2017年推出的DPT-RP1是我最喜欢的一款电纸书产品。 它13.3寸的屏幕可以直接阅读A4幅面的论文，手写笔配合原生系统可以方便的进行PDF批注，作笔记和修改文章都很方便。最重要的一点是它加上笔只有360克， 相当于约80张A4打印纸的重量。加上背部收边设计，单手持握毫无困难，手感相当出色。<img loading="lazy" decoding="async" class="alignright size-full wp-image-296229" src="https://gerry.lamost.org/blog/wp-content/uploads/2022/08/DPT-RP1.png" alt="" width="400" height="462" srcset="https://gerry.lamost.org/blog/wp-content/uploads/2022/08/DPT-RP1.png 400w, https://gerry.lamost.org/blog/wp-content/uploads/2022/08/DPT-RP1-350x404.png 350w, https://gerry.lamost.org/blog/wp-content/uploads/2022/08/DPT-RP1-130x150.png 130w" sizes="auto, (max-width: 400px) 100vw, 400px" /></p>
<p>相比之下，13.3寸的文石Boox Max Lumi 2有570克，10.3寸的科大讯飞 X2 是380克，10.3寸的remarkable RM2 有403克，而10.9寸的ipad air 5则是462克。在实际使用时，设备重量直接决定持握时间。可以说，在大屏阅读这个需求点上，RP1仍是目前技术的天花板。</p>
<p>RP1 的缺点也有不少：如分辨率不高(200dpi)，内存偏小（16G，其中11G可用），不支持TF卡，只支持PDF文件显示，没有背光等等。不过其中最影响我使用体验的是它封闭的原生系统。文件导入导出都需要借助官方软件 <a href="https://www.pro.sony.com.cn/cn/download/digitalpaper.html" target="_blank" rel="noopener">Digital paper</a> 。而且官方只提供这个软件的Windows和Mac版本，不支持Linux。虽然可以借助<a href="https://github.com/HappyZ/dpt-tools" target="_blank" rel="noopener">dpt-tools</a> 破解原装系统（<a href="https://post.smzdm.com/p/ar07neqg/" target="_blank" rel="noopener">中文指南</a>），安装安卓软件，但是那些为触屏设计的软件并不支持手写笔操作。一个用电子纸作为显示屏的安卓平板并不好用。我本来想在电子纸上安装坚果云等云盘工具，将要阅读的文献和书籍自动同步，实现电子纸和工作电脑的文章批注共享。然而，破解系统下无法用索尼自带的PDF浏览器打开坚果云目录下的PDF文件，也就不支持触控笔操作，所以还是要想其他的办法。<br />
<span id="more-296227"></span></p>
<p>幸好，有用户开发了跨平台的python工具 <a href="https://github.com/janten/dpt-rp1-py" target="_blank" rel="noopener">dpt-rp1-py</a> 可以在各平台下直接连接到RP1。虽然它不支持Linux系统中的USB直连，但在同一个无线局域网内能找到也够用了。这个工具可以用pip安装(<code>pip3 install dpt-rp1-py</code>)。安装成功后在命令行下运行 <code>dptrp1 register</code>，只要电脑和电子纸在同一个无线局域网内，就能够自动发现设备，根据提示输入电纸书上弹出的PIN码后就可以建立连接，然后自由地管理文件。不过这个工具提供的功能比较基础，主要是单一文件的上传下载。如果要批量处理大量文件还是不太方便。于是有用户基于它开发了有更多功能的工具<a href="https://github.com/chrigro/dptrp1_manager" target="_blank" rel="noopener">dptrp1_manager</a>，可以实现目录级的批量操作甚至双向同步。不过原版的说明写得很简单，我便花了些时间调试补充，基本满足了自己的需求。</p>
<p>这个模块需要用<code>python setup.py install</code> 安装。装好后，确认电纸书在局域网内的IP，然后在用户主目录创建 ~/.dpmgr/dpmgr.conf 文件指定连接IP，然后用 <code>dpmgr config</code> 命令建立连接。这样就可以使用下面的命令批量处理文件和目录。<br />
<code><br />
dpmgr status   # 列出设备基本信息<br />
dpmgr tree -a  # 以树状结构列出全部文件<br />
dpmgr upload LocalFile RemoteFile  # 上传本地文件<br />
dpmgr upload -d  LocalDir RemoteDir   # 上传本地目录<br />
dpmgr download  RemoteFile # 下载电子纸中文件（可使用部分文件名）<br />
dpmgr delete  RemoteFile  # 删除电子纸中文件（可使用部分文件名）<br />
dpmgr sync LocalDir RemoteDir # 同步目录<br />
</code><br />
我主要是利用它的目录同步功能和结合<a href="https://www.jianguoyun.com/">坚果云</a>实现批注同步。把要读的文章书籍都放在一个同步目录中。在.dpmgr/sync.conf文件中指定对应的本地目录和远程目录，然后定期运行 <code>dpmgr syncpairs</code>命令同步即可。软件可以自动根据文件的修改时间自动选择是下载远程文件还是上传本地文件，实现电脑端和电子纸上的批注修改自动同步。这样，RP1 终于可以和Linux系统平滑衔接，协同办公啦。虽然RP1已在2020年停产，不过日本富士通（Fujitsu Quaderno A4）和国内的大上科技（DASUNG）都推出了高度还原的平替设备。有A4文档阅读需求的朋友可以考虑。</p>
<div id="attachment_296235" style="width: 560px" class="wp-caption aligncenter"><img loading="lazy" decoding="async" aria-describedby="caption-attachment-296235" class="size-large wp-image-296235" src="https://gerry.lamost.org/blog/wp-content/uploads/2022/08/comp-550x412.jpg" alt="DPT-RP1与Bigme Carve 对比" width="550" height="412" srcset="https://gerry.lamost.org/blog/wp-content/uploads/2022/08/comp-550x412.jpg 550w, https://gerry.lamost.org/blog/wp-content/uploads/2022/08/comp-350x262.jpg 350w, https://gerry.lamost.org/blog/wp-content/uploads/2022/08/comp-150x112.jpg 150w, https://gerry.lamost.org/blog/wp-content/uploads/2022/08/comp-768x576.jpg 768w, https://gerry.lamost.org/blog/wp-content/uploads/2022/08/comp-624x468.jpg 624w, https://gerry.lamost.org/blog/wp-content/uploads/2022/08/comp.jpg 1067w" sizes="auto, (max-width: 550px) 100vw, 550px" /><p id="caption-attachment-296235" class="wp-caption-text">DPT-RP1与Bigme Carve（未开背光）显示效果对比</p></div>
<p>另外，彩色墨水屏的产品也越来越多。我没忍住剁手了目前最大的10.3寸彩屏Bigme Carve。拿到后才发现这款产品的实际使用体验并不理想。Kaleido Plus彩墨屏颜色表现还可以，但由于彩墨屏上面盖着一层滤光片，降低了透光率，整体比黑白屏画面暗不少。白天非阳光直射时也要开启背光浏览。而且机器裸重就有500g, 加笔及原装皮套后更是达到835g，单手持握困难。软件方面，看epub文件没有支持触控笔的批注和摘抄工具，实时转写和翻译都不能离线使用。这些因素加在一起让这个设备变得非常鸡肋：作为单一阅读设备来说太沉了，用作生产力工具又不够强劲。所以我才又回过头来折腾RP1，发现它的缺点都还可以忍受。毕竟，我需要的只是一个简单的读书和笔记工具。</p>
]]></content:encoded>
					
					<wfw:commentRss>https://gerry.lamost.org/blog/?feed=rss2&#038;p=296227</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>自动化机器翻译小试</title>
		<link>https://gerry.lamost.org/blog/?p=296204</link>
					<comments>https://gerry.lamost.org/blog/?p=296204#comments</comments>
		
		<dc:creator><![CDATA[gerry]]></dc:creator>
		<pubDate>Wed, 23 Mar 2022 14:15:53 +0000</pubDate>
				<category><![CDATA[筑云晴雨]]></category>
		<category><![CDATA[Azure]]></category>
		<category><![CDATA[github]]></category>
		<category><![CDATA[poedit]]></category>
		<category><![CDATA[Python]]></category>
		<category><![CDATA[WordPress]]></category>
		<category><![CDATA[本地化]]></category>
		<category><![CDATA[机器翻译]]></category>
		<category><![CDATA[相册]]></category>
		<category><![CDATA[翻译]]></category>
		<guid isPermaLink="false">https://gerry.lamost.org/blog/?p=296204</guid>

					<description><![CDATA[今年过年的时候，网站服务器意外升级了。新版的PHP不再支持我过时(4.x)的WordPress（WP）系统。以 [&#8230;]]]></description>
										<content:encoded><![CDATA[<p>今年过年的时候，网站服务器意外升级了。新版的PHP不再支持我过时(4.x)的<a href="https://cn.wordpress.org" rel="noopener" target="_blank">WordPress</a>（WP）系统。以前部署的html服务也大多无法使用。只好借此机会对网站做全面升级。WP系统更新相对容易。不过以前的主题和插件大都不兼容新版系统，不得不寻找新的替代品。折腾了几天之后，网站总算能用了。只有相册系统没找到特别合适的方案。WP的相册插件有很多，可是免费的效果不好，收费的插件又过于复杂。我之前用的<a href="https://wordpress.org/plugins/nextgen-gallery/" rel="noopener" target="_blank">NextGEN 图库</a>，体验并不算好，想借着这次升级弄得顺眼些。<br />
<div id="attachment_296214" style="width: 560px" class="wp-caption aligncenter"><img loading="lazy" decoding="async" aria-describedby="caption-attachment-296214" src="https://gerry.lamost.org/blog/wp-content/uploads/2022/03/oldalbum-550x536.png" alt="" width="550" height="536" class="size-large wp-image-296214" srcset="https://gerry.lamost.org/blog/wp-content/uploads/2022/03/oldalbum-550x536.png 550w, https://gerry.lamost.org/blog/wp-content/uploads/2022/03/oldalbum-350x341.png 350w, https://gerry.lamost.org/blog/wp-content/uploads/2022/03/oldalbum-150x146.png 150w, https://gerry.lamost.org/blog/wp-content/uploads/2022/03/oldalbum-768x748.png 768w, https://gerry.lamost.org/blog/wp-content/uploads/2022/03/oldalbum-624x608.png 624w, https://gerry.lamost.org/blog/wp-content/uploads/2022/03/oldalbum.png 817w" sizes="auto, (max-width: 550px) 100vw, 550px" /><p id="caption-attachment-296214" class="wp-caption-text">Internet Archive中收录的相册页面存档</p></div><br />
于是去找开源的解决方案，发现<a href="https://www.zenphoto.org/" rel="noopener" target="_blank">zenphoto</a>看起来简洁清爽，似乎很合适。就在Linux下用<a href="https://www.apachefriends.org/zh_cn/index.html" rel="noopener" target="_blank">XAMPP</a>部署测试了一下（虽然也有<a href="https://github.com/emieza/docker-zenphoto" rel="noopener" target="_blank">docker镜像</a>，但总觉得调试起来比较麻烦），功能设计都很顺手，只是最新版没有中文翻译。我看了一眼zenphoto的本地化文件，发现有个3年前的香港译本，觉得更新一下也花不了多少时间。后来我才意识到自己虽然已经不年轻了，可还是会把问题想得太简单……</p>
<p><span id="more-296204"></span></p>
<p>香港译本只包含2991个条目的翻译，而且很多专业名词都和大陆习惯不一样。而zenphoto最新的1.59版的本地化po文件中已经有超过5500条待翻译条目。我找出了十来年没碰的<a href="https://poedit.net/" rel="noopener" target="_blank">Poedit</a>试着改了几个小时，才更新了几百条，发现其中有大量类似“prev”（上一条），“next”（下一条）的简单记录，人工翻译枯燥乏味。便想着借助自动翻译帮忙，Poedit无缝支持机器翻译，不过是收费服务。中文网络中倒是有个基于AutoHotKey的<a href="https://www.autoahk.com/archives/37209" rel="noopener" target="_blank">自动脚本（外挂）</a>，能够将网页翻译结果自动复制粘贴到poedit中。我试了一下，发现它的表现并不稳定，总是莫名卡住。还是老老实实去找开源方案，发现基于python 的 <a href="https://toolkit.translatehouse.org/" rel="noopener" target="_blank">Translate Toolkit</a>支持po和csv格式的相互转换，而 <a href="https://github.com/nidhaloff/deep-translator" rel="noopener" target="_blank">deep-translator</a> 包可以支持Google，Microsoft，DeepL, Yandex 等多个引擎的机器自动翻译。接下来，只要把csv记录逐条发送给机器翻译引擎可以了。</p>
<p>表现较好的翻译引擎因为用户很多，通常需要申请专门的接口，也就是API。目前翻译质量最高的<a href="https://www.deepl.com/translator" rel="noopener" target="_blank">DeepL</a>没有中国销售服务，只接受外国信用卡注册认证；谷歌服务在国内用不了；于是我在微软云计算平台<a href="https://www.azure.cn" rel="noopener" target="_blank">Azure</a>上申请了帐号，参考<a href="https://docs.microsoft.com/zh-cn/azure/cognitive-services/translator/translator-how-to-signup" rel="noopener" target="_blank">官方教程</a>在异常复杂的用户面板中艰难地完成了翻译API的申请。终于拿到了可以被放到deep-translator语句中的宝贵token（也可以仿照<a href="https://docs.microsoft.com/zh-cn/azure/cognitive-services/translator/quickstart-translator?tabs=python" rel="noopener" target="_blank">官方示例</a>编写自己的脚本）。作为对比，我也在<a href="http://api.fanyi.baidu.com/" rel="noopener" target="_blank">百度翻译开放平台</a>上申请了密钥，相比之下流程容易得多。接下来的事情就简单了，Python脚本在几十分钟内自动完成了全部记录的翻译。在这个特定的项目中，微软的翻译结果整体要自然一些。不过因为所有的翻译都是逐行提交的，会有名词概念前后翻译不一致的情况。而且自动翻译对语句中的代码标签处理还不是很完善，有时会影响语法。于是我又花了半天时间审校核对。全部完成之后，终于将本地化文本提交给github上的<a href="https://github.com/zenphoto/zenphoto/" rel="noopener" target="_blank">zenphoto代码仓库</a>，也算对开源社区有所回馈。</p>
<p>就在我终于完成了本地测试，准备在线上部署相册的时候，赫然发现这里的服务器环境不支持 gettext()函数，完全无法载入本地化语言文件…… 所以，这是个悲伤的故事。我的相册一时半会是回不来了，不过这段机器翻译自动化的体验倒值得记录一下。</p>
]]></content:encoded>
					
					<wfw:commentRss>https://gerry.lamost.org/blog/?feed=rss2&#038;p=296204</wfw:commentRss>
			<slash:comments>1</slash:comments>
		
		
			</item>
		<item>
		<title>线型拟合的置信带绘制</title>
		<link>https://gerry.lamost.org/blog/?p=296174</link>
					<comments>https://gerry.lamost.org/blog/?p=296174#respond</comments>
		
		<dc:creator><![CDATA[gerry]]></dc:creator>
		<pubDate>Tue, 08 Feb 2022 09:13:24 +0000</pubDate>
				<category><![CDATA[学海蠡测]]></category>
		<category><![CDATA[code]]></category>
		<category><![CDATA[fitting]]></category>
		<category><![CDATA[Python]]></category>
		<category><![CDATA[回归分析]]></category>
		<category><![CDATA[误差估计]]></category>
		<guid isPermaLink="false">https://gerry.lamost.org/blog/?p=296174</guid>

					<description><![CDATA[在数据分析过程中，我们经常会遇到线型拟合问题。标准的做法是用最小二乘法(least-squares metho [&#8230;]]]></description>
										<content:encoded><![CDATA[<p>在数据分析过程中，我们经常会遇到线型拟合问题。标准的做法是用最小二乘法(least-squares method)来计算相关系数，用协方差矩阵(covariance matrix)估计误差。不过这是在假定所有数据点都是绝对精确的情况下才成立。而在实际工作中，测量值不可避免地带有误差，忽略这些误差显然会低估相关系数的误差。那么该如何合理考虑数据点的误差，并绘制相应的置信带(confidence band，表示拟合函数的可能出现范围)呢？这里我们借助Python中的相关函数来看一下。</p>
<figure class="wp-block-image size-large is-style-default"><img loading="lazy" decoding="async" width="550" height="367" class="wp-image-296176" src="https://gerry.lamost.org/blog/wp-content/uploads/2022/02/fit_bootstrap-550x367.png" alt="" srcset="https://gerry.lamost.org/blog/wp-content/uploads/2022/02/fit_bootstrap-550x367.png 550w, https://gerry.lamost.org/blog/wp-content/uploads/2022/02/fit_bootstrap-350x233.png 350w, https://gerry.lamost.org/blog/wp-content/uploads/2022/02/fit_bootstrap-150x100.png 150w, https://gerry.lamost.org/blog/wp-content/uploads/2022/02/fit_bootstrap-768x512.png 768w, https://gerry.lamost.org/blog/wp-content/uploads/2022/02/fit_bootstrap-624x416.png 624w, https://gerry.lamost.org/blog/wp-content/uploads/2022/02/fit_bootstrap.png 900w" sizes="auto, (max-width: 550px) 100vw, 550px" /></figure>
<p><span id="more-296174"></span></p>
<p>上图中的数据座标和误差如下：</p>
<p></p><pre class="urvanov-syntax-highlighter-plain-tag">x = [1.2, 2.1, 2.9, 3.8, 4.9]  # x轴位置
y = [1.1, 1.9, 3.0, 3.9, 5.1]  # y轴位置
e = [0.3, 0.4, 0.5, 0.3, 0.4]  # y轴误差</pre><p></p>
<p>它们的相关关系可以用numpy模块中的多项式拟合函数 <a href="https://numpy.org/doc/stable/reference/generated/numpy.polyfit.html" target="_blank" rel="noreferrer noopener" data-type="URL" data-id="https://numpy.org/doc/stable/reference/generated/numpy.polyfit.html">polyfit</a> 来计算。</p>
<p></p><pre class="urvanov-syntax-highlighter-plain-tag"># fitting with polyfit
import numpy as np
popt, cov = np.polyfit(x,y,1, cov=True) # 1次多项式拟合，返回协方差矩阵
err = np.sqrt(np.diag(cov))  # 由协方差矩阵计算多项式系数误差
print(popt,err)         # 输出拟合结果及误差
print(np.poly1d(popt))  # 输出拟合函数</pre><p></p>
<p>可以得到拟合直线为 y = 1.10 x &#8211; 0.27， 由协方差矩阵得到的参数误差分别为 [0.03，0.11]。但是这个拟合并没有考虑数据点的误差。我们可以采用更灵活的拟合函数——scipy.optimize 模块中的非线性拟合函数 <a href="https://docs.scipy.org/doc/scipy/reference/generated/scipy.optimize.curve_fit.html" target="_blank" rel="noreferrer noopener">curve_fit</a> 来实现，代码如下：</p>
<p></p><pre class="urvanov-syntax-highlighter-plain-tag">from scipy.optimize import curve_fit
f = lambda x, *p: np.polyval(p, x)   # 定义待拟合函数
# 依次传入拟合函数、拟合数据，参数初值，及误差
popt, cov = curve_fit(f, x, y, [1, 1], sigma=e, absolute_sigma = True)  
err = np.sqrt(np.diag(cov))
print(popt,err)         # 输出拟合结果及误差
print(np.poly1d(popt))  # 输出拟合函数</pre><p></p>
<p>可以得到拟合直线为 y = 1.09x-0.25，参数误差为[0.12，0.38]。拟合结果稍有不同，参数误差也合理增加。接下来就是根据这个拟合结果来绘制置信带。但置信带并非参数误差的简单叠加。我们可以测试一下，将误差直接与拟合结果叠加看效果如何，代码及结果如下：</p>
<p></p><pre class="urvanov-syntax-highlighter-plain-tag"># manual check 
import pylab as plt
xx = np.linspace(1,5,5)
aa = popt[0] ; bb = popt[1]
da = err[0] ; db = err[1]
plt.errorbar(x,y,yerr=e, fmt=&quot;o&quot;,capsize=4)  # 数据点
plt.plot(xx, np.poly1d([aa,bb])(xx),'r-')  # 绘制最佳拟合结果 
plt.plot(xx, np.poly1d([aa+da,bb+db])(xx),'c-')
plt.plot(xx, np.poly1d([aa-da,bb-db])(xx),'c-')
plt.plot(xx, np.poly1d([aa+da,bb-db])(xx),'m-')
plt.plot(xx, np.poly1d([aa-da,bb+db])(xx),'m-')
plt.show()</pre><p></p>
<figure class="wp-block-image size-large"><img loading="lazy" decoding="async" width="550" height="367" class="wp-image-296180" src="https://gerry.lamost.org/blog/wp-content/uploads/2022/02/fit_curve_err-550x367.png" alt="" srcset="https://gerry.lamost.org/blog/wp-content/uploads/2022/02/fit_curve_err-550x367.png 550w, https://gerry.lamost.org/blog/wp-content/uploads/2022/02/fit_curve_err-350x233.png 350w, https://gerry.lamost.org/blog/wp-content/uploads/2022/02/fit_curve_err-150x100.png 150w, https://gerry.lamost.org/blog/wp-content/uploads/2022/02/fit_curve_err-768x512.png 768w, https://gerry.lamost.org/blog/wp-content/uploads/2022/02/fit_curve_err-624x416.png 624w, https://gerry.lamost.org/blog/wp-content/uploads/2022/02/fit_curve_err.png 900w" sizes="auto, (max-width: 550px) 100vw, 550px" /></figure>
<p>可以看到这样得到的置信带并不正确。因为多项式系数之间并非完全独立(cov非对角阵)，它们的上下限自然无法同时达到。那么正确的做法是怎样的呢？我们可以重新看一下置信带的含义。它是表示真实函数以特定概率出现的区域。换句话说，1σ误差置信带就意味着真实函数有68%的可能性出现在这个区域。我们可以根据拟合结果模拟出足够多的函数，然后找出其中68%的结果集中的区域。实际操作时，我们统计的是模拟函数给出的模拟数据点的分布。具体代码和结果如下：</p>
<p></p><pre class="urvanov-syntax-highlighter-plain-tag">xi = np.linspace(1, 5, 20)   # 取样点越密，置信带越平滑
# 根据拟合结果生成1000个模拟函数
ps = np.random.multivariate_normal(popt, cov, 1000) 
# 根据模拟函数统计每个取样点上的y值
ysample = np.asarray([f(xi, *pi) for pi in ps])
# 在每个取样点上提取 68% 区间上下边界 
lower = np.percentile(ysample, 16, axis=0)
upper = np.percentile(ysample, 84, axis=0)
plt.errorbar(x,y,yerr=e, fmt=&quot;o&quot;,capsize=4)
plt.plot(xi, np.poly1d(popt)(xi), 'r-')  # 绘制最佳拟合函数
plt.fill_between(xi, lower, upper, color=&quot;gray&quot;,alpha=0.2)
plt.show()</pre><p></p>
<figure class="wp-block-image size-large"><img loading="lazy" decoding="async" width="550" height="367" class="wp-image-296181" src="https://gerry.lamost.org/blog/wp-content/uploads/2022/02/fit_curve_sample-550x367.png" alt="" srcset="https://gerry.lamost.org/blog/wp-content/uploads/2022/02/fit_curve_sample-550x367.png 550w, https://gerry.lamost.org/blog/wp-content/uploads/2022/02/fit_curve_sample-350x233.png 350w, https://gerry.lamost.org/blog/wp-content/uploads/2022/02/fit_curve_sample-150x100.png 150w, https://gerry.lamost.org/blog/wp-content/uploads/2022/02/fit_curve_sample-768x512.png 768w, https://gerry.lamost.org/blog/wp-content/uploads/2022/02/fit_curve_sample-624x416.png 624w, https://gerry.lamost.org/blog/wp-content/uploads/2022/02/fit_curve_sample.png 900w" sizes="auto, (max-width: 550px) 100vw, 550px" /></figure>
<p>这个结果就很像样了。事实上，借助 <a href="https://pythonhosted.org/uncertainties/" target="_blank" rel="noreferrer noopener">uncertainties</a> 模块我们可以由协方差矩阵直接得到置信带，代码如下：</p>
<p></p><pre class="urvanov-syntax-highlighter-plain-tag">import uncertainties as unc
a, b = unc.correlated_values(popt, cov) # 将协方差矩阵信息导入系数
py = a * xi + b     # 将采样点xi带入拟合函数得到目标数据特征
nom = unc.unumpy.nominal_values(py)  # 得出各采样点处的期望值
std = unc.unumpy.std_devs(py)        # 得出各采样点处的方差
plt.errorbar(x,y,yerr=e, fmt=&quot;o&quot;,capsize=4) # 绘制数据点
plt.plot(xi, nom, c='r')             #  绘制最佳拟合函数
plt.plot(xi, nom - std, c='c')       #  绘制最佳拟合的1&sigma;下限
plt.plot(xi, nom + std, c='c')       #  绘制最佳拟合的1&sigma;上限</pre><p></p>
<figure class="wp-block-image size-large"><img loading="lazy" decoding="async" width="550" height="367" class="wp-image-296183" src="https://gerry.lamost.org/blog/wp-content/uploads/2022/02/fit_uncertain-550x367.png" alt="" srcset="https://gerry.lamost.org/blog/wp-content/uploads/2022/02/fit_uncertain-550x367.png 550w, https://gerry.lamost.org/blog/wp-content/uploads/2022/02/fit_uncertain-350x233.png 350w, https://gerry.lamost.org/blog/wp-content/uploads/2022/02/fit_uncertain-150x100.png 150w, https://gerry.lamost.org/blog/wp-content/uploads/2022/02/fit_uncertain-768x512.png 768w, https://gerry.lamost.org/blog/wp-content/uploads/2022/02/fit_uncertain-624x416.png 624w, https://gerry.lamost.org/blog/wp-content/uploads/2022/02/fit_uncertain.png 900w" sizes="auto, (max-width: 550px) 100vw, 550px" /></figure>
<p>可以看到这样直接得到的青色置信带和前一个模拟方法得到的灰色置信带完全一致。对于通常的拟合需求来说，这样的结果已经可以用了。如果x轴位置上也有误差，那么curvefit就不再适用了，需要借助正交距离回归（Orthogonal Distance Regression，ODR）等方法。这里介绍一个更为普适通用的方法——自助法(bootstrap)。</p>
<p>既然每个数据点及其误差都代表一个高斯分布，我可以根据这些分布进行多次模拟采样，得到符合相同分布的多个模拟数据集。通过对这些模拟数据集的直接拟合，可以得到拟合函数的分布情况，进而求出其中位值和68.2%的置信带。具体代码和结果如下：</p>
<p></p><pre class="urvanov-syntax-highlighter-plain-tag">func = lambda x, *p: np.polyval(p, x)
n = 10000
# 生成模拟数据集
ysample = []
for i in range(len(y)):
    ysample.append(list(np.random.normal(y[i],e[i],n)))
ysample = np.array(ysample)

pset = []
yp = []
xi = np.linspace(1, 5, 20) 
for i in range(n):
    popt, cov = curve_fit(func, x, ysample[:,i], [1, 1])# 不带误差拟合
    pset.append(popt)     # 收集拟合参数，用于误差分析
    yp = yp + [func(xi, *popt)]  # 收集拟合结果点集，用于置信带绘制

# 确定参数及误差 
pset = np.array(pset)
par_median = np.percentile(pset, 50, axis=0)
par_lower = np.percentile(pset, 15.9, axis=0)
par_upper = np.percentile(pset, 84.1, axis=0)
print(&quot;Best Fit:&quot;,par_median)
print(&quot;Error:&quot;,par_median-par_lower, par_upper-par_median)

# 确定置信带边界
yp = np.array(yp)
l_fit = np.percentile(yp, 50, axis=0)
l_lower = np.percentile(yp, 15.9, axis=0)
l_upper = np.percentile(yp, 84.1, axis=0)
l_lower2 = np.percentile(yp, 2.5, axis=0)
l_upper2 = np.percentile(yp, 97.5, axis=0)

# 做图
plt.errorbar(x,y,yerr=e, fmt=&quot;o&quot;,capsize=4)
plt.plot(xi, l_fit, 'r-')
plt.fill_between(xi, l_lower, l_upper, color=&quot;m&quot;,alpha=0.2)
plt.fill_between(xi, l_lower2, l_upper2, color=&quot;gray&quot;,alpha=0.2)
plt.plot(xi, nom - std, c='c')
plt.plot(xi, nom + std, c='c')
plt.plot(xi, nom - 2*std, c='c',ls=&quot;--&quot;)
plt.plot(xi, nom + 2*std, c='c',ls=&quot;--&quot;)</pre><p></p>
<figure class="wp-block-image size-large"><img loading="lazy" decoding="async" src="https://gerry.lamost.org/blog/wp-content/uploads/2022/02/fit_bootstrap-3-550x367.png" alt="" width="550" height="367" class="aligncenter size-large wp-image-296199" srcset="https://gerry.lamost.org/blog/wp-content/uploads/2022/02/fit_bootstrap-3-550x367.png 550w, https://gerry.lamost.org/blog/wp-content/uploads/2022/02/fit_bootstrap-3-350x233.png 350w, https://gerry.lamost.org/blog/wp-content/uploads/2022/02/fit_bootstrap-3-150x100.png 150w, https://gerry.lamost.org/blog/wp-content/uploads/2022/02/fit_bootstrap-3-768x512.png 768w, https://gerry.lamost.org/blog/wp-content/uploads/2022/02/fit_bootstrap-3-624x416.png 624w, https://gerry.lamost.org/blog/wp-content/uploads/2022/02/fit_bootstrap-3.png 900w" sizes="auto, (max-width: 550px) 100vw, 550px" /></figure>
<p>这样我们得到的拟合结果为 y = 1.10x -0.27 ，与不带误差拟合的结果一致，其误差为 [0.12,0.40]，与带误差拟合的结果相当。它的1σ和2σ的置信带都和 <a href="https://pythonhosted.org/uncertainties/" target="_blank" rel="noreferrer noopener">uncertainties</a> 模块给出的边界基本吻合。</p>
<p>这里我们只是从数值计算的角度讨论了直线拟合中置信带的画法操作。如果对相关的数学背景和证明感兴趣，可以参考<a href="https://book.douban.com/subject/4214656/" target="_blank" rel="noreferrer noopener">《统计推断》</a>一书。</p>
]]></content:encoded>
					
					<wfw:commentRss>https://gerry.lamost.org/blog/?feed=rss2&#038;p=296174</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>2021年天文学研究趋势初分析</title>
		<link>https://gerry.lamost.org/blog/?p=296064</link>
					<comments>https://gerry.lamost.org/blog/?p=296064#respond</comments>
		
		<dc:creator><![CDATA[gerry]]></dc:creator>
		<pubDate>Tue, 11 Jan 2022 01:37:43 +0000</pubDate>
				<category><![CDATA[坐井观天]]></category>
		<category><![CDATA[arXiv]]></category>
		<category><![CDATA[天文]]></category>
		<category><![CDATA[术语]]></category>
		<category><![CDATA[热点]]></category>
		<guid isPermaLink="false">http://gerry.lamost.org/blog/?p=296064</guid>

					<description><![CDATA[2021年总算过去了。虽然疫情还没有结束的迹象，但是人们已经开始习惯新冠环伺的生活。疫情对社会带来的长期影响也 [&#8230;]]]></description>
										<content:encoded><![CDATA[<p>2021年总算过去了。虽然疫情还没有结束的迹象，但是人们已经开始习惯新冠环伺的生活。疫情对社会带来的长期影响也在慢慢显现。2021年全世界天文学家提交到论文预印本Arxiv上的天文学论文数量只有13243篇，比2020年少了1577 篇（下降10.6%，甚至少于2018年的提交数）。这是自1994年arxiv开设天文学学科分类以来年度提交论文总数的第一次下降。我们在疫情的影响下被迫放慢了探索宇宙的脚步，但并未停止前进，毕竟连推迟了14年的韦布空间望远镜都发射成功了。</p>
<p><img loading="lazy" decoding="async" class="aligncenter size-large wp-image-296065" src="https://gerry.lamost.org/blog/wp-content/uploads/2022/01/numtrends-640x480.png" alt="arxiv天文(astroph)论文收录数" width="550" height="413" srcset="https://gerry.lamost.org/blog/wp-content/uploads/2022/01/numtrends-640x480.png 640w, https://gerry.lamost.org/blog/wp-content/uploads/2022/01/numtrends-150x113.png 150w, https://gerry.lamost.org/blog/wp-content/uploads/2022/01/numtrends-350x263.png 350w, https://gerry.lamost.org/blog/wp-content/uploads/2022/01/numtrends.png 960w" sizes="auto, (max-width: 550px) 100vw, 550px" /><br />
<span id="more-296064"></span></p>
<p>我们统计了这些论文中的热门术语，回顾2021年天文学的热点与主题。根据包含相关术语的论文总数，排名前10的关键术语有</p>
<ol>
<li>磁场（magnetic field，3616篇）</li>
<li>黑洞（black hole，2673篇）</li>
<li>恒星形成（star formation，2660篇）</li>
<li>数值模拟（numerical simulation，2498篇）</li>
<li>暗物质（dark matter，2488篇）</li>
<li>银河系（Milky Way，2349篇）</li>
<li>星际介质（interstellar medium，1950篇）</li>
<li>大质量恒星（massive star，1932篇）</li>
<li>中子星（neutron star，1875篇）</li>
<li>引力波（gravitational wave，1711篇）</li>
</ol>
<p><img loading="lazy" decoding="async" class="aligncenter size-large wp-image-296066" src="https://gerry.lamost.org/blog/wp-content/uploads/2022/01/top_term_2021_dict2-640x320.png" alt="2021天文术语词云" width="550" height="275" srcset="https://gerry.lamost.org/blog/wp-content/uploads/2022/01/top_term_2021_dict2-640x320.png 640w, https://gerry.lamost.org/blog/wp-content/uploads/2022/01/top_term_2021_dict2-150x75.png 150w, https://gerry.lamost.org/blog/wp-content/uploads/2022/01/top_term_2021_dict2-350x175.png 350w, https://gerry.lamost.org/blog/wp-content/uploads/2022/01/top_term_2021_dict2.png 1200w" sizes="auto, (max-width: 550px) 100vw, 550px" /><br />
如果我们剔除那些只是简单提到这些名词的论文，只考虑在正文中反复提到（大于5次）相关概念的文章，那么排名前10的关键术语可修正为：</p>
<ol>
<li>磁场（magnetic field, 1234篇）</li>
<li>活动星系核（active galactic nucleus, 990篇）</li>
<li>引力波（gravitational wave, 732篇）</li>
<li>能谱分布（spectral energy distribution, 724篇）</li>
<li>恒星形成（star formation, 677篇）</li>
<li>宇宙微波背景辐射（cosmic microwave background, 676篇）</li>
<li>暗物质（dark matter, 674篇）</li>
<li>功率谱（power spectrum, 602篇）</li>
<li>黑洞（black hole, 582篇）</li>
<li>星际介质（interstellar medium, 527篇）</li>
</ol>
<p>它们在一定程度上代表了天文学的主流方向和热门话题。排名前十的缩略词分别是：</p>
<ol>
<li>活动星系核（AGN，1589篇）</li>
<li>能谱分布（SED，1358篇）</li>
<li>信噪比（S/N，1320篇）</li>
<li>宇宙微波背景辐射（CMB，1256篇）</li>
<li>星际介质（ISM，1072篇）</li>
<li>马尔可夫链蒙特卡洛方法（MCMC，1053篇）</li>
<li>点扩散函数（PSF，938篇）</li>
<li>引力波（GW，879篇）</li>
<li>暗物质（DM，823篇）</li>
<li>恒星形成率（SFR，741篇）</li>
</ol>
<p>这些词对于天文工作者来说都是比较熟悉的，因为使用频率高，而全称又比较长，所以大家习惯用缩写代替。如果剔除这类常见（天文名词数据库中已收录）的条目，出现频率最高的五个新缩略词是：<br />
1，暗能量巡天（dark energy survey，DES，268篇）<br />
2，恒星形成历史（star formation history， SFH ，246篇）<br />
3，双黑洞（binary black hole，BBH，211篇）<br />
4，卷积神经网络（convolutional neural network，CNN，200篇）<br />
5，双中子星（binary neutron star，BNS，184篇）</p>
<p>而频率上升最快的缩略词当属 “盖娅第三批早期数据”（Gaia early data release 3，EDR3，123篇）。它指的是欧洲空间局天体测量卫星“盖娅”在2020年12月释放的第三批早期数据。得益于其高质量的数据，在一年时间里就有超过一百篇相关论文的热度，产出相当可观。这些文章的发布时间如图所示：<br />
<img loading="lazy" decoding="async" class="aligncenter size-large wp-image-296067" src="https://gerry.lamost.org/blog/wp-content/uploads/2022/01/gaiaedr3-640x480.png" alt="GaiaEDR3论文趋势" width="550" height="413" srcset="https://gerry.lamost.org/blog/wp-content/uploads/2022/01/gaiaedr3-640x480.png 640w, https://gerry.lamost.org/blog/wp-content/uploads/2022/01/gaiaedr3-150x113.png 150w, https://gerry.lamost.org/blog/wp-content/uploads/2022/01/gaiaedr3-350x263.png 350w, https://gerry.lamost.org/blog/wp-content/uploads/2022/01/gaiaedr3.png 960w" sizes="auto, (max-width: 550px) 100vw, 550px" /></p>
<p>现代科研论文的写作格式和风格是程式化的，有固定的表达方式和风格。我们也统计了论文中的常用词组，大家看看是不是很熟悉?</p>
<ul>
<li>other hand （7809篇）</li>
<li>right panel （4354篇）</li>
<li>wide range（3822篇）</li>
<li>large number（3745篇）</li>
<li>free parameter（3494篇）</li>
<li>previous study（3467篇）</li>
<li>parameter space（3414篇）</li>
<li>bottom panel（3411篇）</li>
<li>good agreement（3373篇）</li>
<li>future work （3266篇）</li>
</ul>
<p>现代天文学研究方向众多，发展迅速，想要全面了解整个学科的前沿进展变得越来越困难。由于技术条件的限制，本文只做了简单的词频分析和统计。有关这些术语词频的详细信息可浏览<a href="https://nadc.china-vo.org/arxivterm/" target="_blank" rel="noopener">词频提取结果页面</a>。而要想让机器自动识别热点问题和科研动向，我们还需要新的算法和工具。</p>
]]></content:encoded>
					
					<wfw:commentRss>https://gerry.lamost.org/blog/?feed=rss2&#038;p=296064</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>编辑器SciTE介绍</title>
		<link>https://gerry.lamost.org/blog/?p=296018</link>
					<comments>https://gerry.lamost.org/blog/?p=296018#respond</comments>
		
		<dc:creator><![CDATA[gerry]]></dc:creator>
		<pubDate>Mon, 08 Jun 2020 12:05:08 +0000</pubDate>
				<category><![CDATA[砍柴铸刀]]></category>
		<category><![CDATA[editor]]></category>
		<category><![CDATA[EmEditor]]></category>
		<category><![CDATA[Lua]]></category>
		<category><![CDATA[SciTE]]></category>
		<category><![CDATA[编辑器]]></category>
		<category><![CDATA[脚本]]></category>
		<guid isPermaLink="false">http://gerry.lamost.org/blog/?p=296018</guid>

					<description><![CDATA[虽然已经2020年了，我还是和二十多年前一样，用着老式的文本编辑器撰写程序和文档,然后在命令行下运行调试。对我 [&#8230;]]]></description>
										<content:encoded><![CDATA[<p><img loading="lazy" decoding="async" src="https://gerry.lamost.org/blog/wp-content/uploads/2020/06/editor.png" alt="Editor" width="700" height="96" class="aligncenter size-full wp-image-296044" srcset="https://gerry.lamost.org/blog/wp-content/uploads/2020/06/editor.png 700w, https://gerry.lamost.org/blog/wp-content/uploads/2020/06/editor-150x21.png 150w, https://gerry.lamost.org/blog/wp-content/uploads/2020/06/editor-350x48.png 350w, https://gerry.lamost.org/blog/wp-content/uploads/2020/06/editor-640x88.png 640w" sizes="auto, (max-width: 700px) 100vw, 700px" /><br />
虽然已经2020年了，我还是和二十多年前一样，用着老式的文本编辑器撰写程序和文档,然后在命令行下运行调试。对我来说，一个顺手的通用文本编辑器至少应该满足下面几个条件：</p>
<ol>
<li>使用能区分O和0，I和l的等宽字体；在这一点上，最常用的中文字体宋体和黑体都不够友好</li>
<li>支持主流编程语言的语法高亮，可自行增加对小众语言的支持；</li>
<li>能够显示空格，制表符，换行符等空白字符；</li>
<li>查找替换支持正则表达式(Regular Expression)；</li>
<li>占用资源小，支持操作GB级大文件;</li>
<li>支持调用自定义脚本;</li>
</ol>
<p>在Windows下，我用了很多年的<a href="https://www.emeditor.com/" rel="noopener" target="_blank">Emeditor</a>，后来工作环境迁移到Linux系统下，用不惯vim和emacs，就一直用<a href="https://www.scintilla.org/SciTE.html" rel="noopener" target="_blank">SciTE</a>将就。时间一长，也逐渐适应了这个轻巧的工具。它是作为开源编辑器框架Scintilla的示例软件开发的，完成度不高，配置和扩展都不够友好。不过这个框架本身自由度很高。许多著名的轻量编辑器都是基于它开发的，例如<a href="https://notepad-plus-plus.org/" rel="noopener" target="_blank">Notepad++</a>，<a href="http://www.geany.org/" rel="noopener" target="_blank">Geany</a>等。后来随着计算机硬件性能的升级，拥有更多时髦功能的<a href="https://www.sublimetext.com/" rel="noopener" target="_blank">Sublime Text</a>, <a href="https://atom.io/" rel="noopener" target="_blank">Atom</a>或者<a href="https://code.visualstudio.com/" rel="noopener" target="_blank">VSCode</a>等编辑器得到了更多的关注。也许SciTE看上去有些过时。但作为一款仅有2M大小的跨平台开源软件，它有着更少的资源占用和更快的响应速度。除了对字符集的识别不那么智能，以及不支持跨行搜索之外，我还真找不到更换它的理由。这里整理了一些使用和配置的经验，方便有一定编程基础的中文用户参考。</p>
<p><span id="more-296018"></span></p>
<p>SciTE在Ubuntu下可以直接用apt安装。不过仓库中通常不是最新版。如果想要安装最新版就要自行编译。编译过程并不复杂，装好gtk2.0库之后，只需要按照说明文件先后编译scintilla框架和scite程序即可。ubuntu下的参考命令如下（Windoes用户可直接跳过）：<br />
<code><br />
sudo apt-get install gtk2.0   # 安装gtk库<br />
cd scintilla/gtk              # 进入框架目录<br />
make prefix="~/scite"         # 编译框架，用prefix指定安装目录，若安装至系统默认路径可省略此部分<br />
cd ../../scite/gtk            # 进入编辑器目录<br />
make prefix="~/scite"         # 编译SciTE编辑器，并指定安装目录，波浪线~代表用户主目录<br />
make install prefix="~/scite"    # 安装至用户目录，所以无需根用户权限<br />
</code><br />
刚安装好的SciTE就像个记事本，没有什么功能和特点，所有配置都需要用户自行设定。而且它没有设计图形化的交互界面，绝大部分设置都是以配置文件中的命令参数来控制的。这是SciTE上手最困难的地方。但只要克服了这一点，就能够感受它的轻巧灵便了。<br />
在Option面板中，有4级配置文件可选，分别是Local（仅对当前文件生效），Directory（对当前目录生效），User（对当前用户生效），Global（全局有效）。可以实现非常灵活的配置设定。各类参数开关在<a href="https://www.scintilla.org/SciTEDoc.html" rel="noopener" target="_blank">文档页面</a>中有详细说明，从头来写无疑是冗长琐碎的。对于轻度用户来说，只要找到合适的配置文件粘贴为User配置就好，范例如下：</p>
<p><code><br />
# 基础设定<br />
check.if.already.open=0   # 检查软件是否已经运行<br />
title.full.path=1         # 标题显示完整路径<br />
toolbar.visible=0         # 图形工具栏是否可见<br />
position.width=800        # 编辑窗口默认宽度<br />
line.margin.visible=1     # 是否显示行号栏<br />
line.margin.width=3+      # 行号栏宽度<br />
code.page=65001           # UTF8编码编辑<br />
output.code.page=65001    # 以UTF8编码保存<br />
use.tabs=0                # 是否使用制表符<br />
tabsize=4                 # 制表符长度<br />
indent.size=4             # 缩进长度<br />
view.whitespace=1         # 显示空白字符<br />
autocompleteword.automatic=1   # 文本自动完成</p>
<p># 字体及显示<br />
font.default=DejaVuSansCondensed   # 默认字体<br />
font.base=font:DejaVu Sans Mono,size:12        # 基础字体<br />
font.small=font:DejaVu Sans Mono,size:11       # 小号字体<br />
font.comment=font:DejaVu Sans Mono,size:12     # 注释字体</p>
<p># 高亮搜索结果<br />
selection.fore=#FF0000       # 选中内容字体颜色<br />
selection.back=#000000       # 选中内容背景颜色<br />
selection.alpha=64           # 选中内容背景透明值<br />
highlight.current.word=1     # 高亮当前选中词<br />
highlight.current.word.colour=#FFFF00    #   高亮内容颜色</p>
<p># 状态栏设定<br />
statusbar.visible=1   # 是否显示底部状态栏<br />
statusbar.number=1    # 状态栏行数<br />
statusbar.text.1=\<br />
Line: [$(LineNumber)/$(NbOfLines)]  - Col: [$(ColumnNumber)]  -  [$(EOLMode)] - [$(OverType)]<br />
# 包含 当前行数/总行数, 当前列数，换行模式，改写/插入， </p>
<p></code><br />
保存这个配置之后，SciTE的表现已经好过各个平台自带的编辑器了。上手之后，可以根据需要进行更多的调整。例如可以在右键菜单中添加各类<a href="https://www.autoitscript.com/autoit3/scite/docs/SciTE4AutoIt3/Scitedoc/CommandValues.html" rel="noopener" target="_blank">内部命令</a><br />
<code><br />
user.context.menu=\<br />
||\          # 分割线<br />
View White Space|IDM_VIEWSPACE|\     # 显示空白字符<br />
View End of Line|IDM_VIEWEOL|\       # 显示换行符<br />
Tab Switch|IDM_TABSIZE|\             # 切换制表符<br />
||\<br />
Copy Path of This File|IDM_COPYPATH|\  # 复制文件路径<br />
</code><br />
可以从Global配置文件中复制出不需要的语法高亮配置加以隐藏<br />
<code><br />
menu.language=\<br />
#FreeBasic|bas||\      # 注释不需要的语言<br />
Txt|txt||\             # 保留需要的语言<br />
……<br />
</code><br />
不过，SciTE最强大的地方是它对Lua脚本的支持。而这恰恰也是网上资料最少的部分。Lua是一个轻量的脚本语言，非常适合嵌入到其他程序当中。原生SciTE中缺失的文本排序，字符统计，批量替换，空行删除等功能都可以通过Lua脚本实现。可以说，只有加载了Lua脚本的SciTE才是这个编辑器的完整形态。详细的设置步骤可以参考<a href="http://lua-users.org/wiki/UsingLuaWithScite" rel="noopener" target="_blank">Lua用户社区中的相关页面</a>。我这里以一个统计字数的简单函数为例进行说明。</p>
<p>首先要写一个Lua统计函数，需要调用<a href="https://www.scintilla.org/PaneAPI.html" rel="noopener" target="_blank">SciTE的内部接口</a>来进内容交互，使用Lua 的函数命令进行处理，这里是<a href="https://q-syshelp.qsc.com/Content/Control_Scripting/Lua_5.3_Reference_Manual/Standard_Libraries/4_-_Basic_UTF-8_Support.htm" rel="noopener" target="_blank">utf8.len</a>。<br />
<code><br />
# lua脚本文件代码<br />
function PrintUTF8Length()                  # UTF8 字符数统计<br />
   local sel = editor:GetSelText()          # 捕获所选文本<br />
   print(utf8.len(sel)..' chars selected')  # 输出字符统计结果<br />
end<br />
</code></p>
<p>将上面的函数保存成后缀为lua的文本文件（最好删除中文字符）就得到Lua脚本。然后在配置文件中以下面的参数加入脚本路径并设置好菜单，重启SciTE之后就可以在Tools菜单中看到新命令了，这时只要点击一下就可以在右侧的输出面板看到结果。<br />
<code><br />
ext.lua.startup.script=./scitelib.lua   # 指定lua脚本路径<br />
command.name.10.*=Length(UTF8)          # 菜单命令名称<br />
command.10.*=PrintUTF8Length            # 调用函数名称<br />
command.shortcut.10.*=Ctrl+M            # 绑定快捷键<br />
command.mode.10.*=subsystem:lua,savebefore:no   # 是否保存<br />
</code><br />
<img loading="lazy" decoding="async" src="https://gerry.lamost.org/blog/wp-content/uploads/2020/06/Screenshot-from-2020-06-08-16-08-09.png" alt="SciTE" width="764" height="329" class="aligncenter size-full wp-image-296043" srcset="https://gerry.lamost.org/blog/wp-content/uploads/2020/06/Screenshot-from-2020-06-08-16-08-09.png 764w, https://gerry.lamost.org/blog/wp-content/uploads/2020/06/Screenshot-from-2020-06-08-16-08-09-150x65.png 150w, https://gerry.lamost.org/blog/wp-content/uploads/2020/06/Screenshot-from-2020-06-08-16-08-09-350x151.png 350w, https://gerry.lamost.org/blog/wp-content/uploads/2020/06/Screenshot-from-2020-06-08-16-08-09-640x276.png 640w" sizes="auto, (max-width: 764px) 100vw, 764px" /></p>
<p>因此，借助Lua语言和SciTE的内置API，可以对这个编辑器进行深度的定制。一度有不少软件都将SciTE改造成专用的IDE，比如<a href="https://www.autoitscript.com/site/autoit-script-editor/" rel="noopener" target="_blank">Scite4AutoIt3</a>。其他常用的Lua函数还包括<br />
<code lang=lua><br />
function replacetext()     #  全局替换<br />
  local text = editor:GetText()<br />
  text = text:gsub("。", ".")   # 全角句号改半角<br />
  editor:SetText(text)<br />
end</p>
<p>function InsertDate()   #插入当前日期<br />
  local date_string = os.date("%Y.%m.%d %H:%M")<br />
  editor:AddText(date_string)<br />
end</p>
<p>function del_empty_lines()  # 删除空行<br />
  local txt = editor:GetText()<br />
  if #txt == 0 then return end<br />
  local chg, n = false<br />
  while true do<br />
    txt, n = string.gsub(txt, "(\r?\n)%s*\r?\n", "%1")<br />
    if n == 0 then break end<br />
    chg = true<br />
  end<br />
  if chg then<br />
    editor:SetText(txt)<br />
    editor:GotoPos(0)<br />
  end<br />
end</p>
<p>function pytemplate()    #  片段模板插入<br />
  local py_temp = [[#! /usr/bin/python<br />
# coding = utf-8<br />
# By XXX @ ]] ..os.date("%Y.%m.%d").. [[<br />
# Function:<br />
# Usage: </p>
<p>def main():<br />
    print()</p>
<p>if __name__ == "__main__":<br />
    main()<br />
  ]]<br />
  editor:AddText(py_temp)<br />
end<br />
</code><br />
你还可以在Lua用户社区中可以找到更多<a href="http://lua-users.org/wiki/SciteScripts" rel="noopener" target="_blank">现成的脚本</a>。需要注意的是，SciTE只会载入一个脚本，所以这些函数都要放到同一个文件当中。我知道的就是这些，祝玩得愉快！</p>
]]></content:encoded>
					
					<wfw:commentRss>https://gerry.lamost.org/blog/?feed=rss2&#038;p=296018</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>rime拆字词库</title>
		<link>https://gerry.lamost.org/blog/?p=296003</link>
					<comments>https://gerry.lamost.org/blog/?p=296003#comments</comments>
		
		<dc:creator><![CDATA[gerry]]></dc:creator>
		<pubDate>Sun, 29 Dec 2019 10:21:21 +0000</pubDate>
				<category><![CDATA[砍柴铸刀]]></category>
		<category><![CDATA[code]]></category>
		<category><![CDATA[Python]]></category>
		<category><![CDATA[词库]]></category>
		<category><![CDATA[输入法]]></category>
		<guid isPermaLink="false">http://gerry.lamost.org/blog/?p=296003</guid>

					<description><![CDATA[中州韵Rime是佛振开发的一款跨平台的开源输入法。支持拼音，双拼，五笔，仓颉等多种输入方案的简繁输入。我在Li [&#8230;]]]></description>
										<content:encoded><![CDATA[<p><a href="https://rime.im/" rel="noopener" target="_blank">中州韵Rime</a>是佛振开发的一款跨平台的开源输入法。支持拼音，双拼，五笔，仓颉等多种输入方案的简繁输入。我在Linux下使用多年，稳定朴素，体验很好。在MintLinux(Ubuntu)命令行下直接用apt安装fcitx-rime包即可。和大多数Linux下的开源软件一样，rime没有完整的图形化配置界面。它的各项配置由 .config/fcitx/rime 目录下的一系列文件控制。 <strong>明月拼音·简化字</strong> 方案的用户自定义配置文件为luna_pinyin_simp.custom.yaml ，可定义扩充词库、加载自定义符号库、模糊拼音等。具体的初始设置过程可以参考<a href="https://mritd.me/2019/03/23/oh-my-rime/" rel="noopener" target="_blank">这篇文章</a>。<br />
<img decoding="async" src="https://gerry.lamost.org/blog/wp-content/uploads/2019/12/rime2.jpg" alt="rime2" width="400" class="aligncenter size-full wp-image-296010" srcset="https://gerry.lamost.org/blog/wp-content/uploads/2019/12/rime2.jpg 633w, https://gerry.lamost.org/blog/wp-content/uploads/2019/12/rime2-150x77.jpg 150w, https://gerry.lamost.org/blog/wp-content/uploads/2019/12/rime2-350x179.jpg 350w" sizes="(max-width: 633px) 100vw, 633px" /><br />
我因为经常有字不知道拼音无法输出，偶尔会想念其他平台软件提供的拆字输入法。于是干脆为Rime做了一个拆字词库。基本思路是将汉字拆开成不同部分，然后将各个部分转化为拼音即可。借助现成的<a href="https://github.com/kfcd/chaizi" rel="noopener" target="_blank">汉语拆字字典</a>（包含17803汉字，共27603种拆法）和<a href="https://github.com/mozillazg/python-pinyin" rel="noopener" target="_blank">汉字拼音转换工具（Python 版）</a>，很容易完成。具体代码如下：<br />
<span id="more-296003"></span></p><pre class="urvanov-syntax-highlighter-plain-tag">#! /usr/bin/python
# coding = utf-8 

# By Gerry @ 2019.12.28
# Usage: make chaizi dictionary for rime
# base on :
# https://github.com/mozillazg/python-pinyin
# https://github.com/kfcd/chaizi

def chai():
    from pypinyin import lazy_pinyin
    lines = open(&quot;chaizi-master/chaizi-jt.txt&quot;).readlines()   # 载入简体拆字字典
    dfile = open(&quot;luna_pinyin_simp.chaizi.dict.yaml&quot;,&quot;w&quot;)     # 打开待写入字库文件
    dfile.write(
    &quot;&quot;&quot;---
    name: luna_pinyin_simp.chaizi
    version: &quot;2019.12.28&quot;
    sort: by_weight
    use_preset_vocabulary: true
    ...

    &quot;&quot;&quot;
    )
    for line in lines:
        data = line.strip().split(&quot;\t&quot;)
        for i in range(1,len(data)):
            # 笔画转拼音，以字母u开头
            py = &quot;u&quot;+&quot;&quot;.join(lazy_pinyin(data[i].replace(&quot; &quot;,&quot;&quot;)))  
            if py.isalpha():
                 # 生成rime词库要求格式，默认词频为1
                item = data[0].strip()+&quot;\t&quot;+py+&quot;\t1\n&quot;  
                dfile.write(item)
            else:
                print(data[i])
    dfile.close()

def main():
    chai()

if __name__ == &quot;__main__&quot;:
    main()</pre><p>将得到的拆字字库 luna_pinyin_simp.chaizi.dict.yaml 放到配置目录中，并在输入法对应的配置文件 luna_pinyin_simp.extended.dict.yaml 中加载该字库并重新部署（Deploy）输入法即可。不熟悉python的同学可以直接<a href="http://gerry.lamost.org/upload/rime_chaizi.zip" rel="noopener" target="_blank">在此下载词库</a>。<br />
<code>import_tables:<br />
- luna_pinyin<br />
- luna_pinyin_simp.chaizi    ### 拆字字库<br />
</code><br />
虽然有个别成分因为缺乏对应的拼音而没有被列入，但起码解决了Rime输入法拆字功能的有无问题。丒(urenyi)伿(urenzhi)骉(umamama)这样的生僻字都可以直接输入，终于不用频繁去<a href="https://www.zdic.net/" rel="noopener" target="_blank">汉典</a>上查偏旁部首了。希腊字母，特殊字符的输入也可以如法炮制。有更高要求的用户在此基础上自行调整即可。</p>
]]></content:encoded>
					
					<wfw:commentRss>https://gerry.lamost.org/blog/?feed=rss2&#038;p=296003</wfw:commentRss>
			<slash:comments>7</slash:comments>
		
		
			</item>
		<item>
		<title>我与ADS</title>
		<link>https://gerry.lamost.org/blog/?p=295973</link>
					<comments>https://gerry.lamost.org/blog/?p=295973#respond</comments>
		
		<dc:creator><![CDATA[gerry]]></dc:creator>
		<pubDate>Tue, 23 Apr 2019 12:09:31 +0000</pubDate>
				<category><![CDATA[星夜札记]]></category>
		<category><![CDATA[ADS]]></category>
		<category><![CDATA[天文]]></category>
		<category><![CDATA[网站]]></category>
		<guid isPermaLink="false">http://gerry.lamost.org/blog/?p=295973</guid>

					<description><![CDATA[ADS是美国天体物理数据系统(The SAO/NASA Astrophysics Data System)的缩 [&#8230;]]]></description>
										<content:encoded><![CDATA[<p><img loading="lazy" decoding="async" src="https://gerry.lamost.org/blog/wp-content/uploads/2019/04/newlogo.gif" alt="newlogo" width="349" height="168" class="aligncenter size-full wp-image-295984" /> </p>
<p>ADS是美国<a href="http://adsabs.harvard.edu/" rel="noopener" target="_blank">天体物理数据系统</a>(The SAO/NASA Astrophysics Data System)的缩写。我第一次知道这个系统是在15年前。当时我因为要做文献综述而大量检索论文。物理学科期刊对论文下载权限和数量的限制带来诸多不便，历史文献分散在各地也令人发愁。我偶然被搜索引擎带到ADS网站，发现天文学科的论文数据竟然如此便捷开放。这个囊括了世界各国天文期刊、台刊、年报、会议文集、甚至图书信息的数据库居然不需要注册就能随意检索，而且其中绝大部分文章可以直接下载全文！那时的我觉得这就是世界大同的模样。正是折服于这个网站所展现出来的开放与友好，我对天文这个学科好感倍增，并最终成为其中的一员。</p>
<p><span id="more-295973"></span></p>
<p>ADS系统的开发始于上世纪80年代末，旨在为天体物理领域的科研论文建立索引，为研究者提供方便。团队一方面扫描资料室中尘封已久的历史文献，提供全文检索和下载，另一方面与现代出版机构合作，收录最新期刊和会议论文摘要。最重要的一点是，这个系统虽然由美国宇航局(NASA)资助，但面向全世界开放服务。因此在1994年系统接入互联网之后，很快就成为这个学科无可替代的重要工具。</p>
<p>ADS系统目前是由史密松天体物理台运营维护。25年来已经收录了一千四百多万条文献记录。覆盖了天体物理的几乎所有学科。每条记录都包含丰富的信息，从常见的标题、摘要、出版时间，到不常见的数据链接、引用关系……全面收集了研究者所需的各种元信息。它提供的检索方式也十分灵活多样，能够有效地提升研究者的工作效率。从前在资料室和图书馆书架前经年累月的翻查浏览都变成了网站页面中的输入点击，省下无数的时间心力。不仅如此，为了方便全世界同行的访问，团队先后在包括中国在内的世界各地建立了10个地区镜像站。这极大地方便了小型研究单位和欠发达国家的天文研究者。直到今天，ADS仍是所有基础学科中最为成熟和全面的文献检索系统。<br />
<img decoding="async" src="https://gerry.lamost.org/blog/wp-content/uploads/2019/04/serveimage-350x175.jpeg" alt="serveimage" width="300" class="alignleft size-medium wp-image-295975" srcset="https://gerry.lamost.org/blog/wp-content/uploads/2019/04/serveimage-350x175.jpeg 350w, https://gerry.lamost.org/blog/wp-content/uploads/2019/04/serveimage-150x75.jpeg 150w, https://gerry.lamost.org/blog/wp-content/uploads/2019/04/serveimage.jpeg 500w" sizes="(max-width: 350px) 100vw, 350px" /> 站在这个系统背后的是美国高能天体物理学家<a href="https://www.cfa.harvard.edu/news/2015-17" rel="noopener" target="_blank">史蒂夫 Stephen S. Murray</a>(1944-2015)。他是一名资深的X射线天文学家，参与的项目涵盖了二十世纪最重要的几颗X射线卫星——乌呼鲁(Uhuru)，爱因斯坦天文台，ROSAT，钱德拉X射线望远镜。他从事的工作也跨越了软件开发、硬件研制、以及科学研究等各个环节。相比之下，ADS系统的开发只是他精彩生涯中的一颗无心之柳。但这项工作的价值和影响远远超出了他的研究领域。 史蒂夫从1992年起就担任ADS系统的首席科学家直到他2015年过世。可以说，他是ADS系统的缔造者和守护者。</p>
<p>但他在这方面留下的记录并不多。我不知道他为这个系统付出过多大的努力。这里只能以我个人的经历提供一个小小的注脚。我在意大利读博期间有幸参与了他领导的一个国际合作项目：宽场X射线望远镜(WFXT)。这是一个雄心勃勃的X射线巡天项目，包括诺奖得主贾科尼在内的项目成员奔走呼吁近20年，却由于各种原因始终未获关键资助。2009年，我在开<a href="http://www.sexten-cfa.eu/event/wide-field-x-ray-telescope-collaboration/" rel="noopener" target="_blank">项目年会</a>时意外得知他就是ADS的负责人。便厚着脸皮用Graphviz 绘制了论文间的引用关系树去找他聊了几句我对ADS的想法。一旁的Martin Weisskopf老爷子跟他还开玩笑说，要不你招他给你干活吧。史蒂夫转头跟他说了些什么，我没太听懂（我不太习惯他的美国口音）。不过如今新版的ADS系统中已经增加了相应的功能——作者网络图(Author Network)和论文网络图(Paper Network),而且是以更加高级的方式呈现。他似乎真的记下了当年那个腼腆的中国学生所提的需求。</p>
<div id="attachment_295976" style="width: 560px" class="wp-caption aligncenter"><img loading="lazy" decoding="async" aria-describedby="caption-attachment-295976" src="https://gerry.lamost.org/blog/wp-content/uploads/2019/04/t1-640x448.png" width="550" height="385" class="size-large wp-image-295976" srcset="https://gerry.lamost.org/blog/wp-content/uploads/2019/04/t1-640x448.png 640w, https://gerry.lamost.org/blog/wp-content/uploads/2019/04/t1-150x105.png 150w, https://gerry.lamost.org/blog/wp-content/uploads/2019/04/t1-350x245.png 350w, https://gerry.lamost.org/blog/wp-content/uploads/2019/04/t1.png 1365w" sizes="auto, (max-width: 550px) 100vw, 550px" /><p id="caption-attachment-295976" class="wp-caption-text">当年给史蒂夫展示的论文引用关系树。箭头表示引用关系，圈中数字为引用数。</p></div>
<p>经典的ADS系统在运行了十几年之后，检索技术和架构都已无法满足当前的需要。自2011年起，ADS团队就开始着手开发全新的系统和界面，以适应新的平台和网络环境。新版系统采用全新的搜索引擎，简化的搜索界面，而且支持全文搜索（之前只能搜索摘要），还提供全功能的API接口，能够提供更加便捷细致的服务。此外，为了应对与日俱增的访问需求，新系统也迁移到亚马逊公司的AWS云平台上来保证稳定的服务。在经过3年的公测之后，新版ADS终于要在今年转正了，经典网站将在5月31日终止服务。对于老用户来说，这是个伤感的时刻，和史蒂夫离开我们的瞬间一样，终究会到来。而对于新的开发者和用户，这是一个全新的开始……</p>
<p>在天文界，ADS网站这样造福同行的系统并不是绝无仅有的案例。事实上，它的成功也有赖于整个学科的支持和分享。期刊数据需要各专业杂志的配合，论文全文则来自预印本网站arXiv的用户上传，科学数据托管则是由法国CDS星表库提供服务。正因为这些遍布全球的专业团队开诚布公的合作，天文学家们才得以集合全世界的才智揭开宇宙深处的奥秘。也正是因为在这个领域中经常能看到这样值得尊敬的同行和工作，我从来没有怀疑过自己当年的选择。</p>
<p>后记：<br />
在我印象里，史蒂夫是个体格健壮、和蔼坦率的老爷子。2015年8月我收到合作者发来的讣告时感到十分意外。一直想为他写点什么，但迟迟没有动笔。如今，新版ADS即将上线，崔博士约我撰文介绍，便借此机会表达一下我的怀念：史蒂夫的工作给了我诸多助益，而我现在能做的，就是替他去探索更遥远的世界。</p>
<div id="attachment_295977" style="width: 560px" class="wp-caption aligncenter"><img loading="lazy" decoding="async" aria-describedby="caption-attachment-295977" src="https://gerry.lamost.org/blog/wp-content/uploads/2019/04/c_img_3164-640x427.jpg" width="550" height="367" class="size-large wp-image-295977" srcset="https://gerry.lamost.org/blog/wp-content/uploads/2019/04/c_img_3164-640x427.jpg 640w, https://gerry.lamost.org/blog/wp-content/uploads/2019/04/c_img_3164-150x100.jpg 150w, https://gerry.lamost.org/blog/wp-content/uploads/2019/04/c_img_3164-350x233.jpg 350w, https://gerry.lamost.org/blog/wp-content/uploads/2019/04/c_img_3164.jpg 1200w" sizes="auto, (max-width: 550px) 100vw, 550px" /><p id="caption-attachment-295977" class="wp-caption-text">阿尔卑斯山下的意大利山村Sesto。2009年，我在这里第一次见到史蒂夫。</p></div>
]]></content:encoded>
					
					<wfw:commentRss>https://gerry.lamost.org/blog/?feed=rss2&#038;p=295973</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
	</channel>
</rss>
