2009年10月26日星期一

ubuntu 下 Tor,你懂的

翻墙有风险,带套保平安

我对自己的智力开始表示怀疑了,即使是对着手册一步一步做,为什么还要折腾4个多小时嘞?!

(1)配置源
deb     http://deb.torproject.org/torproject.org <DISTRIBUTION> main
用的是jauty

(2)添加源的认证签名
gpg --keyserver keys.gnupg.net --recv 886DDD89
gpg --export A3C4F0F979CAA22CDBA8F512EE8CBC9E886DDD89 | sudo apt-key add -
apt-get update
apt-get install tor
(3)配置privoxy(tor依赖安装的)

$sudo gedit /etc/privoxy/config 

forward-socks4a / 127.0.0.1:9050 . (可以在默认里找到这行,去掉注释)

Privoxy 会记录所有使用它浏览网页而留下的日志文件,如果你不需要保存日志文件,在下面这两行之前输入 “#” 注释掉。
#logfile logfile

#jarfile jarfile

(6)安装vidalia

sudo apt-get install vidalia
 
(5) 为firefox安装Torbutton 插件

2009年10月25日星期日

解决ubuntu下pdf乱码的问题

sudo apt-get install poppler-data 后 evince中文能显示了



不过繁体中文字体结构仍然奇怪。这是因为evince只要遇到内嵌字体为新明细体或标楷体都会把文字肢解了,所以繁体中文支离破碎了。



xpdf可以显示,但是xpdf界面太丑了,速度感觉也不行。安装了foxit,还不错吧,速度还比evince快。



所以推荐foxit,如果不在意闭源的话。

UPDATE 20111001

evince 安装poppler-data后部分pdf(不是繁体),中文显示为方块,解决方法是:
如果已经安装了文泉驿微米黑字体,
sudo gedit /etc/fonts/conf.d/49-sansserif.conf
将倒数第四行的sans-serif修改为WenQuanYi Micro Hei就可以了。
修改为其他的中文字体名称应该也是可以的。

2009年10月24日星期六

跟风,ubuntu

今天是犯抽抽了,所以才会再折腾u盘puppy系统未果后,屡败屡战地消磨了一天时间在vs上,最后又热血上头要试试硬盘安装ubuntu.说这最后的决定说是一时冲动,不如说是为了给这荒唐的一天留给自己一点安慰,至少我也装了个ubuntu嘛,虽然这也没啥。
硬盘安装ubuntu,像我这种小菜,无非就是上网搜几个帖子,按图索骥就是了。但即便你握着藏宝图,路还是要自己走的,这就难免有那么点曲折反复,柳暗花明的破事,记之。
  1. 在windows下用分区软件分出一个ext3(主分区)和一个swap(扩展分区),留给ubuntu。这里用得不是pq,而是Acronis Disk Director Suite,pq居然连我的u盘都识别不出来,实在是让我失望。按照帖子的方法,grub4dos引导到ubuntu liveCD,从liveCD里安装ubuntu,这时出现的问题是ubuntu无法正确识别分区表,但是用sudo fdisk -l能列出已分好的分区。退回Windows下,用分区软件将ext3的那个分区转为扩展分区,再重新进入liveCD,一切正常。原因嘛..不明。
  2. 配置显示器。问题简单的说(其实不简单的说也得这么说)就是ubuntu下分辨率只能保持800*600.Google之,先安装nvidia的驱动(我的主板是nvidia的.....集成显卡,�),在hardware-drivers下自动扫描得到,当然首先得先配置好软件源吧。利用nvidia-settings和nvidia-xconfig(这命令好像会重新写个/etc/X11/xorg.conf),差不多这时就可以出现1024*768啦.但这个分辨率还是不爽,显示得窗口不完全...在nvidia-setting下更改为1280×960,并有按键提示保存到xorg.conf..搞定
  3. 准备让ubuntu使用英文locale,一个很现实的问题是还是要输入中文的嘛,这个...显然是装B.安装了en,ch的语言包,并把默认语言设为en。再则就是修改/etc/environment,具体不表。这样就可以在应为locale下尽情地用中文输入法(scim,小企鹅不懂)装B啦。
  4. 双系统ubuntu和windows系统时间相差八小时,ubuntu的比较快。我居然发现了,泪流满面。这是因为勒,ubuntu把硬件时间解释为UTC(0区的时间?),windows把硬件时间解释为当地时间(比如,东八区),这样,ubuntu就会快整整八小时。嗯嗯,修改/etc/default/rcS里,utc=yes ---》utc=no,世界和平了
故事讲完了。

2009年10月23日星期五

U盘为RAW格式的处理

首先,在折腾一晚上的u盘,企图装上u盘puppy(最终还是没成功)后,U盘终于旗帜鲜明地罢工,升级为让人傻眼的RAW格式,可用空间,全部空间均为零。接下来,顾不上装u盘系统了,开始想辙把u盘拯救回来。这算是今晚唯一干成的一件事。现记录如下:

  1. 对于RAW格式的U盘,首先下ChipGenius查看U盘主控芯片的类型
  2. 针对主控芯片的类型,当然还要是该芯片厂家的,找相应的usb量产工具
  3. 利用usb量产工具进行格式化即可
回头看,较劲了几个小时的事情只能总结为三句话,这该是精炼还是悲剧啊。至于为什么会折腾那么久,首先是没有认识到量产工具这种奇妙工具的存在,另外就是,没有意识到主控芯片型号与量产工具的严格对应关系,再有就是,哪去找量产工具啊?!

ps:数码之家网站不错,ChipGenius就是他家的

2009年10月19日星期一

检查操作系统类型

#include <windows.h>
#include <tchar.h>
#include <stdio.h>
#include <strsafe.h>

#define BUFSIZE 256

typedef void (WINAPI *PGNSI)(LPSYSTEM_INFO);
typedef BOOL (WINAPI *PGPI)(DWORD, DWORD, DWORD, DWORD, PDWORD);

BOOL GetOSDisplayString( LPTSTR pszOS)
{
   OSVERSIONINFOEX osvi;
   SYSTEM_INFO si;
   PGNSI pGNSI;
   PGPI pGPI;
   BOOL bOsVersionInfoEx;
   DWORD dwType;

   ZeroMemory(&si, sizeof(SYSTEM_INFO));
   ZeroMemory(&osvi, sizeof(OSVERSIONINFOEX));

   osvi.dwOSVersionInfoSize = sizeof(OSVERSIONINFOEX);

   if( !(bOsVersionInfoEx = GetVersionEx ((OSVERSIONINFO *) &osvi)) )
      return 1;

   // Call GetNativeSystemInfo if supported or GetSystemInfo otherwise.

   pGNSI = (PGNSI) GetProcAddress(
      GetModuleHandle(TEXT("kernel32.dll")), 
      "GetNativeSystemInfo");
   if(NULL != pGNSI)
      pGNSI(&si);
   else GetSystemInfo(&si);

   if ( VER_PLATFORM_WIN32_NT==osvi.dwPlatformId && 
        osvi.dwMajorVersion > 4 )
   {
      StringCchCopy(pszOS, BUFSIZE, TEXT("Microsoft "));

      // Test for the specific product.

      if ( osvi.dwMajorVersion == 6 && osvi.dwMinorVersion == 0 )
      {
         if( osvi.wProductType == VER_NT_WORKSTATION )
             StringCchCat(pszOS, BUFSIZE, TEXT("Windows Vista "));
         else StringCchCat(pszOS, BUFSIZE, TEXT("Windows Server 2008 " ));

         pGPI = (PGPI) GetProcAddress(
            GetModuleHandle(TEXT("kernel32.dll")), 
            "GetProductInfo");

         pGPI( 6, 0, 0, 0, &dwType);

         switch( dwType )
         {
            case PRODUCT_ULTIMATE:
               StringCchCat(pszOS, BUFSIZE, TEXT("Ultimate Edition" ));
               break;
            case PRODUCT_HOME_PREMIUM:
               StringCchCat(pszOS, BUFSIZE, TEXT("Home Premium Edition" ));
               break;
            case PRODUCT_HOME_BASIC:
               StringCchCat(pszOS, BUFSIZE, TEXT("Home Basic Edition" ));
               break;
            case PRODUCT_ENTERPRISE:
               StringCchCat(pszOS, BUFSIZE, TEXT("Enterprise Edition" ));
               break;
            case PRODUCT_BUSINESS:
               StringCchCat(pszOS, BUFSIZE, TEXT("Business Edition" ));
               break;
            case PRODUCT_STARTER:
               StringCchCat(pszOS, BUFSIZE, TEXT("Starter Edition" ));
               break;
            case PRODUCT_CLUSTER_SERVER:
               StringCchCat(pszOS, BUFSIZE, TEXT("Cluster Server Edition" ));
               break;
            case PRODUCT_DATACENTER_SERVER:
               StringCchCat(pszOS, BUFSIZE, TEXT("Datacenter Edition" ));
               break;
            case PRODUCT_DATACENTER_SERVER_CORE:
               StringCchCat(pszOS, BUFSIZE, TEXT("Datacenter Edition (core installation)" ));
               break;
            case PRODUCT_ENTERPRISE_SERVER:
               StringCchCat(pszOS, BUFSIZE, TEXT("Enterprise Edition" ));
               break;
            case PRODUCT_ENTERPRISE_SERVER_CORE:
               StringCchCat(pszOS, BUFSIZE, TEXT("Enterprise Edition (core installation)" ));
               break;
            case PRODUCT_ENTERPRISE_SERVER_IA64:
               StringCchCat(pszOS, BUFSIZE, TEXT("Enterprise Edition for Itanium-based Systems" ));
               break;
            case PRODUCT_SMALLBUSINESS_SERVER:
               StringCchCat(pszOS, BUFSIZE, TEXT("Small Business Server" ));
               break;
            case PRODUCT_SMALLBUSINESS_SERVER_PREMIUM:
               StringCchCat(pszOS, BUFSIZE, TEXT("Small Business Server Premium Edition" ));
               break;
            case PRODUCT_STANDARD_SERVER:
               StringCchCat(pszOS, BUFSIZE, TEXT("Standard Edition" ));
               break;
            case PRODUCT_STANDARD_SERVER_CORE:
               StringCchCat(pszOS, BUFSIZE, TEXT("Standard Edition (core installation)" ));
               break;
            case PRODUCT_WEB_SERVER:
               StringCchCat(pszOS, BUFSIZE, TEXT("Web Server Edition" ));
               break;
         }
         if ( si.wProcessorArchitecture==PROCESSOR_ARCHITECTURE_AMD64 )
            StringCchCat(pszOS, BUFSIZE, TEXT( ", 64-bit" ));
         else if (si.wProcessorArchitecture==PROCESSOR_ARCHITECTURE_INTEL )
            StringCchCat(pszOS, BUFSIZE, TEXT(", 32-bit"));
      }

      if ( osvi.dwMajorVersion == 5 && osvi.dwMinorVersion == 2 )
      {
         if( GetSystemMetrics(SM_SERVERR2) )
            StringCchCat(pszOS, BUFSIZE, TEXT( "Windows Server 2003 R2, "));
         else if ( osvi.wSuiteMask==VER_SUITE_STORAGE_SERVER )
            StringCchCat(pszOS, BUFSIZE, TEXT( "Windows Storage Server 2003"));
         else if( osvi.wProductType == VER_NT_WORKSTATION &&
                  si.wProcessorArchitecture==PROCESSOR_ARCHITECTURE_AMD64)
         {
            StringCchCat(pszOS, BUFSIZE, TEXT( "Windows XP Professional x64 Edition"));
         }
         else StringCchCat(pszOS, BUFSIZE, TEXT("Windows Server 2003, "));

         // Test for the server type.
         if ( osvi.wProductType != VER_NT_WORKSTATION )
         {
            if ( si.wProcessorArchitecture==PROCESSOR_ARCHITECTURE_IA64 )
            {
                if( osvi.wSuiteMask & VER_SUITE_DATACENTER )
                   StringCchCat(pszOS, BUFSIZE, TEXT( "Datacenter Edition for Itanium-based Systems" ));
                else if( osvi.wSuiteMask & VER_SUITE_ENTERPRISE )
                   StringCchCat(pszOS, BUFSIZE, TEXT( "Enterprise Edition for Itanium-based Systems" ));
            }

            else if ( si.wProcessorArchitecture==PROCESSOR_ARCHITECTURE_AMD64 )
            {
                if( osvi.wSuiteMask & VER_SUITE_DATACENTER )
                   StringCchCat(pszOS, BUFSIZE, TEXT( "Datacenter x64 Edition" ));
                else if( osvi.wSuiteMask & VER_SUITE_ENTERPRISE )
                   StringCchCat(pszOS, BUFSIZE, TEXT( "Enterprise x64 Edition" ));
                else StringCchCat(pszOS, BUFSIZE, TEXT( "Standard x64 Edition" ));
            }

            else
            {
                if ( osvi.wSuiteMask & VER_SUITE_COMPUTE_SERVER )
                   StringCchCat(pszOS, BUFSIZE, TEXT( "Compute Cluster Edition" ));
                else if( osvi.wSuiteMask & VER_SUITE_DATACENTER )
                   StringCchCat(pszOS, BUFSIZE, TEXT( "Datacenter Edition" ));
                else if( osvi.wSuiteMask & VER_SUITE_ENTERPRISE )
                   StringCchCat(pszOS, BUFSIZE, TEXT( "Enterprise Edition" ));
                else if ( osvi.wSuiteMask & VER_SUITE_BLADE )
                   StringCchCat(pszOS, BUFSIZE, TEXT( "Web Edition" ));
                else StringCchCat(pszOS, BUFSIZE, TEXT( "Standard Edition" ));
            }
         }
      }

      if ( osvi.dwMajorVersion == 5 && osvi.dwMinorVersion == 1 )
      {
         StringCchCat(pszOS, BUFSIZE, TEXT("Windows XP "));
         if( osvi.wSuiteMask & VER_SUITE_PERSONAL )
            StringCchCat(pszOS, BUFSIZE, TEXT( "Home Edition" ));
         else StringCchCat(pszOS, BUFSIZE, TEXT( "Professional" ));
      }

      if ( osvi.dwMajorVersion == 5 && osvi.dwMinorVersion == 0 )
      {
         StringCchCat(pszOS, BUFSIZE, TEXT("Windows 2000 "));

         if ( osvi.wProductType == VER_NT_WORKSTATION )
         {
            StringCchCat(pszOS, BUFSIZE, TEXT( "Professional" ));
         }
         else 
         {
            if( osvi.wSuiteMask & VER_SUITE_DATACENTER )
               StringCchCat(pszOS, BUFSIZE, TEXT( "Datacenter Server" ));
            else if( osvi.wSuiteMask & VER_SUITE_ENTERPRISE )
               StringCchCat(pszOS, BUFSIZE, TEXT( "Advanced Server" ));
            else StringCchCat(pszOS, BUFSIZE, TEXT( "Server" ));
         }
      }

       // Include service pack (if any) and build number.

      if( _tcslen(osvi.szCSDVersion) > 0 )
      {
          StringCchCat(pszOS, BUFSIZE, TEXT(" ") );
          StringCchCat(pszOS, BUFSIZE, osvi.szCSDVersion);
      }

      TCHAR buf[80];

      StringCchPrintf( buf, 80, TEXT(" (build %d)"), osvi.dwBuildNumber);
      StringCchCat(pszOS, BUFSIZE, buf);

      return TRUE; 
   }

   else
   {  
      printf( "This sample does not support this version of Windows.\n");
      return FALSE;
   }
}

int __cdecl _tmain()
{
    TCHAR szOS[BUFSIZE];

    if( GetOSDisplayString( szOS ) )
        _tprintf( TEXT("\n%s\n"), szOS );
}