手机浏览 RSS 2.0 订阅 膘叔的简单人生 , 腾讯云RDS购买 | 超便宜的Vultr , 注册 | 登陆
浏览模式: 标准 | 列表2012年06月的文章

Installing MacPorts

幾乎所有的人都在講macports,或者用port方式安裝。我暈。

MacPorts version 2.1.1 is available in various formats for download and installation (note, if you are upgrading your Mac OS X to a new major release, see the migration info page):
   

   
        “pkg” installers for Lion and Snow Leopard, for use with the Mac OS X Installer.
        This is the simplest installation
        procedure that most users should follow after meeting the requirements listed
        below. Installer for legacy platform Leopard
       
        also available.
        In source form as either a tar.bz2 package or a
        tar.gz one for manual compilation, if you intend to customize your installation
        in any way.
        SVN checkout of the unpackaged sources, if you wish to follow MacPorts development.
        The selfupdate target of the port(1) command, for users who already have
        MacPorts installed and wish to upgrade to a newer release.
   

    Checksums for our packaged downloads are contained in the corresponding checksums file.


   

        Please note that in order to install and run MacPorts on Mac OS X, your system must have installations of the following
        components:

       
            Apple's Xcode Developer Tools (version 4.1 or later for Lion,
            3.2 or later for
            Snow Leopard, or 3.1 or later for Leopard), found at the Apple Developer Connection
            site, on your Mac OS X installation CDs/DVD, or in the Mac App Store. Using the latest available version that will run on your
            OS is highly recommended.
            Ensure that the optional components for command line development are installed
            ("UNIX Development", plus "System Tools", or "Command Line Tools" in newer versions, or "Command Line Support" in older ones).
            The X11 windowing environment (A.K.A. “X11 User”)
            for ports that depend on the functionality it provides to run.
               
                    The “X11 User” package is an optional installation on your system CDs/DVD for
                    Tiger, enabled through the “Customize” button of the installer, whereas it is included by default
                    on Leopard and newer.
                    You can use the xorg-server port instead of Apple's X11.app if you wish.
黑黑,但不是這樣就完事了,安裝完了怎麼用呢?

1. 升级MacPorts:

%% sudo port selfupdate

也可用debug模式进行:

%% sudo port -d selpupdate

2. 列出可用ports软件:

%% sudo port list

这个列表会很长,会列出所有可用的软件,大概有3~4万个,可以导入txt文档里面看。实际上MacPorts的官网上也可以查看。

3. 搜索带有关键词信息的软件列表:

%% sudo port search software_name

4. 搜索到软件的具体名字,就可以用info命令查询所需软件信息:

%% sudo port info software_name

5. 用deps命令查看软件依赖性:

%% sudo port deps software_name

6. 在安装软件前,用variants命令查看本地可用的已安装软件包:

%% sudo port variants software_name

7. 安装软件software_name:

%% sudo port install software_name

8. clean命令清理安装过程中的缓存文件,在获取软件失败时也可以使用:

%% sudo port clean --all software_name

9. 卸载软件

9.1. uninstall命令卸载软件:

%% sudo port uninstall software_name

9.2. 递归卸载要卸载的软件所依赖的软件包:

%% sudo port uninstall --follow-dependencies software_name

但这一命令不会卸载那些又依赖其他软件包的软件。

9.3. 在卸载软件software_name前,先卸载它所依赖的所有ports可以用以下命令:

%% sudo port uninstall --follow-dependents

9.4. 强制卸载软件,忽略依赖性关系。

%% sudo port -f uninstall

除非你很确定这一动作,否则不要乱尝试。

10. contents命令可以查看已经安装的port软件

%% port contents software_name

11. 查看已安装软件的信息:

11.1. 查看软件software_name的版本、变量、使用状态等信息,如果没有指定port名字,则默认会列出所有已安装ports的信息:

%% sudo port installed software_name

11.2. 用-v选项查看更多的信息,包括平台、CPU架构等信息:

%% sudo port -v installed software_name

12. 查看已安装的ports是否有更新,及列出可升级软件列表:

%% sudo port outdated

这里要注意的是,在使用这个命令之前需要使用selfupdate命令更新MacPort本身。

13. 使用upgrade命令升级软件:

13.1. 升级软件并且同时升级所依赖的软件包:

%% sudo port upgrade software_name

13.2. 升级软件,但不升级依赖包:

%% sudo port -n upgrade software_name

13.3. 升级所有可升级软件:

%% sudo port upgrade outdated

14. upgrade命令默认会在升级软件的同时继续保留旧版本。如果希望在升级到新版本的同时卸载老版本,则执行:

%% sudo port -u upgrade software_name

15. dependents命令将报告所查询软件的依赖包情况。

%% port dependents software_name

MacPorts在安装软件时会同时获取软件的依赖树信息,因此在卸载软件时会报告依赖情况。

16. livecheck命令检查软件software_name是否已经被用户通过下载软件包手动安装了:

%% port livecheck software_name

如果要获取更多的信息,可以使用debug模式。这对于MacPorts的维护者相当有用。

 

MacBook与MacBook Pro究竟有什么不同

这是一个传说:

  • 全新MacBook将使用更纤薄的设计,13寸厚度为18毫米,15寸厚度为19毫米
  • 没有光驱
  • 13寸全新MacBook将使用分辨率为2560*1600的Retina显示屏,15寸全新MacBook将使用分辨率为2880*1800的Retina显示屏
  • 显示屏的边框将比MacBook Pro窄50%
  • 使用容量更大的电池,电池使用时间要比MacBook Pro提升15-20%

13寸的全新MacBook和MacBook Pro都将使用集成显卡,而15寸型号将使用来自Nvidia的独立显卡。这种推测与本周早些时候泄露的MacBook Pro配置谍照相同,本周早些时候的谍照显示新款MacBook Pro将搭载Ivy Bridge处理器和USB 3.0接口,除此之外没有任何改变。所以全新MacBook产品将成为Air和Pro的混合体,Kuo认为苹果想要使用Air的外观设计,并为这款产品加 入Pro的运算性能。

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

基于这个传说,我灰常开心,求白富美包养。。。。WWDC2012后,估计就立刻上市了

Tags: macbook, mbp

QQ输入法 Mac 2.2发布:全新输入法引擎

QQ输入法是我目前用的最多的输入法。用的很舒服,至少问题不是特别多吧。默认的输入法问题太多了,五笔问题超大。所以就用了这个。。。嗯,从过去到现在就没有用过搜狗。不知道为什么,就是不喜欢。

有人这么介绍这次更新:

QQ输入法 Mac 2.2版更新啦,全新的输入法引擎+全新的词库,给您带来不一样的输入体验。新版输入法依旧坚持以简驭繁的路线,着重对输入法的核心组件:输入法引擎及词库,做了比较充分的优化,提升了输入体验。新版本另一个功能是完善了符号输入功能,根据港台用户使用繁体符号的特点,增加了繁体符号的种类,让输入繁体符号更加符合港台用户的习惯;

很多Mac平台 下的输入法都没有成对标点匹配功能,输入引号、书名号时都比较繁复,在2.2版中QQ输入法加入了成对标点匹配功能,让中文输入在Mac平台上又便捷一 些。

----这次最大的更新居然是大波罗的支持。

在人气网游Diablo3中,有用户反馈2.1版的输入法会不显示候选框,QQ输入法团队的开发同学,经过24小时的下载,瞬间就解决了这个问题,现在在Diablo中已经不用考验大家盲打的技术了,可以放手去击杀Diablo了。

QQ输入法 Mac2.2版新特性:

1. 更新输入法引擎,速度更快;

2. 超大词库,新词更全;

3. 成对标点自动匹配;

4. 解决在diablo3中候选区不显示的问题。

下载地址在这里:http://dl_dir.qq.com/invc/qqpinyin/QQInput_Mac_Setup_2_2_40_400.dmg

Tags: qq输入法

参考:又拍网架构中的分库设计

本文来自infoQ,关注它的原因是因为又拍网这种图片超多而且文件较小的架构,我在不久的将来可能会遇到这个问题。所以先了解一下。

原文地址是:http://www.infoq.com/cn/articles/yupoo-partition-database
我这里只做摘要,如果要看,还是直接看原文吧:

分库设计

和很多使用MySQL的2.0站点一样,又拍网的MySQL集群经历了从最初的一个主库一个从库、到一个主库多个从库、 然后到多个主库多个从库的一个发展过程。

最初是由一台主库和一台从库组成,当时从库只用作备份和容灾,当主库出现故障时,从库就手动变成主库,一般情况下,从库不作读写操作(同步除外)。随着压力的增加,我们加上了memcached,当时只用其缓存单行数据。 但是,单行数据的缓存并不能很好地解决压力问题,因为单行数据的查询通常很快。所以我们把一些实时性要求不高的Query放到从库去执行。后面又通过添加多个从库来分流查询压力,不过随着数据量的增加,主库的写压力也越来越大。

在参考了一些相关产品和其它网站的做法后,我们决定进行数据库拆分。也就是将数据存放到不同的数据库服务器中,一般可以按两个纬度来拆分数据:

垂直拆分:是指按功能模块拆分,比如可以将群组相关表和照片相关表存放在不同的数据库中,这种方式多个数据库之间的表结构不同

水平拆分:而水平拆分是将同一个表的数据进行分块保存到不同的数据库中,这些数据库中的表结构完全相同

拆分方式

一般都会先进行垂直拆分,因为这种方式拆分方式实现起来比较简单,根据表名访问不同的数据库就可以了。但是垂直拆分方式并不能彻底解决所有压力问题,另外,也要看应用类型是否合适这种拆分方式。如果合适的话,也能很好的起到分散数据库压力的作用。比如对于豆瓣我觉得比较适合采用垂直拆分, 因为豆瓣的 各核心业务/模块(书籍、电影、音乐)相对独立,数据的增加速度也比较平稳。不同的是,又拍网的核心业务对象是用户上传的照片,而照片数据的增加速度随着 用户量的增加越来越快。压力基本上都在照片表上,显然垂直拆分并不能从根本上解决我们的问题,所以,我们采用水平拆分的方式。

拆分规则

水平拆分实现起来相对复杂,我们要先确定一个拆分规则,也就是按什么条件将数据进行切分。 一般2.0网站都以用户为中心,数据基本都跟随用户,比如用户的照片、朋友和评论等等。因此一个比较自然的选择是根据用户来切分。每个用户都对应一个数据 库,访问某个用户的数据时, 我们要先确定他/她所对应的数据库,然后连接到该数据库进行实际的数据读写。

那么,怎么样对应用户和数据库呢?我们有这些选择:

按算法对应

最简单的算法是按用户ID的奇偶性来对应,将奇数ID的用户对应到数据库A,而偶数ID的用户则对应到数据库B。这个方法的最大问题是,只能分成两 个库。另一个算法是按用户ID所在区间对应,比如ID在0-10000之间的用户对应到数据库A, ID在10000-20000这个范围的对应到数据库B,以此类推。按算法分实现起来比较方便,也比较高效,但是不能满足后续的伸缩性要求,如果需要增加 数据库节点,必需调整算法或移动很大的数据集, 比较难做到在不停止服务的前提下进行扩充数据库节点。

按索引/映射表对应

这种方法是指建立一个索引表,保存每个用户的ID和数据库ID的对应关系,每次读写用户数据时先从这个表获取对应数据库。新用户注册后,在所有可用 的数据库中随机挑选一个为其建立索引。这种方法比较灵活,有很好的伸缩性。一个缺点是增加了一次数据库访问,所以性能上没有按算法对应好。

比较之后,我们采用的是索引表的方式,我们愿意为其灵活性损失一些性能,更何况我们还有memcached, 因为索引数据基本不会改变的缘故,缓存命中率非常高。所以能很大程度上减少了性能损失。

 

索引表的方式能够比较方便地添加数据库节点,在增加节点时,只要将其添加到可用数据库列表里即可。 当然如果需要平衡各个节点的压力的话,还是需要进行数据的迁移,但是这个时候的迁移是少量的,可以逐步进行。要迁移用户A的数据,首先要将其状态置为迁移数据中,这个状态的用户不能进行写操作,并在页面上进行提示。 然后将用户A的数据全部复制到新增加的节点上后,更新映射表,然后将用户A的状态置为正常,最后将原来对应的数据库上的数据删除。这个过程通常会在临晨进行,所以,所以很少会有用户碰到迁移数据中的情况。

当然,有些数据是不属于某个用户的,比如系统消息、配置等等,我们把这些数据保存在一个全局库中。

--------

问题我就不列了,其实各种问题都会遇到的....

//...................这是缓存的问题,我也准备这么处理

revision信息也是存放在缓存里的,Key为Photos-revision。这样做看起来不错,但是好像列表缓存的利用率不会太高。因为我 们是以整个数据类型的revision为缓存Key的后缀,显然这个revision更新的非常频繁,任何一个用户修改或上传了照片都会导致它的更新,哪 怕那个用户根本不在我们要查询的Shard里。要隔离用户的动作对其他用户的影响,我们可以通过缩小revision的作用范围来达到这个目的。 所以revision的缓存Key变成Photos-{shard_key}-revision,这样的话当ID为1的用户修改了他的照片信息时, 只会更新Photos-1-revision这个Key所对应的revision。

因为全局库没有shard_key,所以修改了全局库中的表的一行数据,还是会导致整个表的缓存失效。 但是大部分情况下,数据都是有区域范围的,比如我们的帮助论坛的主题帖子, 帖子属于主题。修改了其中一个主题的一个帖子,没必要使所有主题的帖子缓存都失效。 所以我们在DBTable上增加了一个叫isolate_key的属性。

Tags: 又拍网, infoq

推荐插件:jquery-bbq

什么 是jquery BBQ?
这是一个jquery插件,BBQ的意思是back button & query。你知道的,以前的jqueryTAB在点击后都无法通过后退和前进恢复原来的点击事件等。而BBQ在每次点击的时候都相当于在历史里加入了一个记录。也就因此可以使得我们能够通过浏览器的前进、后退来重现刚才的点击。

官网在这里:https://github.com/cowboy/jquery-bbq

jQuery BBQ leverages the HTML5 hashchange event to allow simple, yet powerful bookmarkable #hash history. In addition, jQuery BBQ provides a full .deparam() method, along with both hash state management, and fragment / query string parse and merge utility methods.

This plugin and the jQuery urlInternal plugin supersede the URL Utils plugin.

Note: If you’re using jQuery 1.3.2 or earlier and need BBQ to merge query string or fragment params containing [], you’ll want to include the jQuery 1.4 .param method in your code.

Also, my article Cooking BBQ: the original recipe gives a history of jQuery BBQ along with some plugin authoring guidelines, if you’re interested.

What jQuery BBQ allows you to do:

While this brief overview will give you the broad strokes, for specifics you should look at the the basic examples below, read the documentation, and check out the full examples listed above.

  • Deserialize any params string, the document query string or fragment into an object, including the new jQuery.param format (new in jQuery 1.4, read more here). (example)
  • Merge any URL plus query string or fragment params—in an object, params string or second URL (including the current document location)—into a new URL.
  • Update the “URL attribute” (ie. a[href], img[src], form[action], etc) in multiple elements, merging any URL plus query string or fragment params—in an object, params string or second URL (including the current document location)—into a new URL, which is then set into that attribute.
  • Push (and retrieve) bookmarkable, history-enabling “state” objects or strings onto the document fragment, allowing cross-browser back- and next-button functionality for dynamic web applications (example 1, example 2, example 3)
  • Bind event handlers to a normalized, cross-browser hashchange event (example 1, example 2, example 3)

 

These working examples, complete with fully commented code, illustrate a few ways in which this plugin can be used.

http://benalman.com/code/projects/jquery-bbq/examples/fragment-basic/
http://benalman.com/code/projects/jquery-bbq/examples/fragment-advanced/
http://benalman.com/code/projects/jquery-bbq/examples/fragment-jquery-ui-tabs/
http://benalman.com/code/projects/jquery-bbq/examples/deparam/

Tags: jquery, jquery-bbq

Records:331234567