2012年2月

过滤post-format-aside文章

wordpress在3.X版本中加入了post-format概念,默认是standard,其他的可选的还有aside,gallary,status,video等。

本博客一直使用aside形式来发布一些简短的信息,而且这些信息是“无聊”的,比如“刚吃完饭,好饱啊”之类没有任何价值的信息。所以需要在primary loop中过滤掉,然后在一个“僻静”的地方(比如某个页面)显示出来。

方法很简单,不过我股沟了很久

primary loop中过滤post-format-aside

在主题文件(我用的twentyten)loop.php文件中找到代码:while ( have_posts() ) : the_post();。此行上面添加以下代码:

<?php
$my =array(
    'tax_query' => array(
        array(
            'taxonomy' => 'post_format',
            'field' => 'slug',
            'terms' => 'post-format-aside',
            'operator' => 'NOT IN',
        )
    )
);
$my = array_merge( $my , array_filter( $wp_query->query_vars ) );
query_posts($my);
?>

这样primary loop中就不再显示post-format-aside文章。

在新建页面(“僻静的地方”)中显示aside文章,并实现分页

新建一个页面,名字随意。记录下page ID,我的是7856。所以在主题目录下建立page-7856.php,文件代码如下:

<?php
get_header(); ?>
        <div id="container">
            <div id="content" role="main">

            <?php
            $pp = isset($_GET['pp'])?$_GET['pp']:0;
            
            if(!is_numeric($pp))
                $pp=0;
            $offset = $pp*10;
            $args =array(
                'tax_query' => array(
                    array(
                        'taxonomy' => 'post_format',
                        'field' => 'slug',
                        'terms' => 'post-format-aside'
                    )
                ),
                'offset' => $offset
            );
            // The Query
            $the_query = query_posts( $args );
            ?>
            
            <?php while (have_posts() ) : the_post(); 
                // The Loop?>
                <div id="post-<?php the_ID(); ?>" <?php post_class(); ?>>

                <?php if (is_search() ) : // Display excerpts for archives and search. ?>
                    <div class="entry-summary">
                        <?php the_excerpt(); ?>
                    </div><!-- .entry-summary -->
                <?php else : ?>
                    <div class="entry-content">
                        <?php the_content( __( 'Continue reading <span class="meta-nav">→</span>', 'twentyten' ) ); ?>
                        <hr />
                    </div><!-- .entry-content -->
                <?php endif; ?>

                    <div class="entry-utility">
                        <?php twentyten_posted_on(); ?>
                        <span class="meta-sep">|</span>
                        <span class="comments-link"><?php comments_popup_link( __( 'Leave a comment', 'twentyten' ), __( '1 Comment', 'twentyten' ), __( '% Comments', 'twentyten' ) ); ?></span>
                        <?php edit_post_link( __( 'Edit', 'twentyten' ), '<span class="meta-sep">|</span> <span class="edit-link">', '</span>' ); ?>
                    </div><!-- .entry-utility -->
                
            </div><!-- #post-## -->
                
            <?php endwhile; ?>
            <?php
            // Reset Post Data
            wp_reset_postdata();
            wp_reset_query();

            ?>
                <div id="nav-below" class="navigation">
                <?php
                //pagenation function
                    $older = $pp-1;
                    $newer = $pp+1;
                ?>
                <?php if($pp != 0){?>
                    <a href="<?php echo "doing?pp=".$older ?>">上一页</a>
                <?php } else { ?>
                    上一页
                <?php } ?>
                <a href="<?php echo "doing?pp=".$newer ?>">下一页</a>
                </div><!-- #nav-below -->
            </div><!-- #content -->
            <?php /* Display navigation to next/previous pages when applicable */ ?>
        </div><!-- #container -->
<?php get_sidebar(); ?>
<?php get_footer(); ?>

feed中过滤掉aside文章

页面上的工作我们完成了,接下来我们要过滤掉feed中的aside文章,也就是不让aside文章在feed中输出。为什么要过滤捏?难道你觉得你的博客订阅用户会对你什么时候吃饭了?吃得是否很饱感兴趣?答案是否定的。方法很简单,我们在主题目录找到functions.php,在末尾添加如下代码即可:

//feed filter aside posts
function wp_exclude_category(WP_Query $query) {
    if($query->is_feed){
        $args = array(
            array(
                'taxonomy' => 'post_format',
                'field' => 'slug',
                'terms' => 'post-format-aside',
                'operator' => 'NOT IN'
            )
        );
    $query->set('tax_query',$args);
    }
    return $query;
}
add_filter('pre_get_posts','wp_exclude_category');

关于iphone4s和ipad2越狱

最近我老妹买了2个iphone4s,一个黑的,一个白的。

正好春节之后greenpois0n就发布了A5核心设备iOS 5.0.1系统的越狱软件Absinthe。最新的Absinthe已经更新到0.3,支持iphone4s ipad2

在越狱之前首选用TinyUmbrella来备份SHSH。给我们的降级留有余地。

首先是一个iphone4s,新加坡版的,应该是无锁版。默认iOS版本号是5.0.1,直接运行Absinthe,点“JailBreak”之后等待Absinthe图标出现在手机桌面上,不要点,进入通用,启用“VPN”,等待报错“VPN配置错误”,然后系统自动重启。这个时候Cydia已经在桌面上了。越狱成功,如果等了很久一直不重启,参见此文

接下来是一台老姐的国行的ipad2,WIFI版,肯定也是无锁的,软件版本是4.3.5。买了很久了,一直待越。

首先必须升级固件到5.0或5.0.1,我选择5.0.1。下载固件到http://iphone.91.com/fw/ 我选择http://appldnld.apple.com/iPhone4/041-3310.20111109.Cfp76/iPad2,1_5.0.1_9A405_Restore.ipsw,接下来打开itunes,连接ipad2到电脑,按住SHIFT的情况下点击“更新”,选择ipsw所在路径的iPad2,1_5.0.1_9A405_Restore.ipsw。在更新固件的时候itunes会连接到apple官方验证什么东西。开始的时候一直报“未知错误”,“联网错误”。一下是我测试的所有可能性:

模式 hosts   按钮  错误
正常  127 更新  错误11
正常  cydia   更新  此时无法更新Ipad"",因为iPad软件更新服务器无法联系或暂不可用
正常  apple   更新  request time out 此时无法更新Ipad"",因为iPad软件更新服务器无法联系或暂不可用

无论gs.apple.com的ip hosts到127.0.0.1交给Tiny Umbrella的SSH Server还是74.208.10.249的Cydia都报错。最后都用#注释掉。连接苹果官方,结果果然是超时了。

C:\Documents and Settings\Administrator>ping gs.apple.com

Pinging gs.apple.com.akadns.net [17.171.36.30] with 32 bytes of data:

Request timed out.
Request timed out.
Request timed out.
Request timed out.

打开WallProxy之后,还是超时。但是点击“更新”后,尽然更新升级到5.0.1。汗。。。。。

UltraEdit宏一枚

有如下文本内容,需要在每个[code]前面添加上从下往上查找的最近的一个日期:

[2011.12.12]
    [code]item 1
    [code]item 2
    [code]item 3
    [code]item 4
    [code]item 5
    [life]item fdsa
    [code]item fzzz
    [code]item fsa
    [code]item fsa
    [shit]fsafdsafdsa
    [code]fdsafdsafd
[2011.12.13]
    [life]fdsafdsaf
    [code]fdsafdsaf
    [fuck]fdsafdsaf
    [code]fdsafdsaf

使用如下宏:(注:运行宏之前将光标移动到第一行,宏内容中的“X箭头”是安装中文版UltraEdit的内容,如果是其他语言版本可能不同。比如英文版“右箭头”就是“RIGHT ARROW”。使用中文版UE写RIGHT ARROW会报宏语法错误。这一点比较坑爹。既然会想到用宏的人,宏脚本还搞本地化就比较蛋疼了。)

InsertMode
ColumnModeOff
HexOff
Find "  [code]"
ToggleBookmark
IfFound
Find Up "[201"
StartSelect
Key 右箭头
Key 右箭头
Key 右箭头
Key 右箭头
Key 右箭头
Key 右箭头
Key 右箭头
Key 右箭头
EndSelect
Copy
Clipboard 0
GotoBookMark 1
Key 右箭头
Paste
EndIf
ToggleBookmark

运行宏之后的文本内容变为:

[2011.12.12]
    [2011.12.12][code]item 1
    [2011.12.12][code]item 2
    [2011.12.12][code]item 3
    [2011.12.12][code]item 4
    [2011.12.12][code]item 5
    [life]item fdsa
    [2011.12.12][code]item fzzz
    [2011.12.12][code]item fsa
    [2011.12.12][code]item fsa
    [shit]fsafdsafdsa
    [2011.12.12][code]fdsafdsafd
[2011.12.13]
    [life]fdsafdsaf
    [2011.12.13][code]fdsafdsaf
    [fuck]fdsafdsaf
    [2011.12.13][code]fdsafdsaf

PHP指定搜索某目录下的所有文件,输出该文件内编号的并集。

<?php
/* tunpishuang at gmail dot com
* http://tunps.com
* 指定搜索某目录下的所有playlist.data,输出该文件内视频文件的编号的并集。
* usage:php.exe [script name] [file directory]
*/
function file_list($path){
$result=array();
if ($handle = opendir($path)) {
while (false !== ($file = readdir($handle))) {
if ($file != "." && $file != "..") {
if (is_dir($path."/".$file)) {
//echo $path."/".$file."\n";//directory
$result = array_merge($result,file_list($path."/".$file));
} else {
//echo $path."/".$file."\n"; //all file
if(stripos($path."/".$file,"playlist.data"))
{
//echo $path."/".$file."\n"; //file contains "playlist.data"
$content = file_get_contents($path."/".$file);
preg_match_all("/([0-9]*).mov/",$content, $matches);
$result=array_unique($matches[1]);
}
}
}
}
}
return(array_unique($result));
}

$final_result = file_list($argv[1]);
sort($final_result);
//print_r($final_result);
echo "total:".count($final_result)."\n";

foreach($final_result as $file)
{
if(!copy("E:\\caros\\video\\".$file.".mov",$argv[1]."\\dp\\playlist\\video\\".$file.".mov"))
{
echo "error copy:".$file."\n";
}
else{
echo $file." copied"."\n";
}
}

找不到附属汇编 Microsoft.VC80.DebugCRT,上一个错误是 参照的汇编没有安装在系统上。

找不到附属汇编 Microsoft.VC80.DebugCRT,上一个错误是 参照的汇编没有安装在系统上。

使用VC 2005(SP1)开发了一个程序,之后一段时间系统重装了,VC 2005也重装了(没有装SP1)。打开项目正常编译,但是调试提示以下内容:

---------------------------
Microsoft Visual Studio
---------------------------
无法启动程序“d:\dev\debug\test.exe”。
由于应用程序配置不正确,未能启动此应用程序。请查看清单文件以查找可能的错误。重新安装该应用程序可能修复此问题。有关更多详细信息,请参见应用程序事件日志。

打开“事件查看器”,“系统”分类下面有3个来源于“SideBySide”的错误,信息分别如下:

找不到附属汇编 Microsoft.VC80.DebugCRT,上一个错误是 参照的汇编没有安装在系统上。
Resolve Partial Assembly 为 Microsoft.VC80.DebugCRT 失败。 参考错误消息: 参照的汇编没有安装在系统上。
Generate Activation Context 为 d:\dev\debug\test.exe 失败。 参考错误消息: 操作成功完成。

在项目的Debug目录下面生成了两个文件 test.exe.embed.manifest 和 test.exe.intermediate.manifest,是所谓的资源清单文件。内容是一样的:

<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<assembly xmlns="urn:schemas-microsoft-com:asm.v1" manifestVersion="1.0">
  <dependency>
    <dependentAssembly>
      <assemblyIdentity type="win32" name="Microsoft.VC80.DebugCRT" version="8.0.50608.0" processorArchitecture="x86" publicKeyToken="1fc8b3b9a1e18e3b"></assemblyIdentity>
    </dependentAssembly>
  </dependency>
  <dependency>
    <dependentAssembly>
      <assemblyIdentity type="win32" name="Microsoft.VC80.DebugMFC" version="8.0.50608.0" processorArchitecture="x86" publicKeyToken="1fc8b3b9a1e18e3b"></assemblyIdentity>
    </dependentAssembly>
  </dependency>
  <dependency>
    <dependentAssembly>
      <assemblyIdentity type="win32" name="Microsoft.Windows.Common-Controls" version="6.0.0.0" processorArchitecture="x86" publicKeyToken="6595b64144ccf1df" language="*"></assemblyIdentity>
    </dependentAssembly>
  </dependency>
  <dependency>
    <dependentAssembly>
      <assemblyIdentity type="win32" name="Microsoft.VC80.DebugCRT" version="8.0.50727.762" processorArchitecture="x86" publicKeyToken="1fc8b3b9a1e18e3b"></assemblyIdentity>
    </dependentAssembly>
  </dependency>
</assembly>

vs2005的版本号我们需要提及一下:

sp1前:8.0.50727.42(RTM.050727-4200)

sp1后:8.0.50727.762(SP.050727-7600)