soodoshll's Blog

目前在Solaris下面安装开源软件唯一的好办法——pkgutil

这个标题一点都不夸张……我近来在虚拟机上玩solaris10,但是发现系统自带的软件普遍比较老。在上古传说中,可以在一个叫做sunfreeware的网站上面下载软件,但是竟然发现这个网站开 始收费了!真是时运不济。于是我想要另寻出路。我花了很长时间搜索,找到了一个sunfreeware的镜像,可惜软件都是2006年的;后来我又找到了 一个companion CD的电驴下载链接,然后我就成功安装上了emacs21;我尝试自己编译一下GNU的软件,但是发现很多软件的依赖满足不了……我吐血了。

正当我走到绝境之时,让我顿时感觉绝处逢生的pkgutil出现了。这种神器,是我在阅读《UNIX·Linux.系统管理技术手册(第4版)》时发现的好东西。所以,真正的好东西很多都在书里,不是普通地上网随便浏览能够找到的。

我 在网上搜索了pkgutil,发现有几篇中文文章时关于pkgutil的,但是数量不多。其实这个工具和debian下面的apt-get差不多,是一个 软件包管理器,并且有一个软件仓库,可以自动下载安装软件,并且自动解决依赖问题。它的官方网站是http://pkgutil.wikidot.com/,竟然还是 wikidot,真是节俭……

安装过程非常简单,特别是在solaris10下面,只需要运行一条命令:

pkgadd -d http://get.opencsw.org/now

 

然后就可以使用了,最常用的就是两条命令了:

1.搜索:pkgutil -a packagename
2.安装:pkgutil -i packagename(如果加上-y就可以静默安装,不会提示你输入y/n)

 

 

计划与执行

CLTL2

这个暑假终于进入了最后几天,回顾这个暑假,除了学习了吉他这种乐器以外其他几乎一无所成,在学习上我完全有理由相信与别人的差距已经越来越大。事态真的已经到了危急存亡之秋,希望下次假期,或者每个双修日我都能仔仔细细地看几遍这篇文章,再感受一下暑假将要结束地日子里我地复杂心情,并且引以为戒。

自从2010年以来,我在计算机方面可以说是停滞不前。之前因为学习了一些adobe软件地基本用法,在同龄人里面占有一定的优势。但这个优势并不是真正的优势,只是提早学会了一些没什么用的东西,只是工具罢了。如果有个人在我那个年级学会了挖机,也应该被同样的对待,升学加分等等。最近一段时间,由于OI竞赛的需求,我再次找准了努力的方向,尽管十分的艰难,但也比自己像个无头苍蝇乱撞要好。

从去年来,我就在持续关注lisp语言,我还购买阅读了SICP一书,学习了scheme。但是我想我更需要的可能还是CommonLisp,今天我花了60多块钱印制的CLTL2终于到货了,极其厚重。我对我能否把它看完持怀疑态度。差不多厚度的《物理学基础》我就没有耐心将其看完。

这么多年来,我以为的CS已经到达了一个不错的水平,而实际情况是我可能连入门都没有入呢!我只不过是沉浸在虚荣当中罢了。我只是听说有那么一些好东西,却没有深入的研究。所以这些优势是会被轻而易举地超越的。不说核心思想,我连技能都没掌握多少。我最近发现,学习CS的最好方法不是在电脑上,而是在书里,如果我能静下心来看一本书,无论是重新仔细地阅读一遍SICP,还是阅读编译原理、C++ primer、CLTL2等等,我相信都要比呆坐在电脑前面要好。之前我把大量的时间投入到安装、配置系统中去,但几年下来对于Linux系统还是没有一个大概的了解,只是表面上的应用学会了一点。我会配置、安装各种平台的lisp,但是却不怎么会写。实在太失败了……

而更加明知的选择是好好学习数理化等知识,在高考中取得一个好成绩,进入一个好大学,这样就可以更加顺利地学习了。我可能要重新计划一下我未来几年地生活,集中精力于某些方面,即『集中优势兵力,各个击破』,如果有时间再发展发展兴趣爱好。我现在不仅要争取学习成绩,还要弥补我过去十几年对于音乐知识地匮乏,任重道远,对于计算机知识的学习可能要放慢脚步了(之前几年基本就是原地打转,空耗精力)这个暑假,令我分心的东西实在太多了:音乐、哲学、各种语言、电子游戏。而我真正学有所成的只有吉他了,真是悲哀。更加悲哀的是,吉他我是请了老师的,而但凡我自学的,都以失败告终了。

上述那么多严重的问题归结起来就是执行力不够,严重的执行力不够!我相信我的计划是非常不错的,但是每次都不能将其落到实处,这是一件十分悲哀的事情。近期发现番茄工作法是一个不错的选择,今天我尝试了一下,效率、产出至少提高了10倍以上。而且计时器走时的嘀嗒声还起到的惊醒的作用。

而且我发现有两种心理状态经常让我中途放弃干正事。一种是受到诱惑,有一个声音告诉自己:做一会儿其他事情吧(这种状态下);第二种是学习疲惫了,想要休息一下。基本上所有的放弃的根源都是这两种心理状态。用了番茄工作法之后就好了很多,因为要强制自己专注于某一件事情。

留给下个假期的话:请你规划好自己的时间,提高执行力,明白你最需要什么!

七月总结

七月份过得太平淡,很多时间都被莫名其妙的浪费掉了。想想时间也不多了,暑假的自由时间的三分之二已经被挥霍掉了。剩下的一个月时间,有学校的竞赛班和军训,实际上自由的时间也只有十天了。所以我要好好反省一下这个七月。

  • 七月的头一个星期,比较放松,有几天去了图书馆,各种学习都在正常状态,但是周末比较松散
  • 第二个星期,同第一个星期,保持了低强度的学习
  • 第三个星期  彻底松散了下来,去西藏旅游
  • 25号回来之后的日子似乎一蹶不振,没有一点动力了,浪费了快一个星期
  • 明明时间压得很紧,只有一个月就要开学了,同时10月份还有NOIP,而我目测通过初赛还要一点挣扎……

所以现在真的是危急存亡之秋了。听了几堂竞赛课发现形势不容乐观。退出数学似乎已成定局,但是能不能搞好物理还是个问题。

我想想,如果能集中自己的才智,搞好物理一门还是没有问题的。至于数学怎么办,这还是一个问题。值得自己反省的地方太多了,光是某些奇怪的体液流失就令我身心疲惫 同时又浪费了大量的时间,还有一些没有意义的游戏。同时,在信息泛滥的社会当中,还是迷失了。需要重头来过的地方太多了。

  • 抓紧一切时间,让一切进入到计划当中来
  • 停止一切对我弊大于利的活动,要有自制力
  • 提高注意力,集中学习目前的重难点
  • ……

我把要注意的事项全部列出来,过一段时间看看落实得怎么样。

如何在windows下面自在的生活

我长期在windows、mac、linux等环境下切换,对于各种系统都积累的一定的经验(或者说仅仅是体验)私以为,windows是其中最复杂的一种,可以做的事情最多,日常打理也比较麻烦。我运行windows的机器是一台联想的t430s,从外观上来看就是傻大黑粗,键盘手感不错,但是屏幕不敢恭维,i5的CPU,4G内存后来又加了一条8G,带一个很鸡肋的独显。对于thinkpad原装系统,我觉得牺牲了一点系统资源,但是总体还是比较可靠,我就不忍心把它格掉重装了。然后就是我对于系统的一些改造,

原则

  1. 尽量做到优雅
  2. 不要一味追求精简

以上两条是我长期实践得出的经验(教训?) 我现在是有大内存的男人了,就该做些大内存该做的事情。

准备工作

我用thinkpad的恢复功能快速恢复了一个“干净”的thinkpad原版系统。之所以在前面加上引号,是因为这个系统同时自带了一大堆软件,其中有很多根本是用不上的。有一些多媒体软件什么直接卸载了,还有QQ电脑管家、百度工具栏……汗。

花了九牛二虎之力删掉了不用的软件,再用自带的升级工具打补丁、装驱动。这样就获得了一个相对纯净的系统。

我的软件选择

我的常用软件,列个表吧

  1. 压缩、解压软件 7zip
  2. 浏览器 经过我长年累月不断定制的firefox24 不更新了……
  3. 邮件客户端 thunderbird
  4. 虚拟机 virtualbox
  5. 图像管理 picasa
  6. 编辑器 我vim和emacs都安装了……
  7. 输入法 小狼毫 Rime
  8. 播放器 VLC
  9. 办公 LibreOffice
  10. 文件管理 total commander

有了这些软件之后,这个电脑就大概可以有点用处了,真是有了些安全感

细节

囿于t430s的1366的坑爹分辨率,有很多事情根本不能很爽的完成,比如虚拟机,只能开800×600的分辨率,如果里面再运行solaris studio这样的软件那就更局促了……而且16:9的屏幕迫使我设置了任务栏自动隐藏,平时要使用ctrl+tab在程序间切换(其实win+tab更加直观),其实这样用着也还可以,再结合win7的分屏功能,虽然有点局促,但是还是可以用的。

我安装的软件普遍都有很强的管理作用。windows的资源管理器其实根本不够满足资源管理的功能,音乐管理、照片管理、视频管理,都不行,所以要根据不同的需求安装不同的具有管理功能的软件。这些软件往往对一定的需求都有一个系统的解决方案,用起来非常舒服。比如代替资源管理器的total commander 你可以在里面运行vim编辑文件,还可以通过everything进行查找,而这些都是可以集成到total commander中的,这就是一个系统。再比如emacs也是这样,虽然有人说它“臃肿”,但既然电脑的配置不是问题,为什么要因为一个软件的大小来牺牲自己的体验呢?没有必要。emacs作为我的lisp编程使用的ide,定制性极强,非常好用。

我的工作环境以后要持续更新。

 

后记:thinkpad这种电脑陪XP才能做到真优雅!tnnd

测试scribefire

测试

Opensuse上通过Virtualbox体验windows8.1

进来尝试安装了来自德国的opensuse系统,觉得非常有安全感,决定将日常的操作系统切换到opensuse上来(opensuse拥有最好的KDE界面,而这些都是有德国政府支持的,真是非常非常有安全感!而且不用担心Gnome的各种奇怪设计,总之opensuse就是很好很好啦! \^o^/)

但是又想用windows怎么办呢?当然第一个想到的就是virtualbox了。但是安装virtualbox就是一个棘手的问题。一开始到oracle的网站上面去下载rpm包,安装之后发现各种麻烦!还有各种依赖关系,关键还要编译新内核。遂放弃。

opensuse的包管理工具,打开,搜索virtualbox,安装之……可以正常打开了,欣喜中。上网下载了win8.1的镜像,载入后发现悲剧了……在win8安装的启动画面后,显示:

your computer needs to restart.

 

具体的错误代码是0x000000c4。后来谷歌了一下,发现这是一个常见问题,只需要执行一个命令就可以了:

VBoxManage.exe" setextradata "虚拟机名" VBoxInternal/CPUM/CMPXCHG16B 1

说来也是奇怪,竟然一定要调用命令才可以……在GUI界面中无法设置,FT!

然后就可以了,一切正常。

PS:开虚拟机之后,机器一下变热了。我的是thinkpad t430s i5版的,配置还可以吧,用虚拟机还是不是很爽,分辨率也不是很够。所以双系统虚拟机什么的还是买两台电脑实在

python的局部变量的一些研究

以前学oi的时候学过pascal和c,后来接触的VB,发现凡是定义变量,都要声明,而python却可以直接使用赋值语句,这就涉及到一个局部变量的问题。在子函数里面的赋值语句到底是新建一个变量呢,还是修改上一级函数里的同名变量的值呢。为此我做了一下试验。

首先大家看一下下面这个例子:

>>> a=3
>>> def foo1():
	print a

	
>>> foo1()
3
>>> def foo2():
	a=a+3

	
>>> foo2()

Traceback (most recent call last):
  File "<pyshell#18>", line 1, in <module>
    foo2()
  File "<pyshell#17>", line 2, in foo2
    a=a+3
UnboundLocalError: local variable 'a' referenced before assignment

似乎全局变量在函数内是只读的?!

>>> a=[3,4]
>>> def foo():
	a.append(5)

>>> foo()
>>> a
[3, 4, 5]

这是怎么回事,继续做试验:

>>> a=10
>>> b=20

>>> def foo():
	a=b+10
	print a

	
>>> foo()
30
>>> a
10

这意思是说,在对局部变量进行赋值的时候,不能在后面出现同名的函数外的变量……

我觉得这个问题还是要阅读了Python的源码,研究了它的运行机制之后再下结论 

后来我去看了看《简明Python教程》,发现里面对global函数的描述是这样的:

如果你想要为一个定义在函数外的变量赋值,那么你就得告诉Python这个变量名不是局部的,而是 全局 的。我们使用global语句完成这一功能。没有global语句,是不可能为定义在函数外的变量赋值的。

你可以使用定义在函数外的变量的值(假设在函数内没有同名的变量)。然而,我并不鼓励你这样做,并且你应该尽量避免这样做,因为这使得程序的读者会不清楚这个变量是在哪里定义的。使用global语句可以清楚地表明变量是在外面的块定义的。

看来我的问题可以得到解答了。以后还是要多读读基础的东西。Python这门看似简单的语言其实隐藏了很多复杂的东西,要去好好研究。

这几天积累下来的一些python方面的技巧

我在这几天编写web框架的时候,深深感受到了python作为一门动态语言,是多么的灵活。这些灵活度是在使用C语言等语言时体会不到的。当然,说到灵活度,Lisp是最强大的,那是题外话了。

zip函数

在使用Python语言操作一些数据结构的时候,比如list、dict、string的时候,最好先查查有没有相关的函数、方法,因为往往一些比较常用而编写起来比较麻烦的功能其实都已经内置了。比如zip函数:

>>> a=['a','b','c']
>>> b=[1,2,3]
>>> c=['Alpha','Beta','Gamma']
>>> zip(a,b,c)
[('a', 1, 'Alpha'), ('b', 2, 'Beta'), ('c', 3, 'Gamma')]

用这个函数可以很方便地把两个list合并为一个dict:

>>> a=['a','b','c']
>>> b=[1,2,3]
>>> zip(a,b)
[('a', 1), ('b', 2), ('c', 3)]
>>> dict(zip(a,b))
{'a': 1, 'c': 3, 'b': 2}

locals函数和globals函数

可以动态的查看局部变量和全局变量,其中globals函数可以动态添加全局变量:

>>> globals()['a']=4
>>> a
4
>>> def foo(a):
	b=3
	print locals()

	
>>> foo(10)
{'a': 10, 'b': 3}

个人认为这种方法要比eval exec等语句优雅一点……

 

getattr

可以得到一个直到运行时才知道名称的函数的引用,还可以获取类中的方法,比如:

 

>>> getattr(list,'append')
<method 'append' of 'list' objects>
>>> import os
>>> getattr(os,'listdir')
<built-in function listdir>

 

写了这么一点,就是希望在写之前,能够好好的google一下,学习一下,不要操之过急,往往事倍功半

这几天

1.折腾了Gentoo:心得,做简单的Lisp开发Windows已经可以很好的兼容了,没必要折腾Linux,何况Linux也不是Common Lisp最佳的运行环境。折腾Gentoo觉得有点浪费时间。

2.无法解决thinkpad在windows 2008 server r2上安装驱动程序的问题

3.thinkpad t430s的驱动即使在windows7下也有问题

4.被迫使用原厂光盘进行恢复

5.因分区问题 从光盘恢复后还要从硬盘恢复,非常麻烦

结论:折腾系统害死人……

这注定是一场难以平息的战争

最近又开始折腾Vim和Emacs了,虽然两者的体验在windows下都不是最好的,但
是都很符合我的习惯。因为以前两种编辑器都是粗略的学习过,所以写写博客这
种简单的操作还是可以进行的。但正是因为选择的多样性,现在……又开始纠结
了,我觉得还是需要理性的分析一下当前的需求。
 
用Emacs的理由
1.方便进行Lisp编程
2.功能强大
3.在windows下面字体非常奇怪
 
用Vim的理由
1.简单高效速度快
2.感觉在windows下面用着舒服
 
……
 
(未完待续)
我还要想想




Host by is-Programmer.com | Power by Chito 1.3.3 beta | © 2007 LinuxGem | Design by Matthew "Agent Spork" McGee