作者: admin

  • 琴诗与琴韵

    苏轼,字东坡,北宋人,他是一个博学多才的人,不仅精通诗文、书法、绘画,对音乐是极有感悟,对古琴音乐也是颇有研究,写下了一些关于古琴的琴诗,而直接以古琴为名的便是这一首——《琴诗》。

    琴诗(宋)苏轼

    若言琴上有琴声,放在匣中何不鸣?

    若言声在指头上,何不于君指上听?

    这是一首哲理诗,其中包含了事物之间相互联系的哲学思考,文章用古琴举例子,单有琴,没有声音;单有手,也不会有音乐。琴和手不可或缺。

    文字浅显易懂,内涵由深入浅,让人回味无穷。

    但另一方面,我们读书、学习也要讲究由浅入深,触类旁通,一件事物便可治天下事物。

    这首诗里也蕴含了深厚的文化内涵,其中相关的古琴文化深远隽永。


    01  “琴人合一”

    《琴诗》主要是通过对古琴弹奏进行说理。只有好琴,若无妙指,就不能发出琴声。若只有妙指,却无古琴,那也是“巧妇难为无米之炊”,亦无声音。

    说明了事物之间是相互联系,而且只有建立了一定的联系,才能真正地发挥作用,体现事物真实的价值。此为这首诗的哲理。

    另一方面,我们也可以看出弹奏的古琴的必备要素,一为材质上乘的古琴,二为弹奏古琴的人。并且其中缺一不可,离开其中任何一样,琴声都是不会存在的。

    正如宋人朱长文曾说过,古琴有四美:一美是好的材质;二美是能工巧匠善于斫琴,鹤山凤尾、龙池雁足配得好;三美是妙指,是指法好;四美是“心正”,即心平气和。此四美兼备方为琴美。从古琴本身的制作,弹琴者的技艺和心中乾坤都做了一些要求。

    究其苏轼所要求的琴美,应该不仅限于古琴本身和指法,其中还包含着对弹琴的境界的要求:

    第一层的境界,弹奏者与古琴的关系很简单,就是简单的弹与被弹的关系。弹奏者能够流利地、顺畅地弹奏出乐曲,讲究一定的指法,能够展示一些与众不同的弹琴技艺,比如抹琴、挑琴的时候,轻弹却有力,声音清透而不浮躁,弹奏者能够较好地驾驭古琴。这样的弹奏者也可称作乐匠;

    第二层的境界,弹奏者与古琴的关系会更进一步,弹奏者能借由古琴抒发情志,能够较好地通过琴音表达自己情绪,但也仅限于此。此弹奏者可以称作乐师。

    琴诗与琴韵

    琴境

    第三境界才是真真的境界,这个时候,古琴不是任何人可弹奏,琴音也不是任何人都能达到的美的境界。这也应该符合苏轼内在的要求,对“琴人合一”的要求。正如武功中的“人剑合一”、书法中的“人笔合一”、以及天道中的“天人合一”一样,要求琴和人浑然一体,浑然天成。这样的弹奏者改称为琴者。

    理想的境界应该是,古琴接纳弹琴者,弹琴者有着合乎古琴的品性。人会选择古琴,同理,古琴也会选择弹奏它的人。

    当两者真正相契合的时候,才会达到真正的“琴人合一”的境界。这时,弹奏者忘了周边一切,而进入了另一个空间,只有琴和自己,最终达到物我两忘,最终连自己和琴都没有了。


    02  从“合”到“和”

    “合”更多的是形容两件事情结合在一起,是比较单纯的一加一,或者进一步是一种合作、配合,或者是一种互相理解,结成友谊,进而成为一种合而为一。最能阐释“合”的还是中国传统的哲学思想——“天人合一”。

    儒家的“天人合一”,一方面强调天地人的相合,另一方面,重视的是天地人合一之后能够达到的目的,那就是摒除开外界的欲望诱惑,而自觉地进入道德伦理的秩序,从而达到人伦上的“天人合一”。

    禅宗的“天人合一”真正的境界是顺其自然,天道如此。

    道家的“天人合一”更强调人性束缚的解放,回归最初始的生命状态,重新复归于自然,万物与我为一。

    无论是哪家的观点,都强调“合”是一种相适应,最终才进入“一”。

    而“和”更近于一种混沌的状态。“和”不仅表示一种中和的混沌状态,更表现出了一种折中的“平和”,进而是一种超出于物的境界。且来分析古琴文化中的“和”。


    03  古琴的“和”

    “琴人合一”也不是容易达到的,对弹奏者的要求很高。同时,要弹出真正让人“三月不识肉味”的音乐,“合”只是第一步,进而进入中国传统古琴文化中的“和”。

    001  古琴其器之“和”

    古琴本身就包含“和”。古琴桐木丝弦而制,弹奏方法是由手指抹、挑、勾、踢等等,如此材质和弹奏之法便让它的琴声有一种回归自然的平实味道。虽单调乏味,但细听来,却是淳朴自然,绕梁三日不消。

    清代祝凤喈在《与古斋琴谱补义·按谱鼓曲奥义》中写道:“琴曲音节疏、淡、平、静,不类凡乐丝声易于说耳,非熟聆日久,心领神会者,何能知其旨趣。……初觉索然,渐若平庸,久乃心得,趣味无穷。……迨乎精通奥妙,从欲适宜,匪独心手相应,境至弦指相忘,声晖相化,缥漂渺渺,不啻登仙然也。”

    他弹奏和欣赏的角度说明了古琴艺术的审美特点,如果只是想要感官上的刺激,喜极或者悲极,给人心上的极大震颤,最终却不能持久,心绪的波动太大,会中伤情志,反而那些平淡、素净、古朴的乐音,最初觉得索然无味,渐渐好似平庸无能,久之,心中却是味道无穷,越品越有味道,意味深长,最后进入“和”的境界,适宜、平和,琴弦妙指相忘于琴声之中,飘飘渺渺,进入了登仙化羽的境界。这是一种“谐和”。

    002  古琴其境之“和”

    什么是琴境呢?

    白居易的《清夜琴兴》说得很清楚:“月出鸟栖尽,寂然坐空林。是时心境闲,可以弹素琴。清泠由木性,恬澹随人心。心积和平气,木应正始音。响余群动息,曲罢秋夜深。正声感元化,天地清沉沉。”

    这可以说是对于琴境的一个最好的描写。环境需是寂静的,心境需是平和的,琴才发出最原始的召唤之音。

    明朝以后,古琴的演奏要求更复杂。弹琴的准备分三点:

    一是天时,需择天朗气清,中和之气时;

    二是地利,需占据室斋、层楼、林石、山巅、水涯处;

    三为人和,不仅需要正衣冠,盥手、焚香,从容坐定,更要心态平和。

    符合天时地利人和,才是鼓琴之时。此三“和”,琴“和”开始。这是一种“祥和”。

    琴诗与琴韵

    古琴

    003  古琴其道之“和”

    古琴其道分为“琴禁”思想和“琴心”思想。

    首先来看“琴禁”思想。作为八音之首的古琴,在教化方面占有重要的地位。

    桓谭的《新论·琴道》便有记载:“八音广博,琴德最优。”

    “琴禁”思想是儒家对君子进一步的要求。比如《新论·琴道》:“琴之言禁也,君子守以自禁也。”又见《白虎通》:“琴者
    ,禁也。禁止于邪,以正人心也。”

    又比如蔡邕《琴操》云曰:“御邪僻,防心淫,以修身理性,泛起天真。”

    由此可见,儒家虽肯定音乐的表情作用,但是另一方面又要求音乐尤其是古琴要讲求适度性,不允许情感的自由抒发。这也就束缚了音乐,束缚了人性。

    “琴心”思想是由李贽提出的。

    “琴者,心也,琴者,吟也,所以吟其心也”、“以自然之声为美”。

    李贽主张音乐是鸣心中之音,发个性之情,有格调的音乐是自由抒情而个性的,是以表达内容需要为准的。“琴心”思想若是走到极点,追求一种喜极悲极,有伤情志。

    在“琴禁”思想和“琴心”思想之中也得选择“和”,折中而选,是“中和”。


    04  “和”的终极之意

    001  平和

    “平和”,不仅儒家有“和”,关于“和”的思想要追述到先秦时期。最初是“和同之辨”的音乐审美观。

    根据《国语·郑语》记载,周末时期,周太史伯强调的是把“以他平他谓和”运用到音乐审美实践中去。也就是指将不同音高的乐音,按一定规律配合协调,而产生优美的音乐。

    之后的比如单穆公等人,提出“声和-心和-人和-政和的思想。

    孔子的音乐审美观也是“和”,是基于“过”与“不及”之间的中间状态,即“允执其中”,这是一种平衡状态,即适度、节制的中正平和。

    琴诗与琴韵

    古琴

    002  超脱之“和”

    老子的“和”,推崇的是自然无为的“无声之道,也就是大音希声。

    嵇康提倡的是一种平和之声,以琴自身的体势来看,它是自然之物,带有平和的特性,而人也应该有一种“平和精神去奏琴,去追求一种自然超脱的境界。

    如果说儒家还在局限于一心求“和”,那嵇康心中已经没有“和”了,乃至一切都空寂了,什么都没有。就像武林高手一样,心中无剑才是最高境界,无招胜有招。

    世间百态,行走于世,切莫汲汲于富贵,汲汲于功利,此皆为过往云烟。

    古琴的境界由“合”到“和”,最后走向超脱。人生亦如此,如果不曾理解,请将妙指放于绿绮之上,听苏轼吟道:“回首向来萧瑟处,也无风雨也无晴。”

    参考文献:

    [1]与古斋琴谱补义·按谱鼓曲奥义

    [2]中国历代美学文库(隋唐五代卷下)

    [3]琴道与美学

    [4]中国音乐美学史

    [5]中国音乐文化大观

  • AFN中的<UIImageView+AFNetworking>的解读

    距离上一篇文章到这篇文章,已经有一段时间了。随着时间推移,人也变得越来越懒,以前回家还能抽出半小时看看博客,学习一下知识,填补一下半路出家的我。随着公司项目的停滞,自己也开始停滞不前,不想看代码,也不想看博客,也不想运动,就喜欢宅。睁眼上班-->上班就水群,到下班-->下班回家-->回家看娱乐节目-->12点睡觉-->睁眼上班如此重复5天,再睁眼看表-->还可以睡-->接着睡-->睁眼看表-->吃饭-->睡觉-->睁眼看表再次循环2天,在循环5天………

    AFN中的&lt;UIImageView+AFNetworking&gt;的解读

    生活要激情

    代码虐我千百遍,我待Bug如初恋

    《AFN》源码解读,从创建项目开始读,但现在已经两个多月了,刚开始看,看了半天,就看懂三个字符AFN——妈的,哥不读了,搁置一个月,生活继续流浪,代码还是读吧,慢慢开始读下去了,又认识三个单词session、Tast、DataTast、UploadTask、DownloadTask妈的,哥不懂了,都是什么和什么啊,代码虐我千百遍,我待代码如初恋,又开始读起来了……….断断续续读了两个多月,大概意思基本看懂,再次总结下<UIImageView+AFNetworking>的使用,后期会给出SDWebImage的解读和比较

    <UIImageView+AFNetworking>

    • 先看一下<UIImageView+AFNetworking>业务逻辑

      AFN中的&lt;UIImageView+AFNetworking&gt;的解读

      业务逻辑

    • 先看一下<UIImageView+AFNetworking>里面类之间的关联

    AFN中的&lt;UIImageView+AFNetworking&gt;的解读

    image.png

    下面看一下主要代码的解读

      /*** 直接设置图片的url*/   - (void)setImageWithURL:(NSURL *)url;    /*** 由占位图片的方法*/   - (void)setImageWithURL:(NSURL *)url    placeholderImage:(nullable UIImage *)placeholderImage;    /*** 由占位图片的方法并且由成功和失败的返回值,并且逻辑都是在此方法里面*/   - (void)setImageWithURLRequest:(NSURLRequest *)urlRequest           placeholderImage:(nullable UIImage *)placeholderImage                    success:(nullable void (^)(NSURLRequest *request, NSHTTPURLResponse * _Nullable response, UIImage *image))success                    failure:(nullable void (^)(NSURLRequest *request, NSHTTPURLResponse * _Nullable response, NSError *error))failure;   /*** 取消当前的下载的图片*/     - (void)cancelImageDownloadTask; 

    详细解读

      /**  加载带有占位图片的url图片   @param url              图片的url    @param placeholderImage 占位图  */ - (void)setImageWithURL:(NSURL *)url    placeholderImage:(UIImage *)placeholderImage {        NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:url];       /**添加请求头为图片请求*/       [request addValue:@"image/*" forHTTPHeaderField:@"Accept"];         /**注意我们可以在这里设置request的请求的缓存策略,来实现图片的加载情况*/       [self setImageWithURLRequest:request placeholderImage:placeholderImage success:nil failure:nil]; } 

    /** 判断请求里面的缓存策略
    1.NSURLRequestUseProtocolCachePolicy 默认的cache policy,使用Protocol协议定义。
    2.NSURLRequestReloadIgnoringCacheData 忽略缓存直接从原始地址下载。
    3.NSURLRequestReturnCacheDataDontLoad 只使用cache数据,如果不存在cache,请求失败;用于没有建立网络连接离线模式
    4.NSURLRequestReturnCacheDataElseLoad 只有在cache中不存在data时才从原始地址下载。
    5.NSURLRequestReloadIgnoringLocalAndRemoteCacheData 忽略本地和远程的缓存数据,直接从原始地址下载,与NSURLRequestReloadIgnoringCacheData类似。
    6.NSURLRequestReloadRevalidatingCacheData :验证本地数据与远程数据是否相同,如果不同则下载远程数据,否则使用本地数据
    */

    AFN中图片的加载步骤

     - (void)setImageWithURLRequest:(NSURLRequest *)urlRequest           placeholderImage:(UIImage *)placeholderImage                    success:(void (^)(NSURLRequest *request, NSHTTPURLResponse * _Nullable response, UIImage *image))success                    failure:(void (^)(NSURLRequest *request, NSHTTPURLResponse * _Nullable response, NSError *error))failure { /**请求的url为空*/ if ([urlRequest URL] == nil) {     /**取消下载*/     [self cancelImageDownloadTask];     self.image = placeholderImage;     return; } /**AFImageDownloadReceipt 图片下载对象,判断当前图片下载数据对象是否是当前的图片的,如果一直表示图片正在下载中*/ if ([self isActiveTaskURLEqualToURLRequest:urlRequest]){     return; } /**取消之前下载*/ [self cancelImageDownloadTask]; /**设置一个图片对应的一个AFImageDownloader*/ AFImageDownloader *downloader = [[self class] sharedImageDownloader]; id <AFImageRequestCache> imageCache = downloader.imageCache;  //Use the image from the image cache if it exists /**根据图片的request和标志符去内存查询*/ UIImage *cachedImage = [imageCache imageforRequest:urlRequest withAdditionalIdentifier:nil]; if (cachedImage) {/// 内存中由图片     if (success) {         success(urlRequest, nil, cachedImage);     } else {         self.image = cachedImage;     }     /**将下载的管理器设置为nil*/     [self clearActiveDownloadInformation]; } else {/// 内存中没有找到图片     if (placeholderImage) {         self.image = placeholderImage;     }      __weak __typeof(self)weakSelf = self;     NSUUID *downloadID = [NSUUID UUID];     AFImageDownloadReceipt *receipt;     receipt = [downloader                downloadImageForURLRequest:urlRequest                withReceiptID:downloadID                success:^(NSURLRequest * _Nonnull request, NSHTTPURLResponse * _Nullable response, UIImage * _Nonnull responseObject) {                    __strong __typeof(weakSelf)strongSelf = weakSelf;                     /**判断任务的UDID是否和当前的UDID一致*/                    if ([strongSelf.af_activeImageDownloadReceipt.receiptID isEqual:downloadID]) {                        if (success) {/// 如果设置了成功block,则回掉成功block                            success(request, response, responseObject);                        } else if(responseObject) {/// 判断回掉的图片是否有值,有值直接设置图片                            strongSelf.image = responseObject;                        }                         /**将当前图片请求的任务对象设置为nil*/                        [strongSelf clearActiveDownloadInformation];                    }                 }                failure:^(NSURLRequest * _Nonnull request, NSHTTPURLResponse * _Nullable response, NSError * _
    Nonnull error) {/// 失败回掉                    __strong __typeof(weakSelf)strongSelf = weakSelf;                     if ([strongSelf.af_activeImageDownloadReceipt.receiptID isEqual:downloadID]) {                         if (failure) {                             failure(request, response, error);                         }                         [strongSelf clearActiveDownloadInformation];                     }                }];     /**将下载任务对象设置给当前UIImageView*/     self.af_activeImageDownloadReceipt = receipt; } } 
    • 判断当前图片是否在下载中

       /**    判断任务请求是否和请求的url是否一直   @param urlRequest url请求  */ - (BOOL)isActiveTaskURLEqualToURLRequest:(NSURLRequest *)urlRequest {   /**根据请求的url来判断*/ return [self.af_activeImageDownloadReceipt.task.originalRequest.URL.absoluteString isEqualToString:urlRequest.URL.absoluteString]; } 
    • 重新设置图片的url,取消之前未下载完毕的任务

       - (void)cancelImageDownloadTask {     /**每一个UIImagView都有一个活跃的下载图片数据对象,当对象不能为空的时候,取消之前的下载*/     if (self.af_activeImageDownloadReceipt != nil)  {       [[self.class sharedImageDownloader] cancelTaskForImageDownloadReceipt:self.af_activeImageDownloadReceipt];   [self clearActiveDownloadInformation];      }   } 

    AFImageDownloader下载数据

    - (nullable AFImageDownloadReceipt *)downloadImageForURLRequest:(NSURLRequest *)request                                               withReceiptID:(nonnull NSUUID *)receiptID                                                     success:(nullable void (^)(NSURLRequest *request, NSHTTPURLResponse  * _Nullable response, UIImage *responseObject))success                                                     failure:(nullable void (^)(NSURLRequest *request, NSHTTPURLResponse * _Nullable response, NSError *error))failure { __block NSURLSessionDataTask *task = nil; dispatch_sync(self.synchronizationQueue, ^{/// 串行队列     NSString *URLIdentifier = request.URL.absoluteString;     if (URLIdentifier == nil) {/// 进一步判断下载地址是否为空,         if (failure) {             NSError *error = [NSError errorWithDomain:NSURLErrorDomain code:NSURLErrorBadURL userInfo:nil];             dispatch_async(dispatch_get_main_queue(), ^{                 failure(request, nil, error);             });         }         return;     }     AFImageDownloaderMergedTask *existingMergedTask = self.mergedTasks[URLIdentifier];     if (existingMergedTask != nil) {         AFImageDownloaderResponseHandler *handler = [[AFImageDownloaderResponseHandler alloc] initWithUUID:receiptID success:success failure:failure];         [existingMergedTask addResponseHandler:handler];         task = existingMergedTask.task;         return;     }     /**进一步判断请求的缓存类型*/     switch (request.cachePolicy) {         case NSURLRequestUseProtocolCachePolicy:         case NSURLRequestReturnCacheDataElseLoad:         case NSURLRequestReturnCacheDataDontLoad: {/// 只加载内存里面的数据             UIImage *cachedImage = [self.imageCache imageforRequest:request withAdditionalIdentifier:nil];             if (cachedImage != nil) {                 if (success) {                     dispatch_async(dispatch_get_main_queue(), ^{                         success(request, nil, cachedImage);                     });                 }                 return;             }             break;         }         default:             break;     }     NSUUID *mergedTaskIdentifier = [NSUUID UUID];     NSURLSessionDataTask *createdTask;     __weak __typeof__(self) weakSelf = self;      createdTask = [self.sessionManager                    dataTaskWithRequest:request                    completionHandler:^(NSURLResponse * _Nonnull response, id  _Nullable responseObject, NSError * _Nullable error) {                        dispatch_async(self.responseQueue, ^{                            __strong __typeof__(weakSelf) strongSelf = weakSelf;                             /*根据url来从组合字典里面取出对应的mergedTask*/                            AFImageDownloaderMergedTask *mergedTask = self.mergedTasks[URLIdentifier];                            if ([mergedTask.identifier isEqual:mergedTaskIdentifier]) {/// 相等                               /**将当前的mergedTask根据url从mergedTasks字典里面移除*/                                mergedTask = [strongSelf safelyRemoveMergedTaskWithURLIdentifier:URLIdentifier];                                if (error) {/// 下载出现错误的时候                                    /**当图片设置并发的加载的时候,就会一个组合任务里面会有多个handle*/                                    for (AFImageDownloaderResponseHandler *handler in mergedTask.responseHandlers) {                                        if (handler.failureBlock) {                                            /**回到主线程回掉block*/ dispatch_async(dispatch_get_main_queue(), ^{                                                handler.failureBlock(request, (NSHTTPURLResponse*)response, error);                                            });                                        }                                    }                                } else {                                    /**将下载好的图片添加到内存中*/                                    [strongSelf.imageCache addImage:responseObject forRequest:request withAdditionalIdentifier:nil];                                     for (AFImageDownloaderResponseHandler *handler in mergedTask.responseHandlers) {                                        if (handler.successBlock) {                                            dispatch_async(dispatch_get_main_queue(), ^{                                                handler.successBlock(request, (NSHTTPURLResponse*)response, responseObject);                                            });                                        }                                    }                                                                    }                            }                            /**活跃的次数减1*/                            [strongSelf safelyDecrementActiveTaskCount];                            /**安全的开始下一个请求*/                            [strongSelf safelyStartNextTaskIfNecessary];                        });                    }];     /**根据UUID来穿件响应的hander*/     AFImageDownloaderResponseHandler *handler = [[AFImageDownloaderResponseHandler alloc] initWithUUID:receiptID success:success failure:failure];     /**将下载的task和UUID以及URL共同创建出来MergedTask*/     AFImageDownloaderMergedTask *mergedTask = [[AFImageDownloaderMergedTask alloc]                                                initWithURLIdentifier:URLIdentifier                                                identifier:mergedTaskIdentifier                                                task:createdTask];     /**并将handle添加到MergedTask中*/     [mergedTask addResponseHandler:handler];     /**并将合并任务添加到单例对象的mergedTasks字典中,并且已url作为key*/     self.mergedTasks[URLIdentifier] = mergedTask;     /**判断请求的个数是否大于最大的请求个数*/     if ([self isActiveRequestCountBelowMaximumLimit]) {         /**开始任务请求,并将活跃的次数加一*/         [self startMergedTask:mergedTask];     } else {         [self enqueueMergedTask:mergedTask];     }      task = mergedTask.task; });  if (task) {     return [[AFImageDownloadReceipt alloc] initWithReceiptID:receiptID task:task];   } else {     return nil;   } } 

    AFAutoPurgingImageCache《单例创建》 管理缓存数据

    - (void)addImage:(UIImage *)image withIdentifier:(NSString *)identifier { dispatch_barrier_async(self.synchronizationQueue, ^{     AFCachedImage *cacheImage = [[AFCachedImage alloc] initWithImage:image identifier:identifier];      AFCach
    edImage *previousCachedImage = self.cachedImages[identifier];     if (previousCachedImage != nil) {         self.currentMemoryUsage -= previousCachedImage.totalBytes;     }      self.cachedImages[identifier] = cacheImage;     self.currentMemoryUsage += cacheImage.totalBytes; }); /**使用栅栏来截断当前的异步请求,来判断设置的缓存大小和总缓存大小比较*/ dispatch_barrier_async(self.synchronizationQueue, ^{     if (self.currentMemoryUsage > self.memoryCapacity) {         UInt64 bytesToPurge = self.currentMemoryUsage - self.preferredMemoryUsageAfterPurge;         NSMutableArray <AFCachedImage*> *sortedImages = [NSMutableArray arrayWithArray:self.cachedImages.allValues];         /**创建一个需要根据key排序的对象*/         /**创建一个根据key=lastAccessDate的字段进行排序,yes表示升序,NO表示降序*/         NSSortDescriptor *sortDescriptor = [[NSSortDescriptor alloc] initWithKey:@"lastAccessDate" ascending:YES];         [sortedImages sortUsingDescriptors:@[sortDescriptor]];          UInt64 bytesPurged = 0;          for (AFCachedImage *cachedImage in sortedImages) {             [self.cachedImages removeObjectForKey:cachedImage.identifier];             bytesPurged += cachedImage.totalBytes;             if (bytesPurged >= bytesToPurge) {                 break ;             }         }         self.currentMemoryUsage -= bytesPurged;       }     }); }
  • 库克在侃侃而谈那些重大社会话题,他以前可不太会这样

    库克在侃侃而谈那些重大社会话题,他以前可不太会这样 Andrew Ross Sorkin2017-08-31 07:14:13
    99

    教育、气候变化……哦对,他说他不打算竞选总统。

    本文只能在《好奇心日报》发布,即使我们允许了也不许转载* 

    美国得克萨斯州奥斯汀市电 – “很久以来,政府越来越无能,办事效率也不那么高了,我们面临的现实就是这样。所以我觉得,企业应该站出来,其它社会部门也都应该站出来,贡献自己的力量。”

    上周,在奥斯汀市中心的餐馆里,苹果公司首席执行官蒂姆·库克(Tim Cook)坐在我对面,一边吃着早饭一边接受了我的采访。此前,他刚刚在美国各地结束了几场演讲,主题大多围绕制造业、就业、教育等平时政客才会谈论的话题。

    前一天,库克刚刚去了俄亥俄州的 CTS 公司,该公司专门生产苹果用来测试 iPhone 和 Apple Watch 防水防尘性能的设备。之后,他又飞抵艾奥瓦州首府得梅因,宣布将在附近的沃基市投资 13 亿美元,建造占地 3.7 万平方米的数据中心,用来存储并转移 iCloud 以及 FaceTime 等服务的海量信息。而现在,他又来到了这儿,宣布奥斯汀社区学院(Austin Community College)将为校内 7.4 万名学生提供苹果公司设计的编程课程,教他们开发 iPhone 客户端。包括奥斯汀社区学院在内,全美总共有 30 所社区大学将会开设这门课程。

    库克在侃侃而谈那些重大社会话题,他以前可不太会这样
    上周,苹果公司首席执行官蒂姆·库克(中)造访了得克萨斯州奥斯汀市的科创孵化器 Capital Factory。最近,奥斯汀的社区大学也开设了苹果公司的课程,培养应用软件的开发者。图片版权:Brooks Kraft/苹果公司

    服务员送来了库克的早餐——两份炒蛋清、煎培根(这里没有他喜欢的火鸡培根)、无糖早餐麦片,还有无糖杏仁牛奶——库克也开始和我说起他这周的行程。他说前一晚自己抽空去了一次德克萨斯州大学奥斯汀分校的林登·约翰逊总统图书馆暨博物馆。

    “林登·约翰逊总统通过了许多重要的法案和法律,这让人刮目相看,”说到这儿,库克睁大了眼睛,开始列举约翰逊总统的功绩,“他通过了《民权法案》(Civil Rights Act)、《选举权法案》(Voting Act),还推动维护了联邦医疗保险和医疗补助,修建了几座国家公园,推行了帮助贫困儿童的早教计划(Head Start)。同时,他还出台政策,禁止在遴选陪审团成员以及租售住房时存在种族歧视。不论你的政治观点是什么,只要看看他在任期内的作为,你都会觉得他很伟大。”

    库克在侃侃而谈那些重大社会话题,他以前可不太会这样

    与其说库克是在挖苦特朗普,不如说,他是在批评美国政府一直陷在泥沼中难以自拔。

    而如今,库克也和许多大公司领导一样,决定利用公司平台,肩负起了过去不属于大公司的责任,开始着手解决更深刻的社会问题,从而填补政府决策不力所导致的空缺。他说自己本没有打算这样做,但正如所有大公司一样,他也身不由己,不得不就美国的对内政策表明立场。

    比如在夏洛茨维尔“白人至上”暴力事件后,库克就公开谴责了特朗普。在给苹果公司员工发的一份备忘录中,他这样写道:“总统和其他人认为,白人至上主义者、纳粹分子和那些反对他们、捍卫人权的人们拥有相同的道德品质,对此我不敢苟同。将这两种人等同起来,违背了我们作为美国人的理想。”

    这些年来,我发现库克说起教育、气候变化这些重大问题时,也变得像他在说起苹果公司时一样侃侃而谈,这让我很感兴趣。

    库克说:“我觉得,我们在道义上有责任发展经济、创造就业机会,为美国还有其它我们设有公司的国家作贡献。不过,可能很多重要人物会认为,我唯一的责任应该是为华尔街作贡献。”

    当然了,批评者会说,库克的此番言论只不过是苹果公司的公关策略,毕竟苹果的热门产品都在地球的另一端生产加工,而且公司有近 2500 亿美元用于海外投资,并未在美国交税。但是凭心而论,苹果公司是美国的纳税大户,2014 年至 2016 年间,苹果以平均 26% 的税率缴纳了 280 亿美元联邦税,在美国大型跨国企业中处在中游水平。

    库克本人的工资也十分丰厚。上周四,由于苹果公司的业绩超越了竞争对手,他获得了近 9000 万美元的股份,作为之前商定薪资的一部分。(库克曾经表示他会捐出所有财富。)

    不过,苹果公司还有些鲜为人知的故事。譬如自从 2011 年库克接任公司首席执行官以来,公司经历了不少改变,但这些变化大都淹没在了硅谷和美国政府对它无休止的评论声里。

    库克宣布将在沃基市新建数据中心时,就表示该中心将全部利用可再生能源。此外他还提到,过去几年来,他已经把美国的苹果公司的电力来源全部转为了利用风能和太阳能,但多数人都没注意到他的这番言论。

    “现在,苹果建在美国的公司完全都靠可再生能源发电了,我们也会在其它 23 个国家推行这个做法。”库克一边吃着早餐一边说道。

    不过,56 岁的库克这么做也不是完全出于无私。艾奥瓦州政府给了苹果公司 2.08 亿美元的减税优惠,才让数据中心得以建在沃基市。该州已经利用高额补贴,吸引了包括 Facebook 和微软在内的多家科技公司。《洛杉矶时报》(Los Angeles Times)的专栏作者批评艾奥瓦,和苹果公司达成这项交易让该州成了“冤大头”,因为新建数据中心虽然将新增 1700 个建筑业岗位,但是真正长期的工作岗位只有 50 个。苹果此前已经同意捐赠“最高 1 亿美元”的资金用于当地基础设施建设,包括建造一家青少年体育中心,作为减税优惠的补偿。

    库克谈起教育问题时尤为热情,他让苹果公司提供客户端开发课程,这一决定预计将会给全球带来 1.3 万亿美元的经济增长。他希望这门课程可以创造更多的工作岗位。据苹果公司提供的数据显示,去年 App Store 共创造了 15 万份工作,而且苹果公司直接向应用开发者支付了 50 亿美元的分成。

    库克表示,他之所以选择在社区大学,而不是在 4 年制的大学里开设这门课程,是因为“事实证明,社区大学的体制比 4 年制大学更加多样。特别是相比那些因计算机专业而闻名学校而言,社区大学的文化更加多元。科技界里,尤其是在编程和计算机科学领域,提高多样性确实是个问题。”

    目前已经开设这门课程的地区包括亚拉巴马州、俄亥俄州和宾夕法尼亚州等。库克称:“要想让科技界更加多元化,不仅要增加种族多样性、性别多样性,而且还要提高地域多样性。目前,能从科技发展中得益的州太过集中了。”(比如大部分都集中在加利福尼亚州。)

    选修这门课程的学生将会学习 Swift 语言,用来开发 iPhone 和 iPad 的客户端。当然,课程并不会教学生学习苹果竞争对手的编程语言,但库克表示:“编程的原理其实都是相通的。”他接着笑着说道:“如果要开发移动应用,大家一般既会开发iOS 的客户端,也会开发 Android 的客户端。我当然希望他们别这样,但他们估计会照做不误。我开设课程并不是想赚钱,而是想送给同学们一份礼物。”

    那库克本人的编程技术如何呢?库克回答道:“我的技术估计是不行了。”

    吃完了早饭,我们正要出发去奥斯汀的科创孵化器 Capital Factory,库克将在那里宣布新的课程计划。我问了个不少硅谷人和其他人都很关心的问题:库克颇为关注就业问题,而且常在美国国旗前发表演讲,是不是别有深意?毕竟,马克·扎克伯格(Mark Zuckerberg)的名字如今总是和未来总统候选人联系在一起。

    “我有一份全职工作,感谢你如此赞赏。”库克自嘲地说道,“如果你是在夸我的话。”

    翻译 熊猫译社 智竑

    题图来自 视觉中国

    © 2017 THE NEW YORK TIMES

    库克在侃侃而谈那些重大社会话题,他以前可不太会这样

  • 写小说,如何选题才能俘获读者芳心?

    写小说,如何选题才能俘获读者芳心?

    基础版

    关于写小说,每个人都有每个人的观点,每个人都有每个人的见解。

    所以,很多人写小说的时候就陷入了自己的“见解困境”。

    有的人喜欢玄幻小说,脑袋里也装着千奇百怪的故事,但是写到几万字,草草了之。

    有的人喜欢爱情小说,看过的影视剧,一百只手都数不过来,但是轮到自己写,含糊了事。

    有的人喜欢武侠小说,金庸古龙传奇,刀光剑影扑朔迷离,到自己这里,荒唐糊涂没人看。

    于是,很多人开始放弃,开始迷茫,写什么样的小说才能俘获读者芳心?

    写小说,如何选题才能俘获读者芳心?

    论,选题的重要性

    一、避开“舍本逐末”陷阱

    战国·吕不韦《吕氏春秋·上农》:“民舍本而事末则不令,不令则不可以守,不可以战。民舍本而事末则其产约,其产约则轻迁徙,轻迁徙则国家有患,皆有远志,无有居心。”

    自《微微一笑很倾城》、《致我们终将逝去的青春》、《匆匆那年》火了以后,网络上铺天盖地的校园爱情小说、校园友情小说开始疯狂的扩散,仿佛一夜之间,写作者们像吃了某种刺激药物,日夜兼程。

    最终还是错过了“校园故事”的末班车。

    自网络文学发迹以来,以唐家三少为首的众多“YY”网络写手一战成名,到如今,在网络世界,这里已然是一片腥风血雨,浩瀚江湖。许多写作者从一开始的嘲笑讽刺,转了性子,开始学习这些日更万字大神,漫漫征途无限期,不知道多少人倒在了通往“年入百万的大神路上”。

    这就是,一个个活生生的写作者的惨烈现实。

    古有舍本逐末而丧居心,今有舍本逐末而荒唐了光阴。

    二、理清“削足适履”困境

    《淮南子·说林训》:“夫所以养而害所养,譬犹削足而适履,杀头而便冠。”

    当下网络文字载体愈加宽泛,于是无论是简书,亦或是其他平台,都开始分类、专题。拿简书而言,其专题有:连载小说、想法、心理、哲思、成长励志、青春、散文等等,其中每个专题都有自己的限定,看上去,想法、心理、哲思还挺相关的,有各自的领域,也有相互包容的地方。

    很多人苦恼,为什么我的文章被收入想法专题,却被哲思拒绝?

    于是,很多人开始研究想法专题的套路,研究哲思专题的套路,然后开始按照这些套路写自己的文章,修改自己的文章,最终连自己都不知道自己写了什么,反正稀里糊涂就这么写了,没准幸运的话也会被推首页。

    但是,大多数终归都是被拒绝。没有别的原因:削足适履。

    每个人都有自己的写作路数,笔法稚嫩的人写出来的文章简单纯真,笔法成熟的人写出来的文章耐人寻味,笔法偏执的人写出来文章犀利尖锐,笔法灵动的人写出来的文章优雅动人。

    但是,一本小说,或许你只是想讲一个故事,或许你只想表达不满,也或许你只是一种怀念。每一本小说的创作之初,不应该是强加任何一种类型套装,那样只会把自己限制在某个有范围的区域里面。

    所谓量化读者类型,分析读者的阅读习惯,来判断读者所喜欢的小说类型,只是一种泛指,对于写小说本身而言,毫无帮助。

    譬如:《武林外传》是一本什么样的剧本?

    三、知己知彼,百战不殆

    《孙子·谋攻篇》:“知彼知己,百战不殆;不知彼而知己,一胜一负;不知彼,不知己,每战必殆。”

    上面两条,讲了两条写作选题的禁忌,看似已经把如何选题这篇文章写死。毕竟,如何选题才能俘获读者芳心?不就应该是从热度、类型等角度去写吗?

    非也。

    写小说,第一件事就是知道自己的分量。八两的秤砣称不了一斤的重量,半米长的木板跨不过百丈的长江。知道自己时间有限,就不要学着网络写手大神挑战“千万字”大关;知道自己从没谈过恋爱,就不要学着爱情小说家批判“情感”;知道自己四肢发达、头脑简单,就不要尝试写“谍影重重”小说版。

    写小说,第二件事就是知道别人的观点,四两拨千斤,都是套路深。这个世界上,最容易失去热度的就是形式,而最有深度的就是思想,千年前的亚里士多德,千年前的柏拉图,千年前的孔子、老子。这个世界最有力度的,就是说服别人的思想。所以,知道别人想什么也是一件很重要的事情。

    有目的地写小说,最正确的方式,就是让自己的主题合乎众人的心声

    所谓:知己知彼,百战不殆。

    写小说,如何选题才能俘获读者芳心?

    干货来了

    四、那些优秀的小说,是什么题材?(近代或当代)

    金庸的《神雕侠侣》,典型的武侠小说,但是在这本小说中最打动我们的是什么?

    世间多少痴儿女,情到深处无怨尤

    问世间情为何物,直教人生死相许

    是情到深处,我无思量,纵然千山万水,纵然天各一方,情不断无怨尤;是情到深处,天下皆错,再次回首往昔时,你是那滴泪,生死两相望。所谓情,难断因由,难判对错,到处都是难说的你来我往。

    没错,她是我师父,可是我偏要她做我的妻子!

    到底什么是对,什么是错?这十六年我都没有想明白,不过现在不想了,因为我马上就要见到你了,不知道你现在什么样。

    自生命有了文字以来,自文字诞生了思想,生命便成了和爱情永远都说不明白的事物。到底是遵规蹈矩,还是承诺兑现爱情,这其中侠义恩仇,说不清,理还乱。

    看过《神雕侠侣》的人,都知道这是武侠小说,但每一个被感动的人,都是被其中对生命、自由、侠义和观念束缚的纠葛所感动。

    莫言的《丰乳肥臀》,乡土小说、战争、现实主义。这部小说最感动我们的是什么?

    这亲戚,听起来怪神圣的,可仔细一想,所谓亲戚,都建立在男人和女人睡觉的关系上。

    鹰对尸首也有兴趣,它们也是噬腐者,但它们不与乌鸦合流,保持着虚伪的高傲态度。

    讽刺,当代作家中,莫言那一代作家格外不同,他们经历过战争,经历过文革,在他们的世界里,生命时时刻刻都悬在弦上,最赤裸裸的人性考验,最惨烈的
    人性思考,在那个年代,都是拼凑的黑暗。即使是当代的我们,读起来那些文章,也格外动容。

    "花朵为什么会有血腥味呢?因为大地浸透了人类的鲜血。"这哪里是社会?这是一片无边无际的黑暗丛林。这哪里有幸福?只有在苦难的芒刺间刹那虚无的快感。

    “母亲说:“我变了,也没变。这十几年里,上官家的人,像韭菜一样,一茬茬的死,一茬茬的发,有生就有死,死容易,活难,越难越要活。越不怕死越要挣扎着活。我要看到我的后代儿孙浮上水来那一天,你们都要给我争气!”

    当黑暗笼罩大地,当生命失去意义,这个世界上依然有一种人,伟大的像一座神。当岁月只给我们留下惨淡和伤痛,当年华里只有失去和不断失去,她依然坚强、拼了命一样的活着,卑微或苟且,告诉她的孩子,这就是生命挣扎的意义。

    这部小说里,写了战争,写了家族,写了爱情,也写过悲惨和偏执。

    到这里,你肯定会问:他们都选择了啥题材?

    我把这种从现实中抽离出的细节,并赋予灵魂、思考和抉择的小说,称之为:灵魂的独舞。

    五、无题胜有题

    很多人都说,作为一个写作新手,给他们一个具体的框架描摹是有好处的。

    我非常同意这个观点。

    所以,针对如何选题,我会这样建议大家:

    ①不妨梳理一下自己最近的二十年,每一年都写一句话概括。

    ②每一句概括后面都写一段总结,每一段总结后面都写一个印象最深刻小故事。

    ③写完之后,选题就确定了。剩下的就是想办法把这些小故事串起来。

    番外话:至于悬疑惊悚、玄幻、科幻等那些网络小说,选题的步骤则是有规律的多:热度、受众、惊喜点。但是如何选择,全凭自己。毕竟写一部小说并不容易,极不提倡写YY小说的。


    下一篇,想写如何“神”转折,感兴趣的朋友可以评论区留言。我也会根据大家的疑惑写更多方面,尽我所能,分享写作经验。

  • 自由在何方?

    梭罗在《瓦尔登湖》里曾经说过,“我不想过不是生活的生活。”

    要想真正理解这句话,你首先要知道两点,一、什么样的生活不是真正的生活。二、什么样的生活才是真正的生活。

    生活本身包含了物质层面和精神层面,对于物质层面而言,衣食住行就是我们基本的需求。对于精神层面而言,又有浅层的和深层的精神生活可以区分。浅层的精神追求通常包含了娱乐、休闲、权力、名誉、地位等由此带来的精神的快感,而深层的精神生活则包含了爱与自由,以及对生命本身终极目标的思考和追求。

    在所有的精神追求中,我认为最重要的一点就是精神世界的自由与独立。

    卢梭曾经说过,“自由不是你可以做你想做的事,而是你可以不做你不想做的事。”

    一个人可以选择自己做什么或不做什么,把自己内心赞成什么、反对什么的观念不受拘束的说出来,这就是自由。

    对于执政者而言,有没有给大众这种自由,是衡量一个社会是否有民主存在的关键因素。

    奥威尔在1948年完成的《1984》为我们勾勒了极权统治下的种种画面。极权主义与传统的专制主义相比,掌握了现代政治的统治手段,包括政治组织、社会生活、舆论工具、艺术创作、历史编纂甚至是个人思想和隐私,无不在其全面严密控制之下。这是世界历史上任何一个暴君所做不到的,甚至是他们连想也想不到的。哈拉兹蒂在《天鹅绒监狱》里为我们详细论证了后斯大林时代文化文化禁锢的种种手段。波兹曼在《娱乐至死》和《童年的消逝》两部著作里从另一个角度为我们描述了人们精神世界的沦丧和堕落。

    马克思主义本是一种哲学主张,但他却演变为了一种宗教信仰,号召无产阶级发动革命掌握政权。在这种宗教信仰力量的带动下,无产阶级革命没有在欧洲、美国发达资本主义国家实现,相反却在亚洲和俄国这两个资本主义处于萌芽阶段的地区率先实现。无产阶级专政恰巧为极权统治提供了很好的借口和理由。因为所有的私有制都变为了公有制,所以需要有那么一部分人代表无产阶级来执掌政权。于是这执掌政权者很容易就转身为极权统治者。

    极权主义者初期采用的手段是“我说什么就是什么”,并且动用一切手段为此目的服务。无论是高压强迫的政治手腕,还是煽动群众的盲目热从,都只为实现这一目标。他们将爱情、亲情、友情这些人与人之间的美好品德彻底粉碎,让子女揭发父母、夫妻彻底决裂、朋友反目成仇,以此来加强其极权统治。由于极权统治者知道要想取得统治地位的巩固,必须先要取得思想意识的统一,于是利用一切运动来统一认识。一方面号召一批人歌功颂德,一方面对异己主义者实施政治镇压,将所谓的政治犯投放到劳改营接受改造,甚至是残害致死。另外通过一个又一个的谎言来愚弄民众从而树立极权统治者的权威,什么“解放全人类”啦;什么“宁要社会主义的草,不要资本主义的苗”;什么“资本主义的广大群众生活在水深火热之中”啦,什么“***教导我们说—–”,这些谎言的编织与散播无不使得民众更加的对极权统治者充满了忠诚。奥威尔在1948年为我们预言了极权统治的黑暗,这不得不使人由衷的钦佩。

    随着后斯大林时代的到来,极权统治者已经开始变得相对温柔些了,他不再是用“我说是什么就是什么”这种方式来统治民众意识,而是换为了“你不可以说什么”,相对而言,言论的自由度貌似宽泛了,但依旧是换汤不换药,因为你想要的表达的思想只要是极权统治者不想接受的,你仍然见不得光。极权统治的本质就是让大多数人生活在谎言中而不自知。极权统治者培养了自己的一批“御用艺术家”,用来鼓吹极权统治者为民众带来的文化利益,同时利用审查制度使得具有独立思考的文化人保持缄默,从而实现其不让公众知道真相,以控制不符合官方意识形态的思想存在的目的。

    随着科技的日益发展,民众生活水平也随之提升。在现今社会,极权统治者又如何实现其专政呢?正如爱默生所言“世界上最恐怖的东西,莫过于众人无知的反对意见。当你要阻止他们的异议时,与其不厌其烦的阻止,不如通过繁荣休闲娱乐,让他们的情感得到宣泄。”极权统治者利用尽可能多的文化娱乐,引导民众对娱乐休闲的不断追求,从而麻痹自己的精神追求,转移民众对独立与民主的关注,使得民众仅仅停留在对浅层的精神追求的快感上,从而丧失对什么才是真正生活的思考,以达到其实现极权统治的目的。波兹曼的《娱乐至死》和《童年的消逝》就是这种状态的极好描述。

    但哪里有压迫,哪里就存在反抗。每一个具有独立良知的人都会思考什么才是自己真正想过的生活。物质的追求并不能带来精神的长久愉悦,浅层的精神快感也不能换来心灵的长久宁静。真正的生活应该是我们精神世界的自由与宁静,是我们的思想不受禁锢,可以自由的思考与表述。离开极权统治的压迫,我们才看到了陀思妥耶夫斯基、索尔仁尼琴、阿列克谢耶维奇的不朽篇章;离开了极权统治,我们才知道了哈拉兹蒂、布罗茨基。他们带给我们的是对真理与自由的召唤,是可以说“二加二等于四”的自由。让我们每一个有良知的人深深思考,什么才是有意义的人生。

    我相信陀思妥耶夫斯基、索尔仁尼琴深深爱着自己的祖国和人民,正是因为这种爱,才成就了他们的名垂千古。他们所希望的,不过是希望祖国能有民主、能有自由,每一颗有良知的心灵都能够得到护佑。

    什么才是真正的生活,什么才是我想要的生活,那就是灵魂的自由与独立。对于心灵的自由,唯一的解决途径是建立一个民主的社会,而民主的存在基础是将一元化的社会转化为多元化的社会。当然,这需要一个长久的过程,其道路也必将崎岖坎坷,但我们坚信那一天终将到来,我们终将让自己的心灵与思想获得自由。

  • 读你千遍也不厌倦

    1.

    是什么,能让我们:读你千遍也不厌倦?

    当年,身在法国的毕加索得知张大千要拜访他,他也很纳闷,他说,最懂艺术的人,应该是中国人啊。

    中国人的艺术品位现在已经只能靠记忆了,但是,我们的老祖宗确实是最懂艺术的。

    5000年前,在尼罗河文明、两河文明和黄河文明都是从象形文字开始的,但是留存下来并且至今沿用的只有我们黄河文明的汉字。

    象形文字代表了中国古人的艺术创造力,而造字之法更体现了汉字的艺术性:“周礼八岁入小学,保氏教国子,先以六书。一曰指事。二曰象形。三曰形声。四曰会意。五曰转注。六曰假借。”

    汉字最初是仿照物体形状的简图,然后加上人为的标记,出现了指事字,将两幅图或两个字组合而成为会意字。除了用字之法外,字体也有不同的衍变,从金文、篆书、到隶书、楷书、行书、草书等,书法之妙,也是艺术体现。

    2.

    在东方百家争鸣的战国时期,西方诞生了欧几里得几何、阿基米德数学、亚里士多德形式逻辑思维。西方文明以字母符号开始,而中华文明依然执着地在象形文字中发展自己,独具特色。汉字的精妙在于字与义之间没有明确的文法规定,这种以形表意的方式使汉字本身有着浓郁的诗情画意,还有汉字与汉字之间的巧妙组合,如双声连绵词、叠韵联绵词。

    20世界初,美国意象派诗人庞德从象形文字中获得灵感,他说,一个汉字本身就是一首优美的诗。汉字是世界上任何一种语言中的最特殊一种,更加丰富,更加视觉化。一个字,意思太丰富,比如“道”,比如“气”。

    象形文字的以形表意不仅是文字的表达方式,而且也是思维的方式。朱熹称为“三经”的“赋比兴”就是形象思维的表达方式。钟嵘在《诗品》中说:“文已尽而意有余,兴也;因物喻志,比也;直书其事,寓言为物,赋也。”通俗点讲,直接说一件事情,就是赋;找到本体和喻体,就是比;意犹未尽、言不尽意的,就是兴。

    比和兴,是最难也是最常用的表达方式,这也是象征思维的体现。

    就拿音乐声来说,就有“大弦嘈嘈如急雨,小弦切切如私语”—白乐天笔下的噼啪声;

    “昆山玉碎凤凰叫,芙蓉泣露香兰笑”—-李贺《李凭箜篌引》;

    “划然变轩昂,勇士赴战场。浮云柳絮无根蒂,天地阔远随风扬”—韩愈《听颖师弹琴》。

    许多诗词运用通感,就是把不同的感觉打通贯穿起来。

    “衣微雨香青氛氲”(李贺)

    象形文字就如一幅幅画,给了中国诗人想象和形象思维的空间,为他们提供了色彩斑斓的语言修辞材料。这样的汉字,才能写出诗中有画的诗篇,“池塘生春草,园柳变鸣禽。”(谢灵运 唐)

    有了这样的意境,就可以使字和意之间、能指和所指之间不是十分明确和固定的,所以又“只可意会不可言传”。老子曰:“天地有大美而不言,四时有明法而不议,万物有成理而不说”。语言如海面上的冰山,还有更多的意义潜藏在文字之外,这些意义的把握理解,和读者的阅历经历有很大的关系。到后面发展而起来的“禅宗”,那是更加扑朔迷离,禅宗提倡以心传心、不立文字。一些具有禅缘慧根的诗人之作,更是让人领略其机锋,如“听雨寒更尽,开门落叶深”(无可上人)。这种”言有尽而意无穷“(苏轼),表达的内涵远超出了字面意义。这是以字母为基本组成部分的西方语言无法做到的。

    3.

    中国古典文学艺术创作,大致可以分为三个层次。

    一个是直抒胸臆,如汉赋,大肆渲染,重笔浓抹。但是一目了然,看多了觉得索然无味。

    另一个是托物言志,诗人要在景物和思想中找到一个恰当的契合点。

    第三个就是最重要的,那就是前面提到过的言有尽而意无穷。

    这三个层次,好如我们三个阶段的人生:意气风发的少年,一心求胜的青壮年和逐渐悟得的中年。

    而第三个层次最为高级。

    比如“空山不见人,但闻人语响。返影入深林,复照青苔上。”(王维《山林》)人和深林,意犹未尽。感受到的东西只是一座桥梁,它最后导致一件艺术作品的出现。只有感情、感受,才能达到艺术境界。

    用最精炼含蓄的文字,达到最大语境的发挥,古代诗人做得很到位。所谓“弄一车兵器,不如寸铁杀人”。

    唐宋以后,诗词走向凝练,不再豪爽笔墨,而是意高笔减。

    “一叶落知天下秋”

    “草嫩侵杀短,冰轻着雨消”

    又比如“沉鱼落雁”,形容美女让人好生羡妒。但是它的出处是来自于关于动物的一段话,“毛嫱丽姬,人之所美也;鱼见之深入,鸟见之高飞,麋鹿见之决骤,四者孰知天下之正色哉?”(《庄子 齐物论》),后宋之问说:“鸟惊鱼畏”的原因归结为见到了美色”,由此演化为沉鱼落雁。

    “沉鱼落雁”,没有一个字写美的,但是,意义却是美女,汉字的艺术联想,那么博大精深哎。

    4.

    我最欣赏的是辛弃疾的词:“少年不识愁滋味,爱上层楼,爱上层楼,为赋新词强说愁。而今识尽愁滋味,欲说还休,欲说还休,却道天凉好个秋。” 说不尽的惆怅,放到现今世界来,映照了最现实的世界:每个人都在抱怨着这个世界周围的一切,什么阶层固化,什么不要输在某条线上,但是,真要说出为什么抱怨,却无法说出个所以然,好像无法说出口,只能叹口气,看看天,又开始无关紧要嘀咕起来。

    什么言辞都比不上辛兄这段啊。那艺术韵味,就是大音希声。

    “此中有真意,欲辨已忘言。”(陶渊明)

    木心说得好:“最好的东西总是让人快乐又伤心的,魏晋人夜听人吹笛,曰:奈何奈何?”

    我觉得,最好的艺术也是这样。

    学习艺术,就从我们天天接触的汉字开始,从诗词开始。

    艺术是什么?

    就是在你“欢笑情如旧,萧疏鬓已斑”(韦应物)的时候,能让你欲言又止,欲说还休,欲罢不能,欲走还留的表达方式。你以为你已经忙得不再需要这些东西,所以你觉得空虚,但是,总有一天,在你“一柱一弦思华年”的时候,会和你不期而遇,投回到你自己的内心,这时,你才知道不空虚不是呼朋引伴撩拨挑战,而是不因外物变化的寂然不动的心境。

    一如“寂然凝虑,思接千载,悄焉动容,视通万里。吟咏之间,吐纳珠玉之声;眉睫之间,卷书风云之色”(《文心雕龙》)

    汉字而组成的诗赋文采都把这些给涵盖了。

    读你千遍也不厌倦,读你的感觉像春天……

  • 讲讲我在新加坡的被骗经历

    前几天,看到了签约作者张铁钉写的一篇《我是这样在北京地铁被骗了一千块钱》的文章,勾起了我在新加坡旅游时被骗的回忆。今天写出来,希望能给大家提个醒,特别是提醒独自出行的女孩子,出门在外永远不要掉以轻心。

    2016年春节前,为了实现我30岁前独自出国旅游的梦想,我将目光锁定在新加坡。原因很简单,新加坡一直是公认的最安全的国家。家人出于相同的原因,再想到我还是有几次出国旅游的经验,也算是比较痛快地同意了。我独自异国旅游的梦想,就这样实现了。

    在新加坡的第一天,天气极好,行程一切顺利。正因如此,本来还有点的警惕心,也被我全部抛到脑后了。

    第二天下午,我溜溜达达,欣赏沿途建筑,拍照外加自拍,享受着一个人的慢时光,心中很是惬意。

    后来,我在一座名叫Cavenagh的桥前停了下来。向桥的对面望去,发现正是攻略上提及到的富丽敦酒店。这座酒店建于1928年,曾被用作邮政总局、外汇局、商会和新加坡俱乐部,现在算是世界顶级酒店。

    讲讲我在新加坡的被骗经历

    我决定过桥去参观下这个有些历史来头的酒店。走到桥中央,我拿手机遥拍了一张酒店的外观照。就在这时,一位个子不高、穿着有些邋遢、斜跨个布包的男人走了过来。他很随意地说了句:“你在拍的这个酒店,是个豪华的老酒店,很多有钱人都住在那里呢。”

    讲讲我在新加坡的被骗经历

    我完全没有多想,随口就应了一句:“哦,是吗?”

    他一手拿着报纸,一手指着不远处的酒店:“你看,这个酒店是不是很漂亮?我和你说啊,原来在新加坡的很多华人都不识字不会写字,但他们还是想给家里写信报个平安,怎么办呢?这个酒店里面有个邮局,有人可以代写书信,所以好多华人就来这里找人代写家书。”

    我当时没有一点戒备之心,听得还挺认真,甚至还在想象着他所说的那个场景是怎样的拥挤。

    “现在这个酒店里面,还有个小邮局呢。我正好也要去那边办事,要不我带你去看看?”

    现在回想起来,我对自己那时候的痴呆反应简直不可思议。就算我在北京,如果有人这样和我说,我都肯定是不会跟着去的。

    可是我就像吃了迷魂药一样,竟然点点头答应了,和他一起往酒店方向走去。

    一边走,他一边给我指这指那,俨然成为了我的私人导游。而脑子已经进水的我,也跟着他手指的方向东看西看,随手拍照。

    讲讲我在新加坡的被骗经历

    也就是半分钟的路程,我们走进了酒店。这时,我有点反应过来了,我在心里问自己:你在干什么?你竟然跟着他进酒店,你是不是脑残了?

    我有些害怕了,我想我要怎么摆脱他。一开始,我决定三十六计走为上计,但我转念又想,万一周围有他的同伙怎么办?万一他们把我围起来怎么办?我那时已是慌了阵脚,所以各种夸张的想法也都随之而来。

    在我还没有想到万全之策时,他在一头卡通邮差熊前停下了,指着邮筒说:“就是这里了。你看,邮筒的后面就有那段历史的介绍。你念给叔叔听一听,让我来判断下你的英语水平。”

    讲讲我在新加坡的被骗经历

    这时,我环顾了下四周,发现自己身边有几个金发碧眼的欧美人,大堂里也是人来人往,热闹非凡。我略微放下心,想到了那个最老套的招数:“我不会读英文。我得走了,我老公还在桥那边等我呢。”

    他还是不甘心:“你念一段吧,就念一段。”

    我想不出别的回答,还是那句话:“我得走了,我老公还在桥那边等我呢。我再不过去,他一会儿也要来找我了。”

    可能是我的这个招数起了点儿作用,他决定离开了,和我谈起了条件:“小妹妹,你看,叔叔给你介绍了这么多,你给我10元钱吧。叔叔很饿,今天还没有吃东西。”

    听到这里,我赶紧掏出了10新币,满脑子想得都是那四个字:破财免灾。他接过钱,还握了下我的手,道了声谢谢,转身疾步离开。

    看他走远后,我一下就坐在了旁边的沙发上,这时我觉得自己的小心脏都快跳出来了。

    我不停地问自己:你怎么能做出这么傻的事情?你怎么能跟着陌生的男人就走了?平时看的各种安全提示都被你中午当作奶茶喝进肚子里了吗?好在只是被骗了点儿钱,如果再倒霉些,估计你也就成为“新加坡永久居民”了。

    平静了一会儿后,我离开了酒店。一路上漫无目的地走着,总回头看后面有没有人跟着,从我身边走过的每个路人也都被我贴上了坏人的标签。由于心情实在糟糕,加之天气也是阴沉沉的,以至于当我无意间走进鱼尾狮公园时,觉得鱼尾狮的样子也有些面目可憎。

    讲讲我在新加坡的被骗经历

    毫无疑问,在后面三天的行程中,我一直保持着高度警惕,丝毫不敢掉以轻心。老天保佑,最终我毫发无伤地回到了北京。

    以上,就是我在新加坡被骗的经历。

    如果我是旁观者,看到这个被骗经历,一定是不屑一顾的表情,心想我才不会这么笨,才不会遇到这样的事情。

    因为在此之前,我每次听到被骗的故事时,我基本都会觉得这样的事情不会发生在自己身上,总以为自己的警惕性会很高。结果,并非如此。

    下面想给大家几个提醒,可能是老生常谈,但还是想说,特别是独自旅游的女生,一定要注意以下五点:

    1、安全系数高的国家不代表这个国家就绝对安全。我想,我能如此糊里糊涂地被骗走10新币,可能骨子里就是认为新加坡是号称全世界最安全的国家,几乎放下了所有的戒备心。

    2、面对陌生人的搭讪,不要接话,就是置之不理的态度,除非你有十足的把握。

    3、不要总是把自拍杆拿在手里,因为这样基本就可以暴露你是一个人。

    4、如果一个人去旅游,一定不要边走路边看手机。先不说交通安全问题,关键是你的注意力可能都会被手机分散了,遇到
    突发情况时,脑子的反应都是慢半拍的。

    5、做旅游计划时,除了多看景点和美食的攻略,多了解甚至熟记一些安全常识,绝对是必不可少的功课。

    听别人被骗的故事与自己当被骗的主角,真的只有一步之遥。

    出门在外,永远安全第一。


    无戒21天写作训练营,第6天

  • 军迷日更110:机关算尽的赌徒

    9月3日,朝鲜又进行了第六次核试验,规模前所未有!如果再加上前几次导弹试验的话,朝鲜又朝着拥核前进了一大步:既有大当量的核弹头,又有中程以上的运载工具!

    军迷日更110:机关算尽的赌徒

    朝鲜核实验位置

    在外界的巨大压力之下,朝鲜为什么一次又一次地冒天下之大不韪发展核武呢?简单来说就是为了追求这种不对称手段来保护朝鲜的国家安全,保护金家政权的稳定。特别是在年轻的金正恩上台后,威信的降低使其更感不安全,在清除异己的同时,金正恩认为只有先军政治与核武器才能提振其在国内的威信,对外部敌对势力形成有效威慑。所以自其上台以来,朝鲜已进行了四次核试和数十次的导弹试验。

    军迷日更110:机关算尽的赌徒

    事情发展到这一地步,可以说朝鲜已在拥核的道路上走得太远,很难回头了。外界为阻其拥核所采取的所有应对措施基本无效:从联合国安理会日渐严苛的制裁到美国多次的军演施压,从中国倡导的多方和平谈判到韩国几届政府的阳光怀柔政策等,不是不起作用就是刺激其加快拥核步伐。

    难道朝鲜真的无所畏惧吗?显然不是,虽然其国家正贫困交加,对制裁已具免疫功能,但它毕竞有其追求。如前文所述,如果让其真切感受到,再在拥核道路上前进就有可能遭到军事打击,后果可能是国破权失的话,朝鲜才有可能考虑停步或回头。这样的情形也曾出现过:今年初,当美国扬言多艘航母将派往半岛周边,摆出一副动武之势时,朝鲜的语调明显放低,且没有进行有威胁的导弹试射!

    军迷日更110:机关算尽的赌徒

    那么后来为什么朝鲜胆量又壮起来了呢?当然是朝鲜对国际形势评估的结果,它认为虽然美国不断发出对朝动武的声音,但囿于诸多因素制约,美国不会真的对朝动武。所以,近几个月来朝鲜的举动都是建立在不会受到武力打击的赌注之上。那么到底是那些因素使美国的动武的威慑失信了呢?草根哥认为主要有以下原因:

    第一,美国的国内因素。首先,特朗普上台后,美国政策明显内收,其主要关注点在美国国内,尤其是重振美国经济方面;其次,由于特朗普的执政风格,美国国内出现了分裂动荡,反对特朗普的活动此起彼伏,耗费了特朗普的不少精力。再加上其执政团队的内讧及不断变化,有些政策至今还不稳定;再次,美国多次对外动武的效果不佳,至今阿富汉、伊拉克、利比亚及叙利亚问题都没有彻底解决,这些都会动摇特朗普再次对外开战的决心;最后,美国未必想彻底解决朝鲜问题,当然前提是朝鲜的核武对美本土威胁不大。这一问题的存在既可以牵制中俄,又可以控制日韩,如果这一问题解决,美国至少失去了一个在东北亚大规模驻军、布置反导武器的一个理由。

    第二,韩国因素。虽然朝鲜对韩威胁较大,但韩国并不希望在半岛发生战争。主要因为:战争发生,朝鲜的主要进攻对象将会是韩国,因为韩国的大片领土都在朝鲜炮箭的射程之内,最后无论战果如何,韩国都有可能被打回到前现代时期;再者战火一开,朝鲜的难民也会流向韩国等周边国家;当然更可怕的还是朝鲜的核武器及核原料,一旦造成核泄露,后果不堪设想。所以,韩国成了当前东北亚最尴尬的国家,想借助于美国保护其安全,结果反而会导致其更不安全;不敢打,又谈不成;充当美国的先锋,又想靠中国发展经济……。其处境的实质是主权不完整!

    军迷日更110:机关算尽的赌徒

    第三,中俄因素。朝鲜在地缘上与中俄接壤,并在历史上有千丝万缕的联系,准确地说中俄(苏)都曾给朝鲜提供过安全保护。虽然当前中俄都希望半岛无核化,和平解决朝鲜核问题,并对金正恩的做法非常不满,但两国尤其是中国对朝鲜并没有外界所期盼的那种影响力。中俄反对在朝鲜半岛生战、生乱的态度是明确的,除了上述谈到的与韩国一样面临难民问题与核幅射问题之外,中俄也不希望整个半岛被美控制。因为当前美国的萨德反导系统布署在韩国已令中俄愤怒不己,如果再推进到朝鲜,其对中俄的威胁会更不可承受。

    正是因为上述因素的存在,朝鲜才不惧威胁,在拥核的道路一路狂奔。因此,我们不能小瞧了朝鲜及其年轻的领导人,它虽然有点疯狂,但并没完全丧失理智而妄为,其对国际形势的审判还是比较准确的,至今中美俄三大国还真没有多少有效的办法来应对之。这一态势的发展方向大致有三条:

    一是朝鲜的行为触动了三大国的底线,金政权结束,换政权或被韩国统一。代价是东北亚诸国都会受到较大影响;

    二是金政权的的统治失控,朝鲜人民看到外面的阳光,自发推翻金家政权,成立新的政府,乐于对外交往。此方向代价较小;

    三是朝鲜真正建立起核威慑,国际上失去动武的可能,只能与朝鲜谈判,接受朝鲜拥核事实,以援助换取朝鲜对核武的管控。这一方向可能会造成东亚地区的拥核多米诺效应,地区国家竞相拥有核武器,东北亚将永久处于核阴影之下。

  • 《三天搞定Python基础概念之第二天》中文版

    Day2,即第二篇主要是讲一些偏计算的Library的使用,也就是numpy,scipy,sympy和matplotlib。

    前言: 首先,非常感谢Jiang老师将其分享出来!本课件非常经典! 经过笔者亲测,竟然确实只要三天,便可管中窥豹洞见Python及主要库的应用。实属难得诚意之作! 其次,只是鉴于Jiang老师提供的原始课件用英文写成,而我作为Python的爱好者计算机英文又不太熟练,讲义看起来比较慢,为了提高自学课件的效率,故我花了点时间将其翻译成中文,以便将来自己快速复习用。 该版仅用于个人学习之用。 再次,译者因工作中需要用到数据分析、风险可视化与管理,因此学习python,翻译水平有限,请谅解。 在征得原作者Yupeng Jiang老师的同意后,现在我将中文版本分享给大家。  

    作者:Dr.Yupeng Jiang

    翻译:Murphy Wan

    大纲( Outline)

    • 第1天:Python和科学编程介绍。 Python中的基础知识:

      • 数据类型
      • 控制结构
      • 功能
      • I/O文件
    • 第2天:用Numpy,Scipy,Matplotlib和其他模块进行计算。 用Python解决一些数学问题。

    • 第3天:时间序列:用Pandas进行统计和实际数据分析。 随机和蒙特卡罗。

    ——————————以下为英文原文————————————-

    • Day 1: Introduction to Python and scientific programming. Basics in Python: data type, contro structures, fu nctions, l/O file.
    • Day 2: Computation with Numpy, Scipy, Matplotlib and other modules. Solving some maths problems with Python.
    • Day 3: Time series: statistics and real data analysis with Pandas. Stochastics and Monte Carlo.
     

    第二天的内容

    Import modules

    Numpy

    Scipy

    Matplotlib

    Sympy

    导入模块 (Import modules)

    • 可以通过输入import关键字来导入模块
    import numpy 
    • 或者使用简称,即将模块通过as关键字来命名一个简称
    import numpy as np 
    • 有时您不必导入整个模块,就像
    from scipy.stats import norm 

    ——————————以下为英文原文————————————-

    • One can import a module by typing
    import numpy 
    • or for short by
    2import numpy as np 
    • Sometimes you do not have to import the whole module, like
    from scipy.stats import norm 

    练习 (Exercise)

    • 尝试导入模块时间,并使用它来获取计算机运行特定代码所需的时间。
    import timeit def funl (x, y):            return x**2 + y**3  t_start  =  timeit.default_timer() z =  funl(109.2, 367.1) t_end  =   timeit.default_timer()  cost  =  t_end -t_start print ( 'Time cost of funl is  %f' %cost) 

    ——————————以下为英文原文————————————-

    • Try to import the module timeit and use it to obtain how long you computer takes to run a specific code.
    import timeit def  funl (x, y):       return x**2 + y**3 t_start  =  timeit.default_timer() z =  funl(109.2, 367.1) t_end  =   timeit.default_timer() cost  =  t_end -t_start print ( 'Time cost of funl is  %f' %cost) 

    我们会遇到的模块

    • NumPy:多维数组的有效操作。 高效的数学函数。

    • Matplotlib:可视化:2D和(最近)3D图

    • SciPy:大型库实现各种数值算法,例如:

      • 线性和非线性方程的解
      • 优化
      • 数值整合
    • Sympy:符号计算(解析的 Analytical)

    • Pandas:统计与数据分析(明天)

    ——————————以下为英文原文————————————-

    Modules we will encounter

    • NumPy: Efficient manipulation of multidimensional arrays. Efficient mathematical functions.
    • Matplotlib: Visualisations: 2D and (recently) 3D plots
    • SciPy: Large library implementing various numerical algorithms, e.g.:
      • solution of linear and nonlinear equations
      • optimisation
      • numerical integration
    • Sympy: Symbolic computation (Analytical).
    • Pandas: Statistical and data analysis(tomorrow)

    Numpy

    ndarray类型

    • NumPy提供了一种新的数据类型:ndarray(n维数组)。
      • 与元组和列表不同,数组只能存储相同类型的对象(例如只有floats或只有ints)
      • 这使得数组上的操作比列表快得多; 此外,阵列占用的内存少于列表。
      • 数组为列表索引机制提供强大的扩展。

    ——————————以下为英文原文————————————-

    The ndarray type

    • NumPy provides a new data type: ndarray (n-dimensional array).

      • Unlike tuples and lists, arrays can only store objects of the same type (e.g. only floats or only ints)
      • This makes operations on arrays much faster than on lists; in addition, arrays take less memory than lists.
      • Arrays provide powerful extensions to the list indexing mechanism.

    创建ndarray

    • 我们导入Numpy(在脚本的开头或终端):
    import numpy as np 
    • 然后我们创建numpy数组:
    In [1] : np.array([2, 3, 6, 7])    Out[l] : array([2, 3, 6, 7])    In [2] : np.array([2, 3, 6, 7.])    Out [2] :  array([ 2.,  3.,  6., 7.])  <- Hamogenaous    In  [3] :  np.array( [2,  3,  6,  7+ij])    Out [3] :  array([ 2.+O.j,  3.+O.j,  6.+O.j,  7.+1.j]) 

    ——————————以下为英文原文————————————-

    Create the ndarray

    • We import Numpy (at the beginning of the script or in the terminal):
    import numpy as np 
    • Then we create numpy arrays:
    In [1] : np.array([2, 3, 6, 7])    Out[l] : array([2, 3, 6, 7])    In [2] : np.array([2, 3, 6, 7.])    Out [2] :  array([ 2.,  3.,  6., 7.])  <- Hamogenaous    In  [3] :  np.array( [2,  3,  6,  7+ij])    Out [3] :  array([ 2.+O.j,  3.+O.j,  6.+O.j,  7.+1.j]) 

    创建均匀间隔的数组

    • arange:
    in[1]:np.arange(5) Out [l]:array([0,1,2,3,4]) 

    range(start, stop, step)的所有三个参数即起始值,结束值,步长都是可以用的 另外还有一个数据的dtype参数

      in[2]:np.arange(10,100,20,dtype = float)   Out [2]:array([10.,30.,50.,70.,90.]) 
    • linspace(start,stop,num)返回数字间隔均匀的样本,按区间[start,stop]计算:
      in[3]:np.linspace(0.,2.5,5)            Out [3]:array([0.,0.625,1.25,1.875,2.5])    

    这在生成plots图表中非常有用。

    • 注释:即从0开始,到2.5结束,然后分成5等份

    多维数组矩阵 (Matrix by multidimensional array)

    In [1] : a = np.array([[l, 2, 3]  [4, 5, 6]])                           ^ 第一行 (Row 1) In  [2] : a Out [2] : array([[l, 2,  3] ,   [4,  5,  6]])  In  [3] : a.shape  #<- 行、列数等 (Number of rows, columns etc.) Out [3] : (2,3)  In  [4] : a.ndim   #<- 维度数  (Number of dimensions) Out [4] : 2  In  [5] : a,size   #<- 元素数量 (Total number of elements) Out [5] : 6 

    形状变化 (Shape changing)

    import numpy as np  a = np .arange(0, 20, 1) #1维 b = a.reshape((4, 5))   #4行5列 c = a.reshape((20, 1))  #2维 d = a.reshape((-1, 4))  #-1:自动确定 #a.shape =(4, 5) #改变a的形状 

    Size(N,),(N,1)和(1,N)是不同的!!!

    • Size(N, )表示数组是一维的。
    • Size(N,1)表示数组是维数为2, N列和1行。
    • Size(1,N)表示数组是维数为2, 1行和N列。

    让我们看一个例子,如下

    例子 (Example)

    import numpy as np  a = np.array([1,2,3,4,5]) b = a.copy ()  c1 =  np.dot(np.transpose(a), b) print(c1) c2  = np.dot(a, np.transpose(b)) print(c2)  ax  =  np.reshape(a, (5,1)) bx  =  np.reshape(b, (1,5)) c = np.dot(ax, bx) print(c) 

    使用完全相同的元素填充数组 (Filling arrays with identical elements)

    In [1] : np.zeros(3)              # zero(),全0填充数组 Out[l] : array([ O., 0., 0.])  In [2] : np.zeros((2, 2), complex) Out[2] : array([[ 0.+0.j, 0.+0.j],                                 [ 0.+O.j, 0.+0.j]])  In [3] : np.ones((2, 3))          # ones(),全1填充数组 Out[3] : array([[ 1., 1., 1.],                 [ 1., 1., 1.]]) 

    使用随机数字填充数组 (Filling arrays with random numbers)

    • rand: 0和1之间均匀分布的随机数 (random numbers uniformly distributed between 0 and 1)
       In [1] : np.random.rand(2, 4)       Out[1] : array([[ 0.373767 , 0.24377115, 0.1050342 , 0.16582644] ,                     [ 0.31149806, 0.02596055, 0.42367316, 0.67975249l]) 
    • randn: 均值为0,标准差为1的标准(高斯)正态分布 {standard normal (Gaussian) distribution with mean 0 and variance 1}
      In [2]: np.random.randn(2, 4)     Out[2]: array([[ O.87747152, 0.39977447, -0.83964985, -1.05129899],                   [-1.07933484, 0.49448873,   -1.32648606, -0.94193424]]) 
    • 其他标准分布也可以使用 (Other standard distributions are also available.)

    数组切片(1D) (Array sliciing(1D))

    • 以格式start:stop可以用来提取数组的片段(从开始到不包括stop)
    In [77]:a = np.array([0,1,2,3,4]) Out[77]:array([0,1,2,3,4])  In [78]:a [1:3]        #<--index从0开始 ,所以1是第二个数字,即对应1到3结束,就是到第三个数字,对应是2 Out[78]:array([1,2]) 
    • start可以省略,在这种情况下,它被设置为零(Notes:貌似留空更合适):
    In [79]:a [:3] Out[79]:array([0,1,2]) 
    • stop也可以省略,在这种情况下它被设置为数组长度:
    In [80]:a [1:] Out[80]:array([1,2,3,4]) 
    • 也可以使用负指数,具有标准含义:
    In [81]:a [1:-1] Out[81]:array([1,2,3])      # <-- stop为-1表示倒数第二个数 

    数组切片(1D)

    • 整个数组:a或a [:]
    In [77]:a = np.array([0,1,2,3,4]) Out[77]:array([0,1,2,3,4]) 
    • 要获取,例如每个其他元素,您可以在第二个冒号后面指定第三个数字(步骤(step)):
    In [79]:a [::2] Out[79]:array([0,2,4])   In [80]:a [1:4:2] Out[80]:array([l,3]) 
    • -1的这个步骤可用于反转数组:
    In [81]:a [::-1] Out[81]:array([4,3,2,1,0]) 

    数组索引(2D) (Array indexing (2D))

    • 对于多维数组,索引是整数元组:(For multidimensional arrays, indices are tuples of integers:)
    In [93] :  a = np.arange(12) ; a.shape =  (3,  4);  a Out[93] :  array([[0,  1,  2,  3],                   [4,  5,  6,  7],                   [8, 9,  10, 11]])  In [94] : a[1,2] Out[94] : 6  In [95] : a[1,-1] Out[95] : 7 

    数组切片(2D):单行和列 (Array slicing (2D): single rows and columns)

    • 索引的工作与列表完全相同:(Indexing works exactly like for lists:)
    In [96] : a = np.arange(12); a.shape = (3, 4); a    Out[96] : array([[0, 1, 2, 3],                  [4, 5, 6, 7],                  [8, 9,10,11]])  In [97] : a[:,1] Out[97] : array([1,5,9])  In [98] : a[2,:] Out[98] : array([ 8, 9, 10, 11])  In [99] : a[1][2] Out[99] : 6 
    • 不必明确提供尾随的冒号:(Trailing colons need not be given explicitly:)
    In [100] : a[2] Out[100] : array([8,9,10,11])  

    数组索引 (Array indexing)

     >>> a[0,3:5] array( [3,4] )  >>> a[4:,4:] array([[44, 45],         [54, 55]])  >>> a[:,2] array([2,12,22,32,42,52])  >>> a[2: :2, ::2] array([[20, 22, 24]               [40, 42, 44]])  
    《三天搞定Python基础概念之第二天》中文版

    mofang.jpg

    副本(copy)和视图(view)

    • 采用标准的list切片为其建立副本
    • 采用一个NumPy数组的切片可以在原始数组中创建一个视图。 两个数组都指向相同的内存。因此,当修改视图时,原始数组也被修改:
    In [30] : a = np.arange(5); a Out[30] : array([0, 1, 2, 3, 4])  In [31] : b = a[2:]; b Out[31] : array([2, 3, 4])  In [32] : b[0] = 100 In [33] : b  Out[33] : array([l00, 3, 4]) In [34] : a Out[34] : array([0,1,100,3,4]) 

    副本和视图 (Copies and views)

    • 为避免修改原始数组,可以制作一个切片的副本 (To avoid modifying the original array, one can make a copy of a slice:)
    In [30] : a = np.arange(5); a Out[30] : array([0, 1, 2, 3, 4])  In [31] : b = a[2:].copy(); b Out[31] : array([2, 3, 4])  In [32] : b[0] = 100 In [33] : b Out[33] : array([1OO, 3, 4])  In [34] : a  Out[34] : array([ 0,  1.  2,  3,  4])  

    矩阵乘法 (Matrix multiplication)

    • 运算符 * 表示元素乘法,而不是矩阵乘法:(The * operator represents elementwise multiplication , not matrix multiplication:)
     In [1]: A = np.array([[1, 2],[3, 4]]) In [2]: A Out[2]: array([[1, 2],                [3, 4]])  In [3]: A * A Out[3]: array([[1, 4],                [9, 16]])             
    • 使用dot()函数进行矩阵乘法:(Matrix multiplication is done with the dot() function:)
     In [4]: np.dot(A, A) Out[4]: array([[ 7, 10],                    [15, 22]])   

    矩阵乘法

    • dot()方法也适用于矩阵向量(matrix-vector)乘法:
     In [1]: A Out[1]: array([[1, 2],[3, 4]])  In [2]: x = np.array([10, 20]) In [3]: np.dot(A, x) Out[3]: array([ 50, 110])  In [4]: np.dot(x, A) Out[4]: array([ 70, 100])  

    将数组保存到文件 (Saving arrays to files)

    • savetxt()将表保存到文本文件。 (savetxt() saves a table to a text file.)
    In  [1]: a = np,linspace(0. 1, 12); a,shape ' (3, 4); a Out [1] : array([[ O.  ,  0.09090909, 0.18181818,  0.27272727], [  0.36363636,  0.45454545, 0.54545455,  0.63636364], [  0.72727273,  0.81818182. 0.90909091,  1.]])  In [2] : np.savetxt("myfile.txt", a) 
    • 其他可用的格式(参见API文档) {Other formats of file are available (see documentation)}

    • save()将表保存为Numpy“.npy”格式的二进制文件 (save() saves a table to a binary file in NumPy “.npy” format.)

      - In [3] : np.save("myfile" ,a)     
    • 生成一个二进制文件myfile .npy,其中包含一个可以使用np.load()加载的文件。 {produces a binary file myfile .npy that contains a and that can be loaded with np.load().}

    将文本文件读入数组 (Reading text files into arrays)

    • loadtxt()将以文本文件存储的表读入数组。 (loadtxt() reads a table stored as a text file into an array.)

    • 默认情况下,loadtxt()假定列是用空格分隔的。 您可以通过修改可选的参数进行更改。 以散列(#)开头的行将被忽略。 (By default, loadtxt() assumes that columns are separated with whitespace. You can change this by modifying optional parameters. Lines starting with hashes (#) are ignored.)

    • 示例文本文件data.txt: (Example text file data.txt:)

      |Year| Min temp.| Hax temp.|

      |1990| -1.5 | 25.3|

      |1991| -3.2| 21.2|

    • Code:
       In [1] : tabla = np.loadtxt("data.txt")    In [2] : table    Out[2] :    array ([[ 1.99000000e+03,   -1.50000000e+00,   2.53000000e+01],        [ 1.9910000e+03,  -3.2000000e+00,  2.12000000e+01]  

    Numpy包含更高效率的功能

    • Numpy包含许多常用的数学函数,例如:

      • np.log
      • np.maximum
      • np.sin
      • np.exp
      • np.abs
    • 在大多数情况下,Numpy函数比Math包中的类似函数更有效,特别是对于大规模数据。

    Scipy (库)

    SciPy的结构

    • scipy.integrate – >积分和普通微分方程
    • scipy.linalg – >线性代数
    • scipy.ndimage – >图像处理
    • scipy.optimize – >优化和根查找(root finding)
    • scipy.special – >特殊功能
    • scipy.stats – >统计功能

    要加载一个特定的模块,请这样使用, 例如 :

    • from scipy import linalg

    线性代数 (Linearalgebra)

    • 线性方程的解 (Solution of linear equations:)
     import numpy as np from scipy import linalg      A = np.random.randn(5, 5) b = np.random.randn(5) x = linalg.solve(A, b)     # A x = b#print(x)     eigen = linalg.eig(A)     # eigens#print(eigen)     det = linalg.det(A)     # determinant     print(det)              
    • linalg的其他有用的方法:eig()(特征值和特征向量),det()(行列式)。{Other useful functions from linalg: eig() (eigenvalues and eigenvectors), det() (determinant). }

    数值整合 (Numerical integration)

    • integration.quad是一维积分的自适应数值积分的函数。 (integrate.quad is a function for adaptive numerical quadrature of one-dimensional integrals.)
     import numpy as np from scipy import integrate  def fun(x):     return np.log(x)  value, error = integrate.quad(fun,0,1) print(value) print(error)  
    《三天搞定Python基础概念之第二天》中文版

    3days_img009_Numerical-integration.jpg

    用Scipy进行统计 (Statistics in Scipy)

    • scipy具有用于统计功能的子库,您可以导入它 (scipy has a sub-library for statistical functions, you can import it by)
    from scipy import stats 
    • 然后您可以使用一些有用的统计功能。 例如,给出标准正态分布的累积密度函数(Then you are able to use some useful statistical function. For example, the cummulative density function of a standard normal distribution is given like
    《三天搞定Python基础概念之第二天》中文版

    3days_img010_statistics_in_scipy.jpg

    • 这个包,我们可以直接使用它,如下: (with this package, we can directly use it like)
    from scipy import stats y = stats.norm.cdf(1.2) 

    优化:数据拟合 (Optimisation: Data fitting)

     import numpy as np from scipy.optimize import curve_fit import matplotlib.pyplot as plt  def func(x, a, b, c):         return a * np.exp(-b * x) + c  x = np.linspace(0, 4, 50) y = func(x, 2.5, 1.3, 0.5) ydata = y+0.2*np.random.normal(size=len(x)) popt, pcov = curve_fit(func, x, ydata) plt.plot(x, ydata, ’b*’) plt.plot(x, func(x, popt[0], /                      popt[1], popt[2]), ’r-’) plt.title(’$f(x)=ae^{-bx}+c$ curve fitting’)  
    《三天搞定Python基础概念之第二天》中文版

    3days_img011_data_fitting.jpg

    优化:根搜索 (Optimisation: Root searching)

     import numpy as np from scipy import optimize  def fun(x):     return np.exp(np.exp(x)) - x**2  # 通过初始化点0,找到兴趣0 (find zero of fun with initial point 0) # 通过Newton-Raphson方法 (by Newton-Raphson) value1 = optimize.newton(fun, 0)  # 通过二分法找到介于(-5,5)之间的 (find zero between (-5,5) by bisection) value2 = optimize.bisect(fun, -5, 5)  

    Matplotlib

    最简单的制图 (The simplest plot)

    • 导入库需要添加以下内容
     from matplotlib import pyplot as plt  
    • 为了绘制一个函数,我们操作如下 (To plot a function, we do:)
     import numpy as np import matplotlib.pyplot as plt  x = np.linspace(0, 10, 201) #y = x ** 0.5 #plt.plot(x, y) # default plot plt.figure(figsize = (3, 3)) # new fig plt.plot(x, x**0.3, ’r--’) # red dashed plt.plot(x, x-1, ’k-’) # continue plot plt.plot(x, np.zeros_like(x), ’k-’)  
    • 注意:您的x轴在plt.plot函数中应与y轴的尺寸相同。 (Note: Your x-axis should be the same dimension to y-axis in plt.plot function.)
    《三天搞定Python基础概念之第二天》中文版

    3days_img012_the_simplest_plot.jpg

     

    多个制图图例标签和标题 (Mu
    ltiple plotting, legends, labels and title)

     import numpy as np import matplotlib.pyplot as plt  x = np.linspace(0, 10, 201) plt.figure(figsize = (4, 4)) for n in range(2, 5):     y = x ** (1 / n)     plt.plot(x, y, label=’x^(1/’ /             + str(n) + ’)’) plt.legend(loc = ’best’) plt.xlabel(’X axis’) plt.ylabel(’Y axis’) plt.xlim(-2, 10) plt.title(’Multi-plot e.g. ’, fontsize = 18)  
    《三天搞定Python基础概念之第二天》中文版

    3days_img013_multiple_plotting.jpg

    • Forinformations:See
     help(plt.plot)    

    绘制子图 (Subplots )

     import numpy as np’ import matplotlib.pyplot as plt  def pffcall(S, K):         return np.maximum(S - K, 0.0) def pffput(S, K):     return np.maximum(K - S, 0.0)      S = np.linspace(50, 151, 100) fig = plt.figure(figsize=(12, 6))    sub1 = fig.add_subplot(121)     # col, row, num     sub1.set_title('Call', fontsize = 18) plt.plot(S, pffcall(S, 100), 'r-', lw = 4) plt.plot(S, np.zeros_like(S), 'black',lw = 1) sub1.grid(True) sub1.set_xlim([60, 120]) sub1.set_ylim([-10, 40])      sub2 = fig.add_subplot(122) sub2.set_title('Put', fontsize = 18) plt.plot(S, pffput(S, 100), 'r-', lw = 4) plt.plot(S, np.zeros_like(S), 'black',lw = 1) sub2.grid(True) sub2.set_xlim([60, 120]) sub2.set_ylim([-10, 40])    
    《三天搞定Python基础概念之第二天》中文版

    3days_img014_multiple_plotting.jpg

    • Figure: 一个子图的例子
      (注释:这里,可以把Figure,即fig理解为一张大画布,你把它分成了两个子区域(sub1和sub2),然后在每个子区域各画了一幅图。)

    在绘制的图上添加文本和注释 (Adding texts to plots)

     import numpy as np from scipy.stats import norm import matplotlib.pyplot as plt  def call(S, K=100, T=0.5, vol=0.6, r=0.05):     d1 = (np.log(S/K) + (r + 0.5 * vol**2) /           *T) / np.sqrt(T) / vol     d2 = (np.log(S/K) + (r - 0.5 * vol**2) /           *T) / np.sqrt(T) / vol     return S * norm.cdf(d1) - K * /     np.exp(-r * T) * norm.cdf(d2)  def delta(S, K=100, T=0.5, vol=0.6, r=0.05):     d1 = (np.log(S/K) + (r + 0.5 * vol**2)/           *T) / np.sqrt(T) / vol     return norm.cdf(d1)  

    (Code continues:)

     S = np.linspace(40, 161, 100) fig = plt.figure(figsize=(7, 6)) ax = fig.add_subplot(111) plt.plot(S,(call(S)-call(100)),’r’,lw=1) plt.plot(100, 0, ’ro’, lw=1) plt.plot(S,np.zeros_like(S), ’black’, lw = 1) plt.plot(S,call(S)-delta(100)*S- /     (call(100)-delta(100)*100), ’y’, lw = 1)  

    (Code continues:)

     ax.annotate(’$/Delta$ hedge’, xy=(100, 0), /             xytext=(110, -10),arrowprops= /             dict(headwidth =3,width = 0.5, /             facecolor=’black’, shrink=0.05)) ax.annotate(’Original call’, xy= /             (120,call(120)-call(100)),xytext/             =(130,call(120)-call(100)),/             arrowprops=dict(headwidth =10,/             width = 3, facecolor=’cyan’, /             shrink=0.05)) plt.grid(True) plt.xlim(40, 160) plt.xlabel(’Stock price’, fontsize = 18) plt.ylabel(’Profits’, fontsize = 18)  
    《三天搞定Python基础概念之第二天》中文版

    3days_img015_annotation.jpg

    两个变量的函数3D制图(3D plot of a function with 2 variables)

     import numpy as np import matplotlib.pyplot as plt from matplotlib import cm from mpl_toolkits.mplot3d import Axes3D  x, y = np.mgrid[-5:5:100j, -5:5:100j] z = x**2 + y**2 fig = plt.figure(figsize=(8, 6)) ax = plt.axes(projection='3d') surf = ax.plot_surface(x, y, z, rstride=1,/                        cmap=cm.coolwarm, cstride=1, /                        linewidth=0) fig.colorbar(surf, shrink=0.5, aspect=5) plt.title('3D plot of $z = x^2 + y^2$')  
    《三天搞定Python基础概念之第二天》中文版

    3days_img016_3D_plot.jpg

    实验3:atplotlib (Lab 3: Matplotlib)

    • 用蓝线绘制以下函数 (Plot the following function with blue line)

      《三天搞定Python基础概念之第二天》中文版

      3days_img017_1.jpg

      • 然后用红点标记坐标(1,2) (Then mark the coordinate (1, 2) with a red point.)
    • 使用np.linspace()使t ∈ [0,2π]。 然后给 (Use np.linspace0 to make t ∈ [0,2π]. Then give)

    《三天搞定Python基础概念之第二天》中文版

    3days_img017_2.jpg

    • 针对X绘Y。 在这个情节中添加一个称为“Heart”的标题。 (Plot y against x. Add a title to this plot which is called “Heart” .)
    • 针对x∈[-10,10], y∈[-10,10], 绘制3D函数 (Plot the 3D function for x∈[-10,10], y∈[-10,10])

      《三天搞定Python基础概念之第二天》中文版

      3days_img017_3.jpg

    Sympy

    符号计算 (Symbolic computation)

    • 到目前为止,我们只考虑了数值计算。 (So far, we only considered the numerical computation.)

    • Python也可以通过模块表征进行符号计算。(Python can also work with symbolic computation via module sympy.)

    • 符号计算可用于计算方程,积分等的显式解。 (Symbolic computation can be useful for calculating explicit solutions to equations, integrations and so on.)

    声明一个符号变量 (Declare a symbol variable)

     import sympy as sy  #声明x,y为变量 x = sy.Symbol('x') y = sy.Symbol('y') a, b = sy.symbols('a b')  #创建一个新符号(不是函数 f = x**2 + 2 - 2*x + x**2 -1 print(f) #自动简化 g = x**2 + 2 - 2*x + x**2 -1 print(g) 

    符号的使用1:求解方程 (Use of symbol 1: Solve equations)

     import sympy as sy  x  = sy.Symbol ('x') y  = sy.Symbol('y')  # 给定[-1,1]  (give [-1, 1]) print(sy.solve
    (x**2 - 1))  # 不能证解决 (no guarantee for solution) print(sy.solve(x**3  +  0.5*x**2 - 1))  # 用x的表达式表示y     (exepress x in terms of y) print (sy.solve(x**3  +  y**2))  # 错误:找不到算法 (error:  no  algorithm  can  be  found) print(sy.solve(x**x + 2*x - 1)) 

    符号的使用2:集成 (Use of symbol 2: Integration)

    import sympy as sy  x = sy.Symbol('x') y = sy.Symbol( 'y') b = sy.symbols ( 'a b')  # 单变量 single  variable f = sy.sin(x) + sy.exp(x) print(sy.integrate(f, (x,  a,  b))) print(sy.integrate(f, (x,  1,  2))) print(sy.integrate(f, (x,  1.0,2.0))) # 多变量 multi variables g = sy.exp(x) + x * sy.sin(y) print(sy.integrate(g, (y,a,b))) 

    符号的使用3:分化 (Use of symbol 3: Differentiation)

    import sympy as sy x =  sy.Symbol( 'x') y =  sy.Symbol( 'y') # 单变量 (single variable) f = sy.cos(x) + x**x print(sy . diff (f ,  x)) #  多变量  (multi variables) g = sy.cos(y) * x + sy.log(y) print(sy.diff (g,  y)) 
     第二天结束,辛苦了  
  • 王小波:人性的逆转

    有位西方的发展学者说:贫穷是一种生活方式。言下之意是说,有些人受穷,是因为他不想富裕。这句话是作为一种惊世骇俗的观点提出的,但我狭隘的人生经历却证明此话大有道理。对于这句话还可以充分地推广:贫困是一种生活方式,富裕是另一种生活方式;追求聪明是一种人生的态度,追求愚蠢则是另一种生活态度。在这个世界上,有一些人在追求快乐,另一些人在追求痛苦;有些人在追求聪明,另一些人在追求愚蠢。这种情形常常能把人彻底搞糊涂。

    洛克先生以为,人人都追求快乐,这是不言自明的。以此为基础,他建立了自己的哲学大厦。斯宾诺莎也说,人类行为的原动力是自我保存。作为一个非专业的读者,我认为这是同一类的东西,认为人趋利而避害,趋乐而避苦,这是伦理学的根基。以此为基础,一切都很明白。相比之下,我们民族的文化传统大不相同,认为礼高于利,义又高于生,这样就创造了一种比较复杂的伦理学。由此产生了一个矛盾,到底该从利害的角度来定义崇高,还是另有一种先验的东西,叫做崇高–举例来说,孟子认为,人皆有恻隐之心,这是人先天的良知良能,这就是崇高的根基。我也不怕人说我是民族虚无主义,反正我以为前一种想法更对。从前一种想法里产生富裕,从后一种想法里产生贫困;从前一种想法里产生的总是快乐,从后一种想法里产生的总是痛苦。我坚定不移地认为,前一种想法就叫做聪明,后一种想法就叫做愚蠢。笔者在大学里学的是理科,凭这样的学问底子,自然难以和专业哲学家理论,但我还是以为,这些话不能不说。

    对于人人都追求快乐这个不言自明的道理罗素却以为不尽然,他举受虐狂作为反例。当然,受虐狂在人口中只占极少数。但是受虐却不是罕见的品行。七十年代,笔者在农村插队,在学大寨的口号鞭策下,劳动的强度早已超过了人力所能忍受的极限,但那些工作却是一点价值也没有的。对于这些活计,老乡们概括得最对:没别的,就是要给人找些罪来受。但队干部和积极分子们却乐此不疲,干得起码是不比别人少。学大寨的结果是使大家变得更加贫穷。道理很简单:人干了艰苦的工作之后,就变得很能吃,而地里又没有多长出任何可吃的东西。这个例子说明,人人都有所追求,这个道理是不错的,但追求的却可以是任何东西:你总不好说任何东西都是快乐吧。

    人应该追求智慧,这对西方人来说是很容易接受的道理;苏格拉底甚至把求知和行善画上了等号。但是中国人却说”难得糊涂”,仿佛是希望自己变得笨一点。在我身上,追求智慧的冲动比追求快乐的冲动还要强烈,因为这个原故,在我年轻时,总是个问题青年、思想改造的重点对象。我是这么理解这件事的:别人希望我变得笨一些。谢天谢地,他们没有成功。人应该改变自己,变成某种样子,这大概是没有疑问的。有疑问的只是应该变聪明还是变笨。像这样的问题还能举出一大堆,比方说,人(尤其是女人)应该更漂亮、更性感一些,还是更难看、让人倒胃一些;对别人应该更粗暴、更野蛮一些,还是更有礼貌一些;等等。假如你经历过中国的七十年代,就会明白,在生活的每一个方面,都有不同的答案。你也许会说,每个国家都有自己的国情,每个时代都有自己的风尚,但我对这种话从来就不信。我更相信乔治·奥威尔的话:一切的关键就在于必须承认一加一等于二;弄明白了这一点,其他一切全会迎刃而解。

    我相信洛克的理论。人活在世上,趋利趋乐暂且不说,首先是应该避苦避害。这种信念来自我的人生经验:我年轻时在插队,南方北方都插过。谁要是有同样的经历就会同意,为了谋生,人所面临的最大任务是必须搬动大量沉重的物质:这些物质有时是水,有时是粪土,有时是建筑材料,等等。到七十年代中期为止,在中国南方,解决前述问题的基本答案是:一根扁担。在中国的北方则是一辆小车。我本人以为,这两个方案都愚不可及。在前一个方案之下,自肩膀至脚跟,你的每一寸肌肉、每一寸骨骼都在百十公斤重物的压迫之下,会给你带来腰疼病、腿疼病。后一种方案比前种方案强点不多,虽然车轮承担了重负,但车上的重物也因此更多。假如是往山上推的话,比挑着还要命。西方早就有人在解决这类问题,先有阿基米德,后有牛顿。卡特,所以在一二百年前就把这问题解决了。而在我们中国,到现在也没解决。你或者会以为,西方文明有这么一点小长处,善于解决这种问题,但我以为这是不对的。主要的因素是感情问题。、西方人以为,人的主要情感源于自身,所以就重视解决肉体的痛苦。中国人以为,人的主要情感是亲亲敬长,就不重视这种问题。这两种想法哪种更对?当然是前者。现在还有人说,西方人纲常败坏,过着痛苦的生活–这种说法是昧良心的。西方生活我见过,东方的生活我也见过。西方人儿女可能会吸毒,婚姻可能会破裂,总不会早上吃两片白薯干,中午吃两片白薯干,晚上再吃两片白薯干,就去挑一天担子,推一天的重车!从孔孟到如今,中国的哲学家从来不挑担、不推车。所以他们的智慧从不考虑降低肉体的痛苦,专门营造站着说话不腰疼的理论。

    在西方人看来,人所受的苦和累可以减少,这是一切的基础。假设某人做出一份牺牲,可以给自己或他人带来很多幸福,这就是崇高–洛克就是这么说的。孟子不是这么说,他的崇高另有根基,远不像洛克的理论那么能服人。据我所知,孟子远不是个笨蛋。除了良知良能,他还另有说法。他说反对他意见的人(杨朱、墨子)都是禽兽。由此得出了崇高的定义:有种东西,我们说它是崇高,是因为反对它的人都不崇高。这个定义一直沿用到了如今。细想起来,我觉得这是一种模糊不清的混蛋逻辑,还不如直说凡不同意我意见者都是王八蛋为好。总而言之,这种古怪的论证方式时常可以碰到。

    在七十年代,发生了这样一回事:河里发大水,冲走了一根国家的电线杆。有位知青下水去追,电杆没捞上来,人也淹死了。这位知青受到表彰,成了革命烈士。这件事引起了一点小小的困惑:我们知青的一条命,到底抵不抵得上一根木头?结果是困惑的人惨遭批判,结论是:国家的一根稻草落下水也要去追。至于说知青的命比不上一根稻草,人家也没这么说。他们只说,算计自己的命值点什么,这种想法本身就不崇高。坦白地说,我就是困惑者之一。现在有种说法,以为民族的和传统的就是崇高的。我知道它的论据:因为反民族和反传统的人很不崇高。但这种论点吓不倒我。

    过去欧洲有个小岛,岛上是苦役犯服刑之处。犯人每天的工作是从岛东面挑起满满的一挑水,走过崎岖的山道,到岛西面倒掉。这岛的东面是地中海,水从地中海里汲来。西面也是地中海,这担水还要倒回地中海去。既然都是地中海,所以是通着的。我想,倒在西面的水最终还要流回东面去。无价值的吃苦和无代价的牺牲大体就是这样的事。有人会说,这种劳动并非毫无意义,可以陶冶犯人的情操、提升犯人
    的灵魂;而有些人会立刻表示赞成,这些人就是那些岛上的犯人–我听说这岛上的看守手里拿着鞭子,很会打人。根据我对人性的理解,就是离开了那座岛屿,也有人会保持这种观点。假如不是这样,劳动改造就没有收到效果。在这种情况下,人性就被逆转了。

    从这个例子来看,要逆转人性,必须有两个因素:无价值的劳动和暴力的威胁,两个因素缺一不可。人性被逆转之后,他也就糊涂了。费这么大劲把人搞糊涂有什么好处,我就不知道,但想必是有的,否则不会有这么个岛。细想起来,我们民族的传统文化里就包含了这种东西。举个例子来说,朝廷的礼节。见皇上要三磕九叩、扬尘舞蹈,这套把戏耍起来很吃力,而且不会带来任何收益,显然是种无代价的劳动。但皇上可以廷杖臣子,不老实的马上拉下去打板子。有了这两个因素,这套把戏就可以耍下去,把封建士大夫的脑子搞得很糊涂。回想七十年代,当时学大寨和抓阶级斗争总是一块搞的,这样两个因素就凑齐了。我下乡时,和父老乡亲们在一起。我很爱他们,但也不能不说:他们早就被逆转了。我经历了这一切,脑子还是不糊涂,还知道一加一等于二,这只说明一件事:要逆转人性,还要有第三个因素,那就是人性的脆弱。

    我认为七十年代是我们宝贵的精神财富,这个看法和一些同龄人是一样的。七十年代的青年和现在的青年很不一样,更热情、更单纯、更守纪律、对生活的要求更低,而且更加倒霉。成为这些人中的一员,是一种极难得的际遇,这些感受和别人是一样的。有些人认为这种经历是一种崇高的感受,我就断然反对,而且认为这种想法是病态的。让我们像奥威尔一样,想想什么是一加一等于二,七十年代对于大多数中国人来说,是个极痛苦的年代。很多年轻人做出了巨大的自我牺牲,而且这种牺牲毫无价值。想清楚了这些事,我们再来谈谈崇高的问题。就七十年代这个例子来说,我认为崇高有两种:一种是当时的崇高,领导上号召我们到农村去吃苦,说这是一种光荣。还有一种崇高是现在的崇高,忍受了这些痛苦、做出了自我牺牲之后,我们自己觉得这是崇高的。我觉得这后一种崇高比较容易讲清楚。弗洛伊德对受虐狂有如下的解释:假如人生活在一种无力改变的痛苦之中,就会转而爱上这种痛苦,把它视为一种快乐,以便使自己好过一些。对这个道理稍加推广,就会想到:人是一种会自己骗自己的动物。我们吃了很多无益的苦,虚掷了不少年华,所以有人就想说,这种经历是崇高的。这种想法可以使他自己好过一些,所以它有些好作用。很不幸的是它还有些坏作用:有些人就据此认为,人必须吃一些无益的苦、虚掷一些年华,用这种方法来达到崇高。这种想法不仅有害,而且是有病。

    说到吃苦、牺牲,我认为它是负面的事件。吃苦必须有收益,牺牲必须有代价,这些都属一加一等于二的范畴。我个人认为,我在七十年代吃的苦、做出的牺牲是无价值的,所以这种经历谈不上崇高;这不是为了贬低自己,而是为了对现在和未来发生的事件有个清醒的评价。逻辑学家指出,从正确的前提能够推导出正确的结论,但从一个错误的前提就什么都能够推导出来。把无价值的牺牲看作崇高,也就是接受了一个错误的前提。此后你就会什么鬼话都能说出口来,什么不可信的事都肯信–这种状态正确的称呼叫做”糊涂”。人的本性是不喜欢犯错误的,所以想把他搞糊涂,就必须让他吃很多的苦–所以糊涂也很难得呀。因为人性不总是那么脆弱,所以糊涂才难得。经过了七十年代,有些人对人世间的把戏看得更清楚,他就是变得更聪明。有些人对人世间的把戏更看不懂了,他就是变得更糊涂。不管发生了哪种情况,七十年代都是我们的宝贵财富。

    我要说出我的结论

    中国人一直生活在一种有害哲学的影响之下,孔孟程朱编出了这套东西,完全是因为他们在社会的上层生活。假如从整个人类来考虑问题,早就会发现,趋利避害,直截了当地解决实际问题最重要–说实话,中国人在这方面已经很不像样了–这不是什么哲学的思辨,而是我的生活经验。我们的社会里,必须有改变物质生活的原动力,这样才能把未来的命脉握在自己的手里。