<commit_before>* Programming note
** basic object interface
   Ideas comes when implementing perl module ~Aspk::Tree~.
   1. new. create an object
      #+begin_src perl
      my $n = Aspk::Tree->new({data=>"aaaa"});
      #+end_src
      
   2. _prop. set a property value or get a property.
      
      Usage:
      #+begin_src perl
      # set property value
      $self->_prop(data, $spec->{data});
      $self->_prop(parent, undef);
      
      # get property value if second parameter not given
      $self->_prop(parent);
      #+end_src
      
      Implementation:
      #+begin_src perl
      sub _prop {
          my ($self, $name, $value) = @_;
          if (defined($value)) {
              $self->{"_$name"} = $value;
              return $self;
          } else {
              return $self->{"_$name"};
          }
      }
      #+end_src

   new 和 _prop函数与之前的对象的生与死中的想法相同： 即创建对象与配置对象应该分开。 
   
** 关于对象的生与死
   做tooltip , selectlist 的一些想法，目前并不是很好用，每次都要重新创建一下，不太好。
   对象需要提供的最基本的接口
   1. 创建
      生成一个空的对象，填充所有的静态信息。
      如果需要，可以调用配置接口接置动态信息，但这个配置接口必须独立。
   2. 配置
      设置、更新所有的动态信息
   3. 显示
      显示这个对象
   4. 删除
      删除这个对象
      
** 关于如何做好软件
   Thu Apr 28 10:07:28 2016
   感觉软件不好，可以先放一下，之后再改进。只要坚持，就一定能够做好。
   前提是代码要整理好，这次写wubi-app感觉就是这样，一开始运行效率有问题，尝试了一些方法，效果不佳，都不想继续做下去。就几天没管。几天后再尝试，居然一下就改好了。其实之前已经改得差不多了，只需要这最后一步，但当时已经MENG了。

** 编程习惯
   我习惯于自底向上编程。 如果底层没有实现好，则我不能够很好地思维上层的编写过程。
   这点我感觉不好。
** github
   github上信息给纷杂。 awesome系列文章(curation for some topics)， pondal的一些文章。
   https://github.com/sindresorhus/awesome/blob/master/awesome.md
   
   https://github.com/phodal

   开源软件：
   - 提供不同产品线
   - 提供服务
   - 提供附加产品
   - donation
     
   关键的是先提高影响力。向头条发文章，做有影响力的软件，写文章。

   pondal 的 awesome-iot中的关于 home automation中可以看一下。可以先选个方向研究下。
   
** OOP
   解决条件判断的问题。
   一种判断对应一组派生类对象，虚函数将这些连接在一起。

   OOP and if conditional
   http://stackoverflow.com/questions/7264145/if-less-programming-basically-without-conditionals<commit_msg>add thinks on software design<commit_after>* Programming note
** basic object interface
   Ideas comes when implementing perl module ~Aspk::Tree~.
   1. new. create an object
      #+begin_src perl
      my $n = Aspk::Tree->new({data=>"aaaa"});
      #+end_src
      
   2. _prop. set a property value or get a property.
      
      Usage:
      #+begin_src perl
      # set property value
      $self->_prop(data, $spec->{data});
      $self->_prop(parent, undef);
      
      # get property value if second parameter not given
      $self->_prop(parent);
      #+end_src
      
      Implementation:
      #+begin_src perl
      sub _prop {
          my ($self, $name, $value) = @_;
          if (defined($value)) {
              $self->{"_$name"} = $value;
              return $self;
          } else {
              return $self->{"_$name"};
          }
      }
      #+end_src

   new 和 _prop函数与之前的对象的生与死中的想法相同： 即创建对象与配置对象应该分开。 
   
** 关于对象的生与死
   做tooltip , selectlist 的一些想法，目前并不是很好用，每次都要重新创建一下，不太好。
   对象需要提供的最基本的接口
   1. 创建
      生成一个空的对象，填充所有的静态信息。
      如果需要，可以调用配置接口接置动态信息，但这个配置接口必须独立。
   2. 配置
      设置、更新所有的动态信息
   3. 显示
      显示这个对象
   4. 删除
      删除这个对象
      
** 关于如何做好软件
   Thu Apr 28 10:07:28 2016
   感觉软件不好，可以先放一下，之后再改进。只要坚持，就一定能够做好。
   前提是代码要整理好，这次写wubi-app感觉就是这样，一开始运行效率有问题，尝试了一些方法，效果不佳，都不想继续做下去。就几天没管。几天后再尝试，居然一下就改好了。其实之前已经改得差不多了，只需要这最后一步，但当时已经MENG了。

** 编程习惯
   我习惯于自底向上编程。 如果底层没有实现好，则我不能够很好地思维上层的编写过程。
   这点我感觉不好。
** github
   github上信息给纷杂。 awesome系列文章(curation for some topics)， pondal的一些文章。
   https://github.com/sindresorhus/awesome/blob/master/awesome.md
   
   https://github.com/phodal

   开源软件：
   - 提供不同产品线
   - 提供服务
   - 提供附加产品
   - donation
     
   关键的是先提高影响力。向头条发文章，做有影响力的软件，写文章。

   pondal 的 awesome-iot中的关于 home automation中可以看一下。可以先选个方向研究下。
   
** OOP
   解决条件判断的问题。
   一种判断对应一组派生类对象，虚函数将这些连接在一起。

   OOP and if conditional
   http://stackoverflow.com/questions/7264145/if-less-programming-basically-without-conditionals
** 软件设计
   目前太过于关注具体小的实现了，整体设计训练太少。
*** 案例研究
**** 聊天软件设计
     1. 界面
        界面=模板（静态）+数据（动态）。 因此界面模块对外只需要提供一个 ~update~ 接口就行了，用于更新动态数据。这是界面第一层。
        
        界面还应该包括一层：各个数据的 update关系。比如update了控件A，控件B也需要update。这是第二层。
     
{'fraction_non_alphanumeric': 0.11022286821705427, 'fraction_numerical': 0.012354651162790697, 'mean_word_length': 2.5110544217687076, 'pattern_counts': {'":': 0, '<': 3, '<?xml version=': 0, '>': 19, 'https://': 4, 'lorem ipsum': 0, 'www.': 0, 'xml': 0}, 'pii_count': 0, 'substrings_counts': 0, 'word_list_counts': {'cursed_substrings.json': 0, 'profanity_word_list.json': 0, 'sexual_word_list.json': 0, 'zh_pornsignals.json': 0}}
{'dir': 'git-commits-cleaned', 'id': '1638246', 'n_tokens_mistral': 2210, 'n_tokens_neox': 2336, 'n_words': 285}