From 891f8eee12e6bdb2fad0fe0b28976362eb965236 Mon Sep 17 00:00:00 2001 From: Chris Xiong Date: Sat, 17 Feb 2024 20:44:52 -0500 Subject: Massive blog regeneration. RBUS-related posts. --- blog/list/0.html | 20 +- blog/list/1.html | 24 +- blog/list/10.html | 17 +- blog/list/2.html | 32 +- blog/list/3.html | 32 +- blog/list/4.html | 32 +- blog/list/5.html | 32 +- blog/list/6.html | 30 +- blog/list/7.html | 32 +- blog/list/8.html | 32 +- blog/list/9.html | 32 +- blog/list/acmicpc/0.html | 44 +- blog/list/c++/0.html | 40 +- blog/list/computer-repairing/0.html | 2 +- blog/list/contest/0.html | 42 +- blog/list/daily-life/0.html | 4 +- blog/list/daily-life/1.html | 4 +- blog/list/design/0.html | 40 +- blog/list/devel/0.html | 40 +- blog/list/devel/1.html | 40 +- blog/list/device-review/0.html | 4 +- blog/list/device-review/1.html | 2 +- blog/list/electronics/0.html | 76 ++ blog/list/electronics/index.html | 1 + blog/list/garbage/0.html | 12 +- blog/list/garbage/1.html | 2 +- blog/list/garbage/2.html | 2 +- blog/list/garbage/3.html | 2 +- blog/list/hands-on/0.html | 2 +- blog/list/interactive/0.html | 42 +- blog/list/js/0.html | 40 +- blog/list/linux/0.html | 40 +- blog/list/midi/0.html | 4 +- blog/list/music/0.html | 28 +- blog/list/music/1.html | 76 ++ blog/list/opengl/0.html | 40 +- blog/list/qmidiplayer/0.html | 40 +- blog/list/qt/0.html | 40 +- blog/list/random-xp/0.html | 42 +- blog/list/sophistry/0.html | 8 +- blog/list/sophistry/1.html | 2 +- blog/list/special-page/0.html | 42 +- blog/list/web/0.html | 44 +- blog/list/webgl/0.html | 40 +- blog/post/2014-11-14.html | 46 +- blog/post/2015-10-29.html | 40 +- blog/post/2015-10-30.html | 38 +- blog/post/2015-10-31.html | 38 +- blog/post/2015-11-01.html | 38 +- blog/post/2015-11-22.html | 38 +- blog/post/2015-12-20.html | 38 +- blog/post/2015-12-23.html | 38 +- blog/post/2015-12-27.html | 38 +- blog/post/2016-01-03.html | 38 +- blog/post/2016-01-16.html | 38 +- blog/post/2016-01-25.html | 38 +- blog/post/2016-02-14.html | 38 +- blog/post/2016-02-18.html | 38 +- blog/post/2016-03-26.html | 38 +- blog/post/2016-04-09.html | 52 +- blog/post/2016-05-12.html | 38 +- blog/post/2016-06-21.html | 52 +- blog/post/2016-09-24.html | 38 +- blog/post/2017-01-09.html | 38 +- blog/post/2017-01-18.html | 50 +- blog/post/2017-02-13.html | 38 +- blog/post/2017-04-11.html | 38 +- blog/post/2017-05-08.html | 38 +- blog/post/2017-06-09.html | 38 +- blog/post/2017-06-29.html | 14 +- blog/post/2017-11-25.html | 38 +- blog/post/2017-12-21.html | 50 +- blog/post/2018-01-05.html | 38 +- blog/post/2018-01-07.html | 46 +- blog/post/2018-02-05.html | 38 +- blog/post/2018-03-17.html | 38 +- blog/post/2018-04-17.html | 38 +- blog/post/2018-04-22.html | 78 +- blog/post/2018-05-03.html | 88 +-- blog/post/2018-05-08.html | 38 +- blog/post/2018-05-18.html | 38 +- blog/post/2018-06-05.html | 38 +- blog/post/2018-06-07.html | 38 +- blog/post/2018-10-11.html | 67 +- blog/post/2018-12-06.html | 234 ++++-- blog/post/2019-02-13.html | 170 +++-- blog/post/2019-04-25.html | 805 +++++++++++++++++---- blog/post/2019-06-24.html | 471 ++++++++++++ blog/post/2019-09-04.html | 77 +- blog/post/2020-11-20.html | 1357 +++++++++++++++++++++++++++++------ blog/post/2021-06-03.html | 37 +- blog/post/2021-10-10.html | 386 ++++++++-- blog/post/2022-11-27.html | 20 +- blog/post/2023-11-13.html | 2 +- blog/post/2024-02-02.html | 610 ++++++++++++++++ blog/post/2024-02-04.html | 594 +++++++++++++++ blog/post/Privacy.html | 100 ++- blog/post/TOP.html | 56 +- blog/post/rbus-adat-m.html | 531 ++++++++++++++ 99 files changed, 5424 insertions(+), 2913 deletions(-) create mode 100644 blog/list/electronics/0.html create mode 120000 blog/list/electronics/index.html create mode 100644 blog/list/music/1.html create mode 100644 blog/post/2019-06-24.html create mode 100644 blog/post/2024-02-02.html create mode 100644 blog/post/2024-02-04.html create mode 100644 blog/post/rbus-adat-m.html (limited to 'blog') diff --git a/blog/list/0.html b/blog/list/0.html index dd8c625..24818f0 100644 --- a/blog/list/0.html +++ b/blog/list/0.html @@ -39,7 +39,7 @@ function ol() +
  • acmicpc
  • c++
  • computer-repairing
  • contest
  • daily-life
  • design
  • devel
  • device-review
  • electronics
  • garbage
  • hands-on
  • interactive
  • js
  • linux
  • midi
  • music
  • opengl
  • qmidiplayer
  • qt
  • random-xp
  • sophistry
  • special-page
  • web
  • webgl
  • @@ -57,20 +57,20 @@ function ol()
    #special-page 2019-09-03/2019-09-03
    -

    Framework Laptop: Repasting & Two Year Report

    +

    RBUS-ADAT devlog


    -
    #device-review #computer-repairing - 2023-11-13/2023-11-28
    +
    #music #electronics + 2024-02-04/2024-02-17
    -

    (Not really) Musical Answers & Rants

    +

    R-BUS Technical Information


    -
    #music #midi - 2022-11-27/2022-12-02
    +
    #music #electronics + 2024-02-02/2024-02-13
    -

    Framework Laptop: The next thing in the laptop world?

    +

    Framework Laptop: Repasting & Two Year Report


    -
    #device-review #hands-on #computer-repairing - 2022-07-23/2023-11-14
    +
    #device-review #computer-repairing + 2023-11-13/2023-11-28
    @@ -47,6 +47,16 @@ function ol()
    +

    (Not really) Musical Answers & Rants

    +
    +
    #music #midi + 2022-11-27/2022-12-02
    +
    +

    Framework Laptop: The next thing in the laptop world?

    +
    +
    #device-review #hands-on #computer-repairing + 2022-07-23/2023-11-14
    +

    EDIROL SD-20: the Crumbling of the Canvas?


    #device-review #midi #music @@ -60,17 +70,7 @@ function ol()

    EDIROL SD-80: The Adventure Continues


    #device-review #midi #music - 2020-11-20/2022-07-01
    -
    -

    September 2019 Site Update

    -
    -
    #web - 2019-09-04/2019-11-12
    -
    -

    EDIROL SD-80: A Trapped Beast

    -
    -
    #device-review #midi #music #hands-on - 2019-04-25/2022-06-30
    + 2020-11-20/2024-02-11
    @@ -47,6 +47,21 @@ function ol()
    +

    Hackathon 2015乱搞记

    +
    +
    #random-xp + 2015-11-01/2015-11-22
    +
    +

    大学入学两个月了……

    +
    +
    #garbage + 2015-10-31/2018-10-11
    +
    +

    First CCPC sightseeing tour

    +
    +
    #contest + 2015-10-30/2018-10-11
    +

    noname01.pas


    #garbage diff --git a/blog/list/2.html b/blog/list/2.html index 3b68430..b4fc4b9 100644 --- a/blog/list/2.html +++ b/blog/list/2.html @@ -39,7 +39,7 @@ function ol() +
  • acmicpc
  • c++
  • computer-repairing
  • contest
  • daily-life
  • design
  • devel
  • device-review
  • electronics
  • garbage
  • hands-on
  • interactive
  • js
  • linux
  • midi
  • music
  • opengl
  • qmidiplayer
  • qt
  • random-xp
  • sophistry
  • special-page
  • web
  • webgl
  • @@ -47,30 +47,30 @@ function ol()
    -

    Site Revamp and Other Rants -- 2019 Edition

    +

    September 2019 Site Update


    -
    #web #random-xp #garbage - 2019-02-13/2019-07-24
    +
    #web + 2019-09-04/2019-11-12
    -

    小米 MIX 3 上手体验

    +

    Working as an intern for "the spyware corporation"


    -
    #device-review #hands-on - 2018-12-06/2021-01-30
    +
    #garbage #sophistry + 2019-06-24/2024-02-17
    -

    The stupid blogging system evolved!

    +

    EDIROL SD-80: A Trapped Beast


    -
    #web #devel #js - 2018-10-11/2018-10-11
    +
    #device-review #midi #music #hands-on + 2019-04-25/2022-06-30
    -

    Should this site still be alive by 2035...

    +

    Site Revamp and Other Rants -- 2019 Edition


    -
    #sophistry #garbage - 2018-06-07/2018-10-11
    +
    #web #random-xp #garbage + 2019-02-13/2019-07-24
    -

    Software Project Management in the Free Software World

    +

    小米 MIX 3 上手体验


    -
    #sophistry - 2018-06-05/2018-10-16
    +
    #device-review #hands-on + 2018-12-06/2021-01-30
    @@ -47,30 +47,30 @@ function ol()
    -

    Ideology vs Pragmatism &c.

    +

    The stupid blogging system evolved!


    -
    #sophistry #garbage - 2018-05-18/2018-10-11
    +
    #web #devel #js + 2018-10-11/2018-10-11
    -

    Respecting your job

    +

    Should this site still be alive by 2035...


    -
    #sophistry #garbage #acmicpc - 2018-05-08/2019-02-12
    +
    #sophistry #garbage + 2018-06-07/2018-10-11
    -

    Are you an Apple fanboy/fangirl?

    +

    Software Project Management in the Free Software World


    -
    #garbage #interactive - 2018-05-03/2019-02-09
    +
    #sophistry + 2018-06-05/2018-10-16
    -

    ICPC类比赛中计算几何问题之「乱象」

    +

    Ideology vs Pragmatism &c.


    -
    #garbage #acmicpc - 2018-04-22/2018-10-11
    +
    #sophistry #garbage + 2018-05-18/2018-10-11
    -

    The "Deepin is spyware" problem

    +

    Respecting your job


    -
    #linux #garbage #sophistry - 2018-04-17/2018-10-11
    +
    #sophistry #garbage #acmicpc + 2018-05-08/2019-02-12
    @@ -47,30 +47,30 @@ function ol()
    -

    Some rants on SMELT, QMidiPlayer and Virtools

    +

    Are you an Apple fanboy/fangirl?


    -
    #devel #qmidiplayer #opengl - 2018-03-17/2018-10-11
    +
    #garbage #interactive + 2018-05-03/2019-02-09
    -

    Does gaming make me merrier & more relaxed or the opposite?

    +

    ICPC类比赛中计算几何问题之「乱象」


    -
    #garbage - 2018-02-05/2018-10-11
    +
    #garbage #acmicpc + 2018-04-22/2018-10-11
    -

    Trash dump for the fifth semester

    +

    The "Deepin is spyware" problem


    -
    #garbage #daily-life - 2018-01-07/2018-10-30
    +
    #linux #garbage #sophistry + 2018-04-17/2018-10-11
    -

    Now using reverse proxy to deliver content

    +

    Some rants on SMELT, QMidiPlayer and Virtools


    -
    #web #random-xp - 2018-01-05/2018-10-11
    +
    #devel #qmidiplayer #opengl + 2018-03-17/2018-10-11
    -

    为什么我就是不使用Mac

    +

    Does gaming make me merrier & more relaxed or the opposite?


    -
    #garbage #device-review - 2017-12-21/2019-02-12
    +
    #garbage + 2018-02-05/2018-10-11
    @@ -47,30 +47,30 @@ function ol()
    -

    A short post on Cakewalk's death and my music production

    +

    Trash dump for the fifth semester


    -
    #music #garbage - 2017-11-25/2018-10-11
    +
    #garbage #daily-life + 2018-01-07/2018-10-30
    -

    Trash dump for the fourth semester

    +

    Now using reverse proxy to deliver content


    -
    #garbage #daily-life - 2017-06-29/2021-06-26
    +
    #web #random-xp + 2018-01-05/2018-10-11
    -

    Fuck Windows et cetera

    +

    为什么我就是不使用Mac


    -
    #daily-life - 2017-06-08/2018-10-11
    +
    #garbage #device-review + 2017-12-21/2019-02-12
    -

    2017省赛流水帐

    +

    A short post on Cakewalk's death and my music production


    -
    #contest #acmicpc - 2017-05-08/2019-02-12
    +
    #music #garbage + 2017-11-25/2018-10-11
    -

    SBS 2.0 is now the default blog browser

    +

    Trash dump for the fourth semester


    -
    #devel #web - 2017-04-11/2018-10-11
    +
    #garbage #daily-life + 2017-06-29/2021-06-26
    @@ -47,30 +47,30 @@ function ol()
    -

    [多大图警告]ls /dev

    +

    Fuck Windows et cetera


    -
    #device-review - 2017-02-13/2019-02-12
    +
    #daily-life + 2017-06-08/2018-10-11
    -

    Trash dump for the third semester

    +

    2017省赛流水帐


    -
    #garbage #daily-life - 2017-01-09/2018-10-11
    +
    #contest #acmicpc + 2017-05-08/2019-02-12
    -

    [多大图警告]终究还是改不了修电脑的命

    +

    SBS 2.0 is now the default blog browser


    -
    #computer-repairing #garbage - 2017-01-09/2019-02-12
    +
    #devel #web + 2017-04-11/2018-10-11
    -

    2-in-1

    +

    [多大图警告]ls /dev


    -
    #devel #qmidiplayer #c++ #qt - 2016-09-24/2018-10-11
    +
    #device-review + 2017-02-13/2019-02-12
    -

    Trash dump for the first academic year

    +

    Trash dump for the third semester


    #garbage #daily-life - 2016-06-21/2018-10-11
    + 2017-01-09/2018-10-11
    @@ -47,30 +47,30 @@ function ol()
    -

    ThinkPad X1 Yoga初体验

    +

    [多大图警告]终究还是改不了修电脑的命


    -
    #device-review - 2016-05-12/2019-02-12
    +
    #computer-repairing #garbage + 2017-01-09/2019-02-12
    -

    The MIDI File Format Specification and MIDI Implementation in QMidiPlayer

    +

    2-in-1


    -
    #devel #qmidiplayer #midi - 2016-04-09/2018-10-11
    +
    #devel #qmidiplayer #c++ #qt + 2016-09-24/2018-10-11
    -

    ACM校赛水题组酱油记

    +

    Trash dump for the first academic year


    -
    #contest #acmicpc - 2016-03-26/2018-10-11
    +
    #garbage #daily-life + 2016-06-21/2018-10-11
    -

    Cross Noodles Recooked

    +

    ThinkPad X1 Yoga初体验


    -
    #devel #js #webgl - 2016-02-18/2018-10-11
    +
    #device-review + 2016-05-12/2019-02-12
    -

    Why Do I Prefer a Computer over a Girlfriend/(Boyfriend)

    +

    The MIDI File Format Specification and MIDI Implementation in QMidiPlayer


    -
    #sophistry - 2016-02-14/2018-10-11
    +
    #devel #qmidiplayer #midi + 2016-04-09/2018-10-11
    @@ -47,30 +47,30 @@ function ol()
    -

    放假...

    +

    ACM校赛水题组酱油记


    -
    #daily-life - 2016-01-25/2018-10-11
    +
    #contest #acmicpc + 2016-03-26/2018-10-11
    -

    QMidiPlayer Progress-2016-01-16

    +

    Cross Noodles Recooked


    -
    #devel #qmidiplayer - 2016-01-16/2018-10-11
    +
    #devel #js #webgl + 2016-02-18/2018-10-11
    -

    The Design and The Real Product

    +

    Why Do I Prefer a Computer over a Girlfriend/(Boyfriend)


    -
    #devel #design - 2016-01-03/2018-10-11
    +
    #sophistry + 2016-02-14/2018-10-11
    -

    QMidiPlayer got its repo

    +

    放假...


    -
    #devel #qmidiplayer - 2015-12-27/2018-10-11
    +
    #daily-life + 2016-01-25/2018-10-11
    -

    Chris' First Development Blog

    +

    QMidiPlayer Progress-2016-01-16


    -
    #devel - 2015-12-23/2018-10-11
    +
    #devel #qmidiplayer + 2016-01-16/2018-10-11
    @@ -47,30 +47,30 @@ function ol()
    -

    +

    The Design and The Real Product


    -
    #random-xp - 2015-12-20/2018-10-11
    +
    #devel #design + 2016-01-03/2018-10-11
    -

    Raspberry Pi2 初体验

    +

    QMidiPlayer got its repo


    -
    #hands-on #device-review - 2015-11-22/2018-10-11
    +
    #devel #qmidiplayer + 2015-12-27/2018-10-11
    -

    Hackathon 2015乱搞记

    +

    Chris' First Development Blog


    -
    #random-xp - 2015-11-01/2015-11-22
    +
    #devel + 2015-12-23/2018-10-11
    -

    大学入学两个月了……

    +


    -
    #garbage - 2015-10-31/2018-10-11
    +
    #random-xp + 2015-12-20/2018-10-11
    -

    First CCPC sightseeing tour

    +

    Raspberry Pi2 初体验


    -
    #contest - 2015-10-30/2018-10-11
    +
    #hands-on #device-review + 2015-11-22/2018-10-11
    @@ -82,7 +50,7 @@ loadTheme();

    Respecting your job


    #sophistry #garbage #acmicpc - 2018-05-08/2019-02-13
    + 2018-05-08/2019-02-12

    ICPC类比赛中计算几何问题之「乱象」


    @@ -92,7 +60,7 @@ loadTheme();

    2017省赛流水帐


    #contest #acmicpc - 2017-05-08/2019-02-13
    + 2017-05-08/2019-02-12

    ACM校赛水题组酱油记


    diff --git a/blog/list/c++/0.html b/blog/list/c++/0.html index 3e894bd..e5affa2 100644 --- a/blog/list/c++/0.html +++ b/blog/list/c++/0.html @@ -1,9 +1,10 @@ - + Chrisoft::Blog + @@ -25,41 +26,8 @@ function ol() else unsetevents(); } window.onresize(); + loadTheme(); } -function loadTheme(){ - var thm=document.cookie.replace(new RegExp("(?:(?:^|.*;\\s*)thm\\s*\\=\\s*([^;]*).*$)|^.*$"),"$1"); - if(thm.length<2||'0123z'.indexOf(thm[0])==-1||'abz'.indexOf(thm[1])==-1)thm='zz'; - var ent=""; - var d=new Date(); - if(thm[0]=='z') - { - var m=d.getMonth()+1; - if(m>=3&&m<6)thm='0'+thm[1]; - else if(m>=6&&m<9)thm='1'+thm[1]; - else if(m>=9&&m<12)thm='2'+thm[1]; - else thm='3'+thm[1]; - } - if(thm[1]=='z') - {if(d.getHours()>=18||d.getHours()<6)thm=thm[0]+'b';else thm=thm[0]+'a';} - ent=`theme${thm}`; - var R=new RegExp('theme[0-4][ab]'); - for(var i=0;i @@ -71,7 +39,7 @@ loadTheme(); +
  • acmicpc
  • c++
  • computer-repairing
  • contest
  • daily-life
  • design
  • devel
  • device-review
  • electronics
  • garbage
  • hands-on
  • interactive
  • js
  • linux
  • midi
  • music
  • opengl
  • qmidiplayer
  • qt
  • random-xp
  • sophistry
  • special-page
  • web
  • webgl
  • diff --git a/blog/list/computer-repairing/0.html b/blog/list/computer-repairing/0.html index 08d7df5..65a10b3 100644 --- a/blog/list/computer-repairing/0.html +++ b/blog/list/computer-repairing/0.html @@ -39,7 +39,7 @@ function ol() +
  • acmicpc
  • c++
  • computer-repairing
  • contest
  • daily-life
  • design
  • devel
  • device-review
  • electronics
  • garbage
  • hands-on
  • interactive
  • js
  • linux
  • midi
  • music
  • opengl
  • qmidiplayer
  • qt
  • random-xp
  • sophistry
  • special-page
  • web
  • webgl
  • diff --git a/blog/list/contest/0.html b/blog/list/contest/0.html index d84e8b2..37683a3 100644 --- a/blog/list/contest/0.html +++ b/blog/list/contest/0.html @@ -1,9 +1,10 @@ - + Chrisoft::Blog + @@ -25,41 +26,8 @@ function ol() else unsetevents(); } window.onresize(); + loadTheme(); } -function loadTheme(){ - var thm=document.cookie.replace(new RegExp("(?:(?:^|.*;\\s*)thm\\s*\\=\\s*([^;]*).*$)|^.*$"),"$1"); - if(thm.length<2||'0123z'.indexOf(thm[0])==-1||'abz'.indexOf(thm[1])==-1)thm='zz'; - var ent=""; - var d=new Date(); - if(thm[0]=='z') - { - var m=d.getMonth()+1; - if(m>=3&&m<6)thm='0'+thm[1]; - else if(m>=6&&m<9)thm='1'+thm[1]; - else if(m>=9&&m<12)thm='2'+thm[1]; - else thm='3'+thm[1]; - } - if(thm[1]=='z') - {if(d.getHours()>=18||d.getHours()<6)thm=thm[0]+'b';else thm=thm[0]+'a';} - ent=`theme${thm}`; - var R=new RegExp('theme[0-4][ab]'); - for(var i=0;i @@ -71,7 +39,7 @@ loadTheme(); +
  • acmicpc
  • c++
  • computer-repairing
  • contest
  • daily-life
  • design
  • devel
  • device-review
  • electronics
  • garbage
  • hands-on
  • interactive
  • js
  • linux
  • midi
  • music
  • opengl
  • qmidiplayer
  • qt
  • random-xp
  • sophistry
  • special-page
  • web
  • webgl
  • @@ -82,7 +50,7 @@ loadTheme();

    2017省赛流水帐


    #contest #acmicpc - 2017-05-08/2019-02-13
    + 2017-05-08/2019-02-12 diff --git a/blog/list/daily-life/1.html b/blog/list/daily-life/1.html index 06f82be..fe1f4f0 100644 --- a/blog/list/daily-life/1.html +++ b/blog/list/daily-life/1.html @@ -1,4 +1,4 @@ - + @@ -39,7 +39,7 @@ function ol() +
  • acmicpc
  • c++
  • computer-repairing
  • contest
  • daily-life
  • design
  • devel
  • device-review
  • electronics
  • garbage
  • hands-on
  • interactive
  • js
  • linux
  • midi
  • music
  • opengl
  • qmidiplayer
  • qt
  • random-xp
  • sophistry
  • special-page
  • web
  • webgl
  • diff --git a/blog/list/design/0.html b/blog/list/design/0.html index 293d18e..38bd786 100644 --- a/blog/list/design/0.html +++ b/blog/list/design/0.html @@ -1,9 +1,10 @@ - + Chrisoft::Blog + @@ -25,41 +26,8 @@ function ol() else unsetevents(); } window.onresize(); + loadTheme(); } -function loadTheme(){ - var thm=document.cookie.replace(new RegExp("(?:(?:^|.*;\\s*)thm\\s*\\=\\s*([^;]*).*$)|^.*$"),"$1"); - if(thm.length<2||'0123z'.indexOf(thm[0])==-1||'abz'.indexOf(thm[1])==-1)thm='zz'; - var ent=""; - var d=new Date(); - if(thm[0]=='z') - { - var m=d.getMonth()+1; - if(m>=3&&m<6)thm='0'+thm[1]; - else if(m>=6&&m<9)thm='1'+thm[1]; - else if(m>=9&&m<12)thm='2'+thm[1]; - else thm='3'+thm[1]; - } - if(thm[1]=='z') - {if(d.getHours()>=18||d.getHours()<6)thm=thm[0]+'b';else thm=thm[0]+'a';} - ent=`theme${thm}`; - var R=new RegExp('theme[0-4][ab]'); - for(var i=0;i @@ -71,7 +39,7 @@ loadTheme(); +
  • acmicpc
  • c++
  • computer-repairing
  • contest
  • daily-life
  • design
  • devel
  • device-review
  • electronics
  • garbage
  • hands-on
  • interactive
  • js
  • linux
  • midi
  • music
  • opengl
  • qmidiplayer
  • qt
  • random-xp
  • sophistry
  • special-page
  • web
  • webgl
  • diff --git a/blog/list/devel/0.html b/blog/list/devel/0.html index 34bccd8..0dc9c89 100644 --- a/blog/list/devel/0.html +++ b/blog/list/devel/0.html @@ -1,9 +1,10 @@ - + Chrisoft::Blog + @@ -25,41 +26,8 @@ function ol() else unsetevents(); } window.onresize(); + loadTheme(); } -function loadTheme(){ - var thm=document.cookie.replace(new RegExp("(?:(?:^|.*;\\s*)thm\\s*\\=\\s*([^;]*).*$)|^.*$"),"$1"); - if(thm.length<2||'0123z'.indexOf(thm[0])==-1||'abz'.indexOf(thm[1])==-1)thm='zz'; - var ent=""; - var d=new Date(); - if(thm[0]=='z') - { - var m=d.getMonth()+1; - if(m>=3&&m<6)thm='0'+thm[1]; - else if(m>=6&&m<9)thm='1'+thm[1]; - else if(m>=9&&m<12)thm='2'+thm[1]; - else thm='3'+thm[1]; - } - if(thm[1]=='z') - {if(d.getHours()>=18||d.getHours()<6)thm=thm[0]+'b';else thm=thm[0]+'a';} - ent=`theme${thm}`; - var R=new RegExp('theme[0-4][ab]'); - for(var i=0;i @@ -71,7 +39,7 @@ loadTheme(); +
  • acmicpc
  • c++
  • computer-repairing
  • contest
  • daily-life
  • design
  • devel
  • device-review
  • electronics
  • garbage
  • hands-on
  • interactive
  • js
  • linux
  • midi
  • music
  • opengl
  • qmidiplayer
  • qt
  • random-xp
  • sophistry
  • special-page
  • web
  • webgl
  • diff --git a/blog/list/devel/1.html b/blog/list/devel/1.html index a0ff8bd..7594161 100644 --- a/blog/list/devel/1.html +++ b/blog/list/devel/1.html @@ -1,9 +1,10 @@ - + Chrisoft::Blog + @@ -25,41 +26,8 @@ function ol() else unsetevents(); } window.onresize(); + loadTheme(); } -function loadTheme(){ - var thm=document.cookie.replace(new RegExp("(?:(?:^|.*;\\s*)thm\\s*\\=\\s*([^;]*).*$)|^.*$"),"$1"); - if(thm.length<2||'0123z'.indexOf(thm[0])==-1||'abz'.indexOf(thm[1])==-1)thm='zz'; - var ent=""; - var d=new Date(); - if(thm[0]=='z') - { - var m=d.getMonth()+1; - if(m>=3&&m<6)thm='0'+thm[1]; - else if(m>=6&&m<9)thm='1'+thm[1]; - else if(m>=9&&m<12)thm='2'+thm[1]; - else thm='3'+thm[1]; - } - if(thm[1]=='z') - {if(d.getHours()>=18||d.getHours()<6)thm=thm[0]+'b';else thm=thm[0]+'a';} - ent=`theme${thm}`; - var R=new RegExp('theme[0-4][ab]'); - for(var i=0;i @@ -71,7 +39,7 @@ loadTheme(); +
  • acmicpc
  • c++
  • computer-repairing
  • contest
  • daily-life
  • design
  • devel
  • device-review
  • electronics
  • garbage
  • hands-on
  • interactive
  • js
  • linux
  • midi
  • music
  • opengl
  • qmidiplayer
  • qt
  • random-xp
  • sophistry
  • special-page
  • web
  • webgl
  • diff --git a/blog/list/device-review/0.html b/blog/list/device-review/0.html index fd3c693..353dc4b 100644 --- a/blog/list/device-review/0.html +++ b/blog/list/device-review/0.html @@ -39,7 +39,7 @@ function ol() +
  • acmicpc
  • c++
  • computer-repairing
  • contest
  • daily-life
  • design
  • devel
  • device-review
  • electronics
  • garbage
  • hands-on
  • interactive
  • js
  • linux
  • midi
  • music
  • opengl
  • qmidiplayer
  • qt
  • random-xp
  • sophistry
  • special-page
  • web
  • webgl
  • @@ -65,7 +65,7 @@ function ol()

    EDIROL SD-80: The Adventure Continues


    #device-review #midi #music - 2020-11-20/2022-07-01
    + 2020-11-20/2024-02-11 diff --git a/blog/list/electronics/0.html b/blog/list/electronics/0.html new file mode 100644 index 0000000..ed4cef4 --- /dev/null +++ b/blog/list/electronics/0.html @@ -0,0 +1,76 @@ + + + + +Chrisoft::Blog + + + + + + + + + + + + + + + + + +
    +
    + +
    +

    RBUS-ADAT devlog

    +
    +
    #music #electronics + 2024-02-04/2024-02-17
    +
    +

    R-BUS Technical Information

    +
    +
    #music #electronics + 2024-02-02/2024-02-13
    +
    +
    + +
    + + + \ No newline at end of file diff --git a/blog/list/electronics/index.html b/blog/list/electronics/index.html new file mode 120000 index 0000000..359ee56 --- /dev/null +++ b/blog/list/electronics/index.html @@ -0,0 +1 @@ +0.html \ No newline at end of file diff --git a/blog/list/garbage/0.html b/blog/list/garbage/0.html index fa71103..7e6a8e4 100644 --- a/blog/list/garbage/0.html +++ b/blog/list/garbage/0.html @@ -39,7 +39,7 @@ function ol() +
  • acmicpc
  • c++
  • computer-repairing
  • contest
  • daily-life
  • design
  • devel
  • device-review
  • electronics
  • garbage
  • hands-on
  • interactive
  • js
  • linux
  • midi
  • music
  • opengl
  • qmidiplayer
  • qt
  • random-xp
  • sophistry
  • special-page
  • web
  • webgl
  • @@ -51,16 +51,16 @@ function ol()
    #garbage 2016-02-13/2018-10-11
    -
    -

    GEESE

    -
    -
    #sophistry #garbage - 2022-12-10/2022-12-10

    No, I'm not dead


    #garbage 2021-06-03/2021-06-02
    +
    +

    Working as an intern for "the spyware corporation"

    +
    +
    #garbage #sophistry + 2019-06-24/2024-02-17
    diff --git a/blog/list/garbage/2.html b/blog/list/garbage/2.html index 100e469..ad92037 100644 --- a/blog/list/garbage/2.html +++ b/blog/list/garbage/2.html @@ -39,7 +39,7 @@ function ol() +
  • acmicpc
  • c++
  • computer-repairing
  • contest
  • daily-life
  • design
  • devel
  • device-review
  • electronics
  • garbage
  • hands-on
  • interactive
  • js
  • linux
  • midi
  • music
  • opengl
  • qmidiplayer
  • qt
  • random-xp
  • sophistry
  • special-page
  • web
  • webgl
  • diff --git a/blog/list/garbage/3.html b/blog/list/garbage/3.html index 89c736b..c77388c 100644 --- a/blog/list/garbage/3.html +++ b/blog/list/garbage/3.html @@ -39,7 +39,7 @@ function ol() +
  • acmicpc
  • c++
  • computer-repairing
  • contest
  • daily-life
  • design
  • devel
  • device-review
  • electronics
  • garbage
  • hands-on
  • interactive
  • js
  • linux
  • midi
  • music
  • opengl
  • qmidiplayer
  • qt
  • random-xp
  • sophistry
  • special-page
  • web
  • webgl
  • diff --git a/blog/list/hands-on/0.html b/blog/list/hands-on/0.html index 4d0f64a..0cd9700 100644 --- a/blog/list/hands-on/0.html +++ b/blog/list/hands-on/0.html @@ -39,7 +39,7 @@ function ol() +
  • acmicpc
  • c++
  • computer-repairing
  • contest
  • daily-life
  • design
  • devel
  • device-review
  • electronics
  • garbage
  • hands-on
  • interactive
  • js
  • linux
  • midi
  • music
  • opengl
  • qmidiplayer
  • qt
  • random-xp
  • sophistry
  • special-page
  • web
  • webgl
  • diff --git a/blog/list/interactive/0.html b/blog/list/interactive/0.html index 23d5329..81a0a2c 100644 --- a/blog/list/interactive/0.html +++ b/blog/list/interactive/0.html @@ -1,9 +1,10 @@ - + Chrisoft::Blog + @@ -25,41 +26,8 @@ function ol() else unsetevents(); } window.onresize(); + loadTheme(); } -function loadTheme(){ - var thm=document.cookie.replace(new RegExp("(?:(?:^|.*;\\s*)thm\\s*\\=\\s*([^;]*).*$)|^.*$"),"$1"); - if(thm.length<2||'0123z'.indexOf(thm[0])==-1||'abz'.indexOf(thm[1])==-1)thm='zz'; - var ent=""; - var d=new Date(); - if(thm[0]=='z') - { - var m=d.getMonth()+1; - if(m>=3&&m<6)thm='0'+thm[1]; - else if(m>=6&&m<9)thm='1'+thm[1]; - else if(m>=9&&m<12)thm='2'+thm[1]; - else thm='3'+thm[1]; - } - if(thm[1]=='z') - {if(d.getHours()>=18||d.getHours()<6)thm=thm[0]+'b';else thm=thm[0]+'a';} - ent=`theme${thm}`; - var R=new RegExp('theme[0-4][ab]'); - for(var i=0;i @@ -71,7 +39,7 @@ loadTheme(); +
  • acmicpc
  • c++
  • computer-repairing
  • contest
  • daily-life
  • design
  • devel
  • device-review
  • electronics
  • garbage
  • hands-on
  • interactive
  • js
  • linux
  • midi
  • music
  • opengl
  • qmidiplayer
  • qt
  • random-xp
  • sophistry
  • special-page
  • web
  • webgl
  • @@ -82,7 +50,7 @@ loadTheme();

    Are you an Apple fanboy/fangirl?


    #garbage #interactive - 2018-05-03/2019-02-10
    + 2018-05-03/2019-02-09
    diff --git a/blog/list/linux/0.html b/blog/list/linux/0.html index 0cd1d65..b2251b1 100644 --- a/blog/list/linux/0.html +++ b/blog/list/linux/0.html @@ -1,9 +1,10 @@ - + Chrisoft::Blog + @@ -25,41 +26,8 @@ function ol() else unsetevents(); } window.onresize(); + loadTheme(); } -function loadTheme(){ - var thm=document.cookie.replace(new RegExp("(?:(?:^|.*;\\s*)thm\\s*\\=\\s*([^;]*).*$)|^.*$"),"$1"); - if(thm.length<2||'0123z'.indexOf(thm[0])==-1||'abz'.indexOf(thm[1])==-1)thm='zz'; - var ent=""; - var d=new Date(); - if(thm[0]=='z') - { - var m=d.getMonth()+1; - if(m>=3&&m<6)thm='0'+thm[1]; - else if(m>=6&&m<9)thm='1'+thm[1]; - else if(m>=9&&m<12)thm='2'+thm[1]; - else thm='3'+thm[1]; - } - if(thm[1]=='z') - {if(d.getHours()>=18||d.getHours()<6)thm=thm[0]+'b';else thm=thm[0]+'a';} - ent=`theme${thm}`; - var R=new RegExp('theme[0-4][ab]'); - for(var i=0;i @@ -71,7 +39,7 @@ loadTheme(); +
  • acmicpc
  • c++
  • computer-repairing
  • contest
  • daily-life
  • design
  • devel
  • device-review
  • electronics
  • garbage
  • hands-on
  • interactive
  • js
  • linux
  • midi
  • music
  • opengl
  • qmidiplayer
  • qt
  • random-xp
  • sophistry
  • special-page
  • web
  • webgl
  • diff --git a/blog/list/midi/0.html b/blog/list/midi/0.html index a75f17e..afde4fe 100644 --- a/blog/list/midi/0.html +++ b/blog/list/midi/0.html @@ -39,7 +39,7 @@ function ol() +
  • acmicpc
  • c++
  • computer-repairing
  • contest
  • daily-life
  • design
  • devel
  • device-review
  • electronics
  • garbage
  • hands-on
  • interactive
  • js
  • linux
  • midi
  • music
  • opengl
  • qmidiplayer
  • qt
  • random-xp
  • sophistry
  • special-page
  • web
  • webgl
  • @@ -60,7 +60,7 @@ function ol()

    EDIROL SD-80: The Adventure Continues


    #device-review #midi #music - 2020-11-20/2022-07-01
    + 2020-11-20/2024-02-11 @@ -47,6 +47,16 @@ function ol()
    +

    RBUS-ADAT devlog

    +
    +
    #music #electronics + 2024-02-04/2024-02-17
    +
    +

    R-BUS Technical Information

    +
    +
    #music #electronics + 2024-02-02/2024-02-13
    +

    (Not really) Musical Answers & Rants


    #music #midi @@ -60,24 +70,14 @@ function ol()

    EDIROL SD-80: The Adventure Continues


    #device-review #midi #music - 2020-11-20/2022-07-01
    -
    -

    EDIROL SD-80: A Trapped Beast

    -
    -
    #device-review #midi #music #hands-on - 2019-04-25/2022-06-30
    -
    -

    A short post on Cakewalk's death and my music production

    -
    -
    #music #garbage - 2017-11-25/2018-10-11
    + 2020-11-20/2024-02-11
    diff --git a/blog/list/qt/0.html b/blog/list/qt/0.html index 813db07..30711fb 100644 --- a/blog/list/qt/0.html +++ b/blog/list/qt/0.html @@ -1,9 +1,10 @@ - + Chrisoft::Blog + @@ -25,41 +26,8 @@ function ol() else unsetevents(); } window.onresize(); + loadTheme(); } -function loadTheme(){ - var thm=document.cookie.replace(new RegExp("(?:(?:^|.*;\\s*)thm\\s*\\=\\s*([^;]*).*$)|^.*$"),"$1"); - if(thm.length<2||'0123z'.indexOf(thm[0])==-1||'abz'.indexOf(thm[1])==-1)thm='zz'; - var ent=""; - var d=new Date(); - if(thm[0]=='z') - { - var m=d.getMonth()+1; - if(m>=3&&m<6)thm='0'+thm[1]; - else if(m>=6&&m<9)thm='1'+thm[1]; - else if(m>=9&&m<12)thm='2'+thm[1]; - else thm='3'+thm[1]; - } - if(thm[1]=='z') - {if(d.getHours()>=18||d.getHours()<6)thm=thm[0]+'b';else thm=thm[0]+'a';} - ent=`theme${thm}`; - var R=new RegExp('theme[0-4][ab]'); - for(var i=0;i @@ -71,7 +39,7 @@ loadTheme(); +
  • acmicpc
  • c++
  • computer-repairing
  • contest
  • daily-life
  • design
  • devel
  • device-review
  • electronics
  • garbage
  • hands-on
  • interactive
  • js
  • linux
  • midi
  • music
  • opengl
  • qmidiplayer
  • qt
  • random-xp
  • sophistry
  • special-page
  • web
  • webgl
  • diff --git a/blog/list/random-xp/0.html b/blog/list/random-xp/0.html index 23d9b11..c61a36b 100644 --- a/blog/list/random-xp/0.html +++ b/blog/list/random-xp/0.html @@ -1,9 +1,10 @@ - + Chrisoft::Blog + @@ -25,41 +26,8 @@ function ol() else unsetevents(); } window.onresize(); + loadTheme(); } -function loadTheme(){ - var thm=document.cookie.replace(new RegExp("(?:(?:^|.*;\\s*)thm\\s*\\=\\s*([^;]*).*$)|^.*$"),"$1"); - if(thm.length<2||'0123z'.indexOf(thm[0])==-1||'abz'.indexOf(thm[1])==-1)thm='zz'; - var ent=""; - var d=new Date(); - if(thm[0]=='z') - { - var m=d.getMonth()+1; - if(m>=3&&m<6)thm='0'+thm[1]; - else if(m>=6&&m<9)thm='1'+thm[1]; - else if(m>=9&&m<12)thm='2'+thm[1]; - else thm='3'+thm[1]; - } - if(thm[1]=='z') - {if(d.getHours()>=18||d.getHours()<6)thm=thm[0]+'b';else thm=thm[0]+'a';} - ent=`theme${thm}`; - var R=new RegExp('theme[0-4][ab]'); - for(var i=0;i @@ -71,7 +39,7 @@ loadTheme(); +
  • acmicpc
  • c++
  • computer-repairing
  • contest
  • daily-life
  • design
  • devel
  • device-review
  • electronics
  • garbage
  • hands-on
  • interactive
  • js
  • linux
  • midi
  • music
  • opengl
  • qmidiplayer
  • qt
  • random-xp
  • sophistry
  • special-page
  • web
  • webgl
  • @@ -82,7 +50,7 @@ loadTheme();

    Site Revamp and Other Rants -- 2019 Edition


    #web #random-xp #garbage - 2019-02-13/2019-07-25
    + 2019-02-13/2019-07-24 @@ -47,10 +47,10 @@ function ol()
    -

    GEESE

    +

    Working as an intern for "the spyware corporation"


    -
    #sophistry #garbage - 2022-12-10/2022-12-10
    +
    #garbage #sophistry + 2019-06-24/2024-02-17
    diff --git a/blog/list/special-page/0.html b/blog/list/special-page/0.html index cdda9cb..17a7811 100644 --- a/blog/list/special-page/0.html +++ b/blog/list/special-page/0.html @@ -1,9 +1,10 @@ - + Chrisoft::Blog + @@ -25,41 +26,8 @@ function ol() else unsetevents(); } window.onresize(); + loadTheme(); } -function loadTheme(){ - var thm=document.cookie.replace(new RegExp("(?:(?:^|.*;\\s*)thm\\s*\\=\\s*([^;]*).*$)|^.*$"),"$1"); - if(thm.length<2||'0123z'.indexOf(thm[0])==-1||'abz'.indexOf(thm[1])==-1)thm='zz'; - var ent=""; - var d=new Date(); - if(thm[0]=='z') - { - var m=d.getMonth()+1; - if(m>=3&&m<6)thm='0'+thm[1]; - else if(m>=6&&m<9)thm='1'+thm[1]; - else if(m>=9&&m<12)thm='2'+thm[1]; - else thm='3'+thm[1]; - } - if(thm[1]=='z') - {if(d.getHours()>=18||d.getHours()<6)thm=thm[0]+'b';else thm=thm[0]+'a';} - ent=`theme${thm}`; - var R=new RegExp('theme[0-4][ab]'); - for(var i=0;i @@ -71,7 +39,7 @@ loadTheme(); +
  • acmicpc
  • c++
  • computer-repairing
  • contest
  • daily-life
  • design
  • devel
  • device-review
  • electronics
  • garbage
  • hands-on
  • interactive
  • js
  • linux
  • midi
  • music
  • opengl
  • qmidiplayer
  • qt
  • random-xp
  • sophistry
  • special-page
  • web
  • webgl
  • @@ -82,7 +50,7 @@ loadTheme();

    Privacy Policy & Terms


    #special-page - 2019-09-03/2019-09-04
    + 2019-09-03/2019-09-03
    @@ -82,12 +50,12 @@ loadTheme();

    September 2019 Site Update


    #web - 2019-09-04/2019-11-13
    + 2019-09-04/2019-11-12

    Site Revamp and Other Rants -- 2019 Edition


    #web #random-xp #garbage - 2019-02-13/2019-07-25
    + 2019-02-13/2019-07-24

    The stupid blogging system evolved!


    diff --git a/blog/list/webgl/0.html b/blog/list/webgl/0.html index 2704318..28bf88d 100644 --- a/blog/list/webgl/0.html +++ b/blog/list/webgl/0.html @@ -1,9 +1,10 @@ - + Chrisoft::Blog + @@ -25,41 +26,8 @@ function ol() else unsetevents(); } window.onresize(); + loadTheme(); } -function loadTheme(){ - var thm=document.cookie.replace(new RegExp("(?:(?:^|.*;\\s*)thm\\s*\\=\\s*([^;]*).*$)|^.*$"),"$1"); - if(thm.length<2||'0123z'.indexOf(thm[0])==-1||'abz'.indexOf(thm[1])==-1)thm='zz'; - var ent=""; - var d=new Date(); - if(thm[0]=='z') - { - var m=d.getMonth()+1; - if(m>=3&&m<6)thm='0'+thm[1]; - else if(m>=6&&m<9)thm='1'+thm[1]; - else if(m>=9&&m<12)thm='2'+thm[1]; - else thm='3'+thm[1]; - } - if(thm[1]=='z') - {if(d.getHours()>=18||d.getHours()<6)thm=thm[0]+'b';else thm=thm[0]+'a';} - ent=`theme${thm}`; - var R=new RegExp('theme[0-4][ab]'); - for(var i=0;i @@ -71,7 +39,7 @@ loadTheme(); +
  • acmicpc
  • c++
  • computer-repairing
  • contest
  • daily-life
  • design
  • devel
  • device-review
  • electronics
  • garbage
  • hands-on
  • interactive
  • js
  • linux
  • midi
  • music
  • opengl
  • qmidiplayer
  • qt
  • random-xp
  • sophistry
  • special-page
  • web
  • webgl
  • diff --git a/blog/post/2014-11-14.html b/blog/post/2014-11-14.html index 1aeea18..54e796d 100644 --- a/blog/post/2014-11-14.html +++ b/blog/post/2014-11-14.html @@ -1,4 +1,4 @@ - + @@ -61,18 +61,33 @@ function ol()

    转写前言

    看到此篇日期比这个博客系统诞生还早的文章的你请不要恐慌。这是我高中三年级写的一篇沙雕文章。原文以我的除自己之外无人可以辨认的手写体记录于高中考试时所发的草稿纸上。今天(2021年6月26日)转写出来,供世人鄙视。

    -

    (为了免去各位识别我的手写体的痛苦,在此不会发布扫描版。请相信我的转写是 100% 准确的)

    +

    (为了免去各位识别我的手写体的痛苦,在此不会发布扫描版。请相信我的转写是 +100% 准确的)

    正文

    喷当代中国大陆的“考场作文”制度

    浅显的中国历史我们都学过。教科书上说什么“八股取士”是一种怎么怎么样的做法(诸如钳制思想,阻碍人类发展之类,我早就还给我可亲可敬的历史老师了)。那么,现在我的观点是:现代中国大陆的考场作文制度毒害人的程度,比八股取士什么玩意儿的深十倍乃至百倍!

    -

    写得一手好文章,原是一件好事,在许多方面都有用的。但是,对于像我这样的,编一篇考场作文比便秘拉不出 (bi——) 还困难的人来说,写那种东西基本就是对我们的残害了。拿到作文题目,搜肠刮肚完还不知道如何去作的时候,已经十分惆怅了。然而,还有人追在你屁股后面,要你拉出来的 (bi——)!(这个比喻一点儿也不失当,因为这样憋出来的作文往往跟 (bi——) 一样臭)。便秘了还要逼人家拉出来,这是一种多么不人道的行为!肠在这种摧残之下,尚有发生直肠癌的可能性,而我们的榆木脑袋……

    -

    好好好!你说写这种东西对我们有好处,那我们来看看到底有什么好处!我们来随便看几篇“考场佳作”的题目:什么“熄灭蜡烛,莫惊扰美”,什么“心有猛虎,细嗅蔷薇”,什么“纸梯”,超浓的“文学气息”,一看就不是实用的文章。(我不是故意挑的——因为那本书上可以找到的题目全都这样…)那么,这种题目,善于写作的人写出来,叫“美文”;我这号人写出来,必然就是 (bi——) 了。将来,善于写作的人从办公室里出来,可以写上两篇作为娱乐,陶冶身心。而我扫完大街回窝之后还要玩上一次便秘?!别开玩笑了!我不是 masochist (受虐狂)!再者,我还要为我仅剩的一点大脑负责呢!

    -

    那么又有人说话了(我妈就是其中的一位):“这对你将来写论文还有用处哩!”我对此实在无话可说。那么假设有万分之一的可能性,我高中毕业没去扫大街,还考上了名校——石油大学,我该写论文了。然后我的论文落笔一个“人生如梦,年华似雪”,抬笔又是“自然而缓慢的优雅的成长”…… (bi————————)! Pardon my French (对不起我爆粗了)!便秘的事就不用提了,因为光想象一下论文里要出现这种东西就得让我恶心上一个小时!

    +

    写得一手好文章,原是一件好事,在许多方面都有用的。但是,对于像我这样的,编一篇考场作文比便秘拉不出 +(bi——) +还困难的人来说,写那种东西基本就是对我们的残害了。拿到作文题目,搜肠刮肚完还不知道如何去作的时候,已经十分惆怅了。然而,还有人追在你屁股后面,要你拉出来的 +(bi——)!(这个比喻一点儿也不失当,因为这样憋出来的作文往往跟 (bi——) +一样臭)。便秘了还要逼人家拉出来,这是一种多么不人道的行为!肠在这种摧残之下,尚有发生直肠癌的可能性,而我们的榆木脑袋……

    +

    好好好!你说写这种东西对我们有好处,那我们来看看到底有什么好处!我们来随便看几篇“考场佳作”的题目:什么“熄灭蜡烛,莫惊扰美”,什么“心有猛虎,细嗅蔷薇”,什么“纸梯”,超浓的“文学气息”,一看就不是实用的文章。(我不是故意挑的——因为那本书上可以找到的题目全都这样…)那么,这种题目,善于写作的人写出来,叫“美文”;我这号人写出来,必然就是 +(bi——) +了。将来,善于写作的人从办公室里出来,可以写上两篇作为娱乐,陶冶身心。而我扫完大街回窝之后还要玩上一次便秘?!别开玩笑了!我不是 +masochist (受虐狂)!再者,我还要为我仅剩的一点大脑负责呢!

    +

    那么又有人说话了(我妈就是其中的一位):“这对你将来写论文还有用处哩!”我对此实在无话可说。那么假设有万分之一的可能性,我高中毕业没去扫大街,还考上了名校——石油大学,我该写论文了。然后我的论文落笔一个“人生如梦,年华似雪”,抬笔又是“自然而缓慢的优雅的成长”…… +(bi————————)! Pardon my French +(对不起我爆粗了)!便秘的事就不用提了,因为光想象一下论文里要出现这种东西就得让我恶心上一个小时!

    如果你同意以上我的观点,你现在应该同意考场作文对我这样的废物一点儿好处也没有了。(如果你认为我还有救,那一定是因为你没救了。)那么为什么我要说这东西对普天下都有害呢?下面我就要喷喷这制度了。

    -

    警告:以下内容有一定的政治倾向。共产主义的拥护者(sǐ dǎng)们,为了保持你们高贵的贞操,以及确保你们不被当作政治犯处理掉,我建议你们立即停止阅读并重新读一遍《共产党宣言》或《毛选》。(其实我的政治倾向还是很温和的,我既不认为共产主义阻碍人类发展,也不认为“西方国家”就是一肚子坏水。我只是不想被跨省而已……不要来抓我啊!)

    +

    警告:以下内容有一定的政治倾向。共产主义的拥护者(sǐ +dǎng)们,为了保持你们高贵的贞操,以及确保你们不被当作政治犯处理掉,我建议你们立即停止阅读并重新读一遍《共产党宣言》或《毛选》。(其实我的政治倾向还是很温和的,我既不认为共产主义阻碍人类发展,也不认为“西方国家”就是一肚子坏水。我只是不想被跨省而已……不要来抓我啊!)

    首先,最为可恨的一点,是每道作文题目必有的“自定立意”。第一次我看到这四个字,欣喜若狂,以为就可以把自己扫遍全天下大街大志表达出来了。殊不知有人已经在背后把立意分了三六九等,而我这个恰好处在下下等,发下来一看,20分!

    -

    那么我是这玩意儿的受害者,有没有受益者呢?有!有些极度狡猾圆润的人,敏锐地捕捉到了一个事实:出题人和批卷人似乎总是坚定的共产党员。于是他们想尽一切办法讨好党。再加上最近时事紧张,他们更有的可写了:把日本和德国拿出来对比,或者“西方国家鼓吹‘中国威胁论’”,预计不久之后还会有一批宣传社会主义核心价值观的。这是什么玩意儿?潜伏在身边的地下党员么?!另外,马克思的“高考”作文题目是“青年在选择职业时的考虑”,他们的觉悟已经超越马克思啦!这 (bi——) 深藏功与名啊!(顺便,我听说老金一家三个都在这个年纪写过很高端的东西……)

    -

    与此相比,英语作文就开明得多(或许是考虑到我们英语水平太低的缘故)。要写“十年后的我”,我就写我十年后扫大街,居无定所,饥一顿饱一顿,这还得了 80% 的分。这种东西上了语文考场作文,估计直接就零分啦!可今年某省的高考作文还要人大谈“大学的门与路”。故意歧视我们这些没学上的学渣是不是!这种出题人,就该让他们在全省乃至全国学渣的口水中淹死!

    +

    那么我是这玩意儿的受害者,有没有受益者呢?有!有些极度狡猾圆润的人,敏锐地捕捉到了一个事实:出题人和批卷人似乎总是坚定的共产党员。于是他们想尽一切办法讨好党。再加上最近时事紧张,他们更有的可写了:把日本和德国拿出来对比,或者“西方国家鼓吹‘中国威胁论’”,预计不久之后还会有一批宣传社会主义核心价值观的。这是什么玩意儿?潜伏在身边的地下党员么?!另外,马克思的“高考”作文题目是“青年在选择职业时的考虑”,他们的觉悟已经超越马克思啦!这 +(bi——) +深藏功与名啊!(顺便,我听说老金一家三个都在这个年纪写过很高端的东西……)

    +

    与此相比,英语作文就开明得多(或许是考虑到我们英语水平太低的缘故)。要写“十年后的我”,我就写我十年后扫大街,居无定所,饥一顿饱一顿,这还得了 +80% +的分。这种东西上了语文考场作文,估计直接就零分啦!可今年某省的高考作文还要人大谈“大学的门与路”。故意歧视我们这些没学上的学渣是不是!这种出题人,就该让他们在全省乃至全国学渣的口水中淹死!

    嘛,我差不多喷完了。在此我特地公布一下前段时间我做的一个调查的结果。问题是:“你认为现在所写的语文考场作文,对你的将来……”调查的对象是本校本年级学生45名,其中不乏作文常被当作范文的。没有人选择“非常有用”或“不知道”,而选择“有一定用处”和“完全没用”的人数比大约为1:2——和我的预测基本相同。从此我们至少可以看出一点问题。但我们伟大的出题人们还在命这种题:“贴近社会生活,有人文气息,让考生有话说”。这种题,让我这种学渣有什么话说!

    *注:本文引用的“考场佳作”,均来自《步步高大一轮复习讲义语文新课标》及万能的一中语文组所编的《语文天地》。

    Chris Xiong

    @@ -81,11 +96,20 @@ function ol()

    文中提到的英语作文一事,是确有其事的。某种程度上是为写本文故意做的一次试验。

    文中提到的调查是存在的。不过调查对象全都是理科生(文科生当时和我们不在同一座教学楼里),结果自然是自动偏向对我的结论有利的。

    文中充满着我高中时代典型的自嘲。如果你看了本文的纸质版,你会感到(当时的)我对这种考场作文的痛恨从纸上渗出来(转写到屏幕上之后这种效果虽然有所减弱,但从标点符号和语言的使用上还是能看出一些来的——虽然什么东西从屏幕上渗出来听起来有些奇怪)。这种痛恨是如此的强烈,以至于我高中几乎没有写过一篇严肃的考场作文。大部分写出来的,都是用来气老师的。如此一来即使我不写作文作业,或者模拟考试答题纸作文面直接空白,老师也不会找我的麻烦——既免去我写作文的痛苦,又免去老师读我写的东西的折磨,真是两全其美。

    -

    要是说高中从不练习写作如今有没有什么后悔之处,那么我 GRE 的作文不过关可以说勉强算是一点。但 GRE 作文不像高考英语,CET或者托福英语。后者考的是语言使用能力,而 GRE 考查的是思辨能力。所以从这个角度讲,就算我的高中语文考场作文次次满分, GRE 作文估计也达不到一半人的水平,那么也没有什么可后悔的地方了。

    -

    举个随便编的例子来说, GRE 的作文题目可能是这样的:当地政府人员宣布了一项计划,计划在本地的河上建造一座水库。并且声称由于甲、乙、丙原因,水库建造后当地的居民人均寿命可以翻 10 倍。要求答题者分析政府的主张是否存在漏洞(当然是有的)。

    +

    要是说高中从不练习写作如今有没有什么后悔之处,那么我 GRE +的作文不过关可以说勉强算是一点。但 GRE +作文不像高考英语,CET或者托福英语。后者考的是语言使用能力,而 GRE +考查的是思辨能力。所以从这个角度讲,就算我的高中语文考场作文次次满分, +GRE 作文估计也达不到一半人的水平,那么也没有什么可后悔的地方了。

    +

    举个随便编的例子来说, GRE +的作文题目可能是这样的:当地政府人员宣布了一项计划,计划在本地的河上建造一座水库。并且声称由于甲、乙、丙原因,水库建造后当地的居民人均寿命可以翻 +10 倍。要求答题者分析政府的主张是否存在漏洞(当然是有的)。

    而中国的高考作文考的是什么?似乎首要是学生的政治“觉悟”,其次是使用华丽词句的能力。前者加上近年来越来越红的作文题目(见我2018年与山东考生一起写的高考作文(链接)),让人不得不怀疑考场作文成了灌输特定价值观的工具。至于使用华丽词句的能力,我想也许不是所有人都需要的吧。朴实无华的文字,只要传递了作者想要表达的信息,也就达到了目的;华丽的辞藻,反倒可能提高阅读的门槛,即便要表达的思想是如何卓越,也许也无法为大众所接受。

    思辨(或者称为批判性思维)能力,至少让人在与人争论时能够发现对方是否存在逻辑上的漏洞和谬误,并且可以帮助自己避免类似的错误。而对固定价值观的灌输,则恰恰相反:让人不问一切地接受得到的信息,成为容易上当受骗的天真幼稚之人。这两种教育方式,高下立判。

    -

    如果你认为我在对我的“美国主子”表忠心,那你就错了。请不要忘记 GRE 是研究生水平的考试。在研究生考试考如此水平的思辨,还是太晚了。不然的话美国也不会有如此大数量的疫苗反对者 (anti-vaxxer) 或者地平说支持者 (flat earther)。我认为基本的思辨能力应该放在基础教育阶段。那样至少可以减少一些所谓保健品的诈骗案的数量。

    +

    如果你认为我在对我的“美国主子”表忠心,那你就错了。请不要忘记 GRE +是研究生水平的考试。在研究生考试考如此水平的思辨,还是太晚了。不然的话美国也不会有如此大数量的疫苗反对者 +(anti-vaxxer) 或者地平说支持者 (flat +earther)。我认为基本的思辨能力应该放在基础教育阶段。那样至少可以减少一些所谓保健品的诈骗案的数量。

    阁下看到这里,心里的感觉若是“哇这人他写了些什么我怎么什么都看不懂”,那确实怪不得阁下。表达能力低下大概是我另一个略微后悔高中从不写作文的地方。这种表达能力的低下,是跨越语言的——可能有人读到我的英文博客文章,感觉还相对通顺,但并不知道背后是经过我自己好多遍审阅改写才成为最终版本的。很多时候脑中根本无法组织用来描述我的想法的语言,这时才后悔年轻的时候没有练习写作;但一想到当时练习写作就意味要着写违心的或者毫无营养文字,这种后悔就直接烟消云散了。



    diff --git a/blog/post/2015-10-29.html b/blog/post/2015-10-29.html index f6dd0a5..34ac28b 100644 --- a/blog/post/2015-10-29.html +++ b/blog/post/2015-10-29.html @@ -1,9 +1,10 @@ - + Chrisoft::Blog + @@ -30,42 +31,9 @@ function ol() else unsetevents(); } window.onresize(); + loadTheme(); _decryptonload(); } -function loadTheme(){ - var thm=document.cookie.replace(new RegExp("(?:(?:^|.*;\\s*)thm\\s*\\=\\s*([^;]*).*$)|^.*$"),"$1"); - if(thm.length<2||'0123z'.indexOf(thm[0])==-1||'abz'.indexOf(thm[1])==-1)thm='zz'; - var ent=""; - var d=new Date(); - if(thm[0]=='z') - { - var m=d.getMonth()+1; - if(m>=3&&m<6)thm='0'+thm[1]; - else if(m>=6&&m<9)thm='1'+thm[1]; - else if(m>=9&&m<12)thm='2'+thm[1]; - else thm='3'+thm[1]; - } - if(thm[1]=='z') - {if(d.getHours()>=18||d.getHours()<6)thm=thm[0]+'b';else thm=thm[0]+'a';} - ent=`theme${thm}`; - var R=new RegExp('theme[0-4][ab]'); - for(var i=0;i @@ -83,7 +51,7 @@ loadTheme();
    -
  • Prev post
  • +
  • Prev post
  • Next post
  • diff --git a/blog/post/2015-10-30.html b/blog/post/2015-10-30.html index 8329511..14db966 100644 --- a/blog/post/2015-10-30.html +++ b/blog/post/2015-10-30.html @@ -1,9 +1,10 @@ - + Chrisoft::Blog + @@ -30,42 +31,9 @@ function ol() else unsetevents(); } window.onresize(); + loadTheme(); _decryptonload(); } -function loadTheme(){ - var thm=document.cookie.replace(new RegExp("(?:(?:^|.*;\\s*)thm\\s*\\=\\s*([^;]*).*$)|^.*$"),"$1"); - if(thm.length<2||'0123z'.indexOf(thm[0])==-1||'abz'.indexOf(thm[1])==-1)thm='zz'; - var ent=""; - var d=new Date(); - if(thm[0]=='z') - { - var m=d.getMonth()+1; - if(m>=3&&m<6)thm='0'+thm[1]; - else if(m>=6&&m<9)thm='1'+thm[1]; - else if(m>=9&&m<12)thm='2'+thm[1]; - else thm='3'+thm[1]; - } - if(thm[1]=='z') - {if(d.getHours()>=18||d.getHours()<6)thm=thm[0]+'b';else thm=thm[0]+'a';} - ent=`theme${thm}`; - var R=new RegExp('theme[0-4][ab]'); - for(var i=0;i diff --git a/blog/post/2015-10-31.html b/blog/post/2015-10-31.html index 0615a80..09fc138 100644 --- a/blog/post/2015-10-31.html +++ b/blog/post/2015-10-31.html @@ -1,9 +1,10 @@ - + Chrisoft::Blog + @@ -30,42 +31,9 @@ function ol() else unsetevents(); } window.onresize(); + loadTheme(); _decryptonload(); } -function loadTheme(){ - var thm=document.cookie.replace(new RegExp("(?:(?:^|.*;\\s*)thm\\s*\\=\\s*([^;]*).*$)|^.*$"),"$1"); - if(thm.length<2||'0123z'.indexOf(thm[0])==-1||'abz'.indexOf(thm[1])==-1)thm='zz'; - var ent=""; - var d=new Date(); - if(thm[0]=='z') - { - var m=d.getMonth()+1; - if(m>=3&&m<6)thm='0'+thm[1]; - else if(m>=6&&m<9)thm='1'+thm[1]; - else if(m>=9&&m<12)thm='2'+thm[1]; - else thm='3'+thm[1]; - } - if(thm[1]=='z') - {if(d.getHours()>=18||d.getHours()<6)thm=thm[0]+'b';else thm=thm[0]+'a';} - ent=`theme${thm}`; - var R=new RegExp('theme[0-4][ab]'); - for(var i=0;i diff --git a/blog/post/2015-11-01.html b/blog/post/2015-11-01.html index e697372..f0f7f08 100644 --- a/blog/post/2015-11-01.html +++ b/blog/post/2015-11-01.html @@ -1,9 +1,10 @@ - + Chrisoft::Blog + @@ -30,42 +31,9 @@ function ol() else unsetevents(); } window.onresize(); + loadTheme(); _decryptonload(); } -function loadTheme(){ - var thm=document.cookie.replace(new RegExp("(?:(?:^|.*;\\s*)thm\\s*\\=\\s*([^;]*).*$)|^.*$"),"$1"); - if(thm.length<2||'0123z'.indexOf(thm[0])==-1||'abz'.indexOf(thm[1])==-1)thm='zz'; - var ent=""; - var d=new Date(); - if(thm[0]=='z') - { - var m=d.getMonth()+1; - if(m>=3&&m<6)thm='0'+thm[1]; - else if(m>=6&&m<9)thm='1'+thm[1]; - else if(m>=9&&m<12)thm='2'+thm[1]; - else thm='3'+thm[1]; - } - if(thm[1]=='z') - {if(d.getHours()>=18||d.getHours()<6)thm=thm[0]+'b';else thm=thm[0]+'a';} - ent=`theme${thm}`; - var R=new RegExp('theme[0-4][ab]'); - for(var i=0;i diff --git a/blog/post/2015-11-22.html b/blog/post/2015-11-22.html index 5968642..ab9d44b 100644 --- a/blog/post/2015-11-22.html +++ b/blog/post/2015-11-22.html @@ -1,9 +1,10 @@ - + Chrisoft::Blog + @@ -30,42 +31,9 @@ function ol() else unsetevents(); } window.onresize(); + loadTheme(); _decryptonload(); } -function loadTheme(){ - var thm=document.cookie.replace(new RegExp("(?:(?:^|.*;\\s*)thm\\s*\\=\\s*([^;]*).*$)|^.*$"),"$1"); - if(thm.length<2||'0123z'.indexOf(thm[0])==-1||'abz'.indexOf(thm[1])==-1)thm='zz'; - var ent=""; - var d=new Date(); - if(thm[0]=='z') - { - var m=d.getMonth()+1; - if(m>=3&&m<6)thm='0'+thm[1]; - else if(m>=6&&m<9)thm='1'+thm[1]; - else if(m>=9&&m<12)thm='2'+thm[1]; - else thm='3'+thm[1]; - } - if(thm[1]=='z') - {if(d.getHours()>=18||d.getHours()<6)thm=thm[0]+'b';else thm=thm[0]+'a';} - ent=`theme${thm}`; - var R=new RegExp('theme[0-4][ab]'); - for(var i=0;i diff --git a/blog/post/2015-12-20.html b/blog/post/2015-12-20.html index 840373e..57b2c02 100644 --- a/blog/post/2015-12-20.html +++ b/blog/post/2015-12-20.html @@ -1,9 +1,10 @@ - + Chrisoft::Blog + @@ -30,42 +31,9 @@ function ol() else unsetevents(); } window.onresize(); + loadTheme(); _decryptonload(); } -function loadTheme(){ - var thm=document.cookie.replace(new RegExp("(?:(?:^|.*;\\s*)thm\\s*\\=\\s*([^;]*).*$)|^.*$"),"$1"); - if(thm.length<2||'0123z'.indexOf(thm[0])==-1||'abz'.indexOf(thm[1])==-1)thm='zz'; - var ent=""; - var d=new Date(); - if(thm[0]=='z') - { - var m=d.getMonth()+1; - if(m>=3&&m<6)thm='0'+thm[1]; - else if(m>=6&&m<9)thm='1'+thm[1]; - else if(m>=9&&m<12)thm='2'+thm[1]; - else thm='3'+thm[1]; - } - if(thm[1]=='z') - {if(d.getHours()>=18||d.getHours()<6)thm=thm[0]+'b';else thm=thm[0]+'a';} - ent=`theme${thm}`; - var R=new RegExp('theme[0-4][ab]'); - for(var i=0;i diff --git a/blog/post/2015-12-23.html b/blog/post/2015-12-23.html index 5f5b374..e34d3d2 100644 --- a/blog/post/2015-12-23.html +++ b/blog/post/2015-12-23.html @@ -1,9 +1,10 @@ - + Chrisoft::Blog + @@ -30,42 +31,9 @@ function ol() else unsetevents(); } window.onresize(); + loadTheme(); _decryptonload(); } -function loadTheme(){ - var thm=document.cookie.replace(new RegExp("(?:(?:^|.*;\\s*)thm\\s*\\=\\s*([^;]*).*$)|^.*$"),"$1"); - if(thm.length<2||'0123z'.indexOf(thm[0])==-1||'abz'.indexOf(thm[1])==-1)thm='zz'; - var ent=""; - var d=new Date(); - if(thm[0]=='z') - { - var m=d.getMonth()+1; - if(m>=3&&m<6)thm='0'+thm[1]; - else if(m>=6&&m<9)thm='1'+thm[1]; - else if(m>=9&&m<12)thm='2'+thm[1]; - else thm='3'+thm[1]; - } - if(thm[1]=='z') - {if(d.getHours()>=18||d.getHours()<6)thm=thm[0]+'b';else thm=thm[0]+'a';} - ent=`theme${thm}`; - var R=new RegExp('theme[0-4][ab]'); - for(var i=0;i diff --git a/blog/post/2015-12-27.html b/blog/post/2015-12-27.html index e0f7515..6126cec 100644 --- a/blog/post/2015-12-27.html +++ b/blog/post/2015-12-27.html @@ -1,9 +1,10 @@ - + Chrisoft::Blog + @@ -30,42 +31,9 @@ function ol() else unsetevents(); } window.onresize(); + loadTheme(); _decryptonload(); } -function loadTheme(){ - var thm=document.cookie.replace(new RegExp("(?:(?:^|.*;\\s*)thm\\s*\\=\\s*([^;]*).*$)|^.*$"),"$1"); - if(thm.length<2||'0123z'.indexOf(thm[0])==-1||'abz'.indexOf(thm[1])==-1)thm='zz'; - var ent=""; - var d=new Date(); - if(thm[0]=='z') - { - var m=d.getMonth()+1; - if(m>=3&&m<6)thm='0'+thm[1]; - else if(m>=6&&m<9)thm='1'+thm[1]; - else if(m>=9&&m<12)thm='2'+thm[1]; - else thm='3'+thm[1]; - } - if(thm[1]=='z') - {if(d.getHours()>=18||d.getHours()<6)thm=thm[0]+'b';else thm=thm[0]+'a';} - ent=`theme${thm}`; - var R=new RegExp('theme[0-4][ab]'); - for(var i=0;i diff --git a/blog/post/2016-01-03.html b/blog/post/2016-01-03.html index b60e695..191069c 100644 --- a/blog/post/2016-01-03.html +++ b/blog/post/2016-01-03.html @@ -1,9 +1,10 @@ - + Chrisoft::Blog + @@ -30,42 +31,9 @@ function ol() else unsetevents(); } window.onresize(); + loadTheme(); _decryptonload(); } -function loadTheme(){ - var thm=document.cookie.replace(new RegExp("(?:(?:^|.*;\\s*)thm\\s*\\=\\s*([^;]*).*$)|^.*$"),"$1"); - if(thm.length<2||'0123z'.indexOf(thm[0])==-1||'abz'.indexOf(thm[1])==-1)thm='zz'; - var ent=""; - var d=new Date(); - if(thm[0]=='z') - { - var m=d.getMonth()+1; - if(m>=3&&m<6)thm='0'+thm[1]; - else if(m>=6&&m<9)thm='1'+thm[1]; - else if(m>=9&&m<12)thm='2'+thm[1]; - else thm='3'+thm[1]; - } - if(thm[1]=='z') - {if(d.getHours()>=18||d.getHours()<6)thm=thm[0]+'b';else thm=thm[0]+'a';} - ent=`theme${thm}`; - var R=new RegExp('theme[0-4][ab]'); - for(var i=0;i diff --git a/blog/post/2016-01-16.html b/blog/post/2016-01-16.html index 81d740e..e6c945f 100644 --- a/blog/post/2016-01-16.html +++ b/blog/post/2016-01-16.html @@ -1,9 +1,10 @@ - + Chrisoft::Blog + @@ -30,42 +31,9 @@ function ol() else unsetevents(); } window.onresize(); + loadTheme(); _decryptonload(); } -function loadTheme(){ - var thm=document.cookie.replace(new RegExp("(?:(?:^|.*;\\s*)thm\\s*\\=\\s*([^;]*).*$)|^.*$"),"$1"); - if(thm.length<2||'0123z'.indexOf(thm[0])==-1||'abz'.indexOf(thm[1])==-1)thm='zz'; - var ent=""; - var d=new Date(); - if(thm[0]=='z') - { - var m=d.getMonth()+1; - if(m>=3&&m<6)thm='0'+thm[1]; - else if(m>=6&&m<9)thm='1'+thm[1]; - else if(m>=9&&m<12)thm='2'+thm[1]; - else thm='3'+thm[1]; - } - if(thm[1]=='z') - {if(d.getHours()>=18||d.getHours()<6)thm=thm[0]+'b';else thm=thm[0]+'a';} - ent=`theme${thm}`; - var R=new RegExp('theme[0-4][ab]'); - for(var i=0;i diff --git a/blog/post/2016-01-25.html b/blog/post/2016-01-25.html index c1d2542..c311c37 100644 --- a/blog/post/2016-01-25.html +++ b/blog/post/2016-01-25.html @@ -1,9 +1,10 @@ - + Chrisoft::Blog + @@ -30,42 +31,9 @@ function ol() else unsetevents(); } window.onresize(); + loadTheme(); _decryptonload(); } -function loadTheme(){ - var thm=document.cookie.replace(new RegExp("(?:(?:^|.*;\\s*)thm\\s*\\=\\s*([^;]*).*$)|^.*$"),"$1"); - if(thm.length<2||'0123z'.indexOf(thm[0])==-1||'abz'.indexOf(thm[1])==-1)thm='zz'; - var ent=""; - var d=new Date(); - if(thm[0]=='z') - { - var m=d.getMonth()+1; - if(m>=3&&m<6)thm='0'+thm[1]; - else if(m>=6&&m<9)thm='1'+thm[1]; - else if(m>=9&&m<12)thm='2'+thm[1]; - else thm='3'+thm[1]; - } - if(thm[1]=='z') - {if(d.getHours()>=18||d.getHours()<6)thm=thm[0]+'b';else thm=thm[0]+'a';} - ent=`theme${thm}`; - var R=new RegExp('theme[0-4][ab]'); - for(var i=0;i diff --git a/blog/post/2016-02-14.html b/blog/post/2016-02-14.html index b47d4f1..b673fe5 100644 --- a/blog/post/2016-02-14.html +++ b/blog/post/2016-02-14.html @@ -1,9 +1,10 @@ - + Chrisoft::Blog + @@ -30,42 +31,9 @@ function ol() else unsetevents(); } window.onresize(); + loadTheme(); _decryptonload(); } -function loadTheme(){ - var thm=document.cookie.replace(new RegExp("(?:(?:^|.*;\\s*)thm\\s*\\=\\s*([^;]*).*$)|^.*$"),"$1"); - if(thm.length<2||'0123z'.indexOf(thm[0])==-1||'abz'.indexOf(thm[1])==-1)thm='zz'; - var ent=""; - var d=new Date(); - if(thm[0]=='z') - { - var m=d.getMonth()+1; - if(m>=3&&m<6)thm='0'+thm[1]; - else if(m>=6&&m<9)thm='1'+thm[1]; - else if(m>=9&&m<12)thm='2'+thm[1]; - else thm='3'+thm[1]; - } - if(thm[1]=='z') - {if(d.getHours()>=18||d.getHours()<6)thm=thm[0]+'b';else thm=thm[0]+'a';} - ent=`theme${thm}`; - var R=new RegExp('theme[0-4][ab]'); - for(var i=0;i diff --git a/blog/post/2016-02-18.html b/blog/post/2016-02-18.html index 5d4f155..8cad5b8 100644 --- a/blog/post/2016-02-18.html +++ b/blog/post/2016-02-18.html @@ -1,9 +1,10 @@ - + Chrisoft::Blog + @@ -30,42 +31,9 @@ function ol() else unsetevents(); } window.onresize(); + loadTheme(); _decryptonload(); } -function loadTheme(){ - var thm=document.cookie.replace(new RegExp("(?:(?:^|.*;\\s*)thm\\s*\\=\\s*([^;]*).*$)|^.*$"),"$1"); - if(thm.length<2||'0123z'.indexOf(thm[0])==-1||'abz'.indexOf(thm[1])==-1)thm='zz'; - var ent=""; - var d=new Date(); - if(thm[0]=='z') - { - var m=d.getMonth()+1; - if(m>=3&&m<6)thm='0'+thm[1]; - else if(m>=6&&m<9)thm='1'+thm[1]; - else if(m>=9&&m<12)thm='2'+thm[1]; - else thm='3'+thm[1]; - } - if(thm[1]=='z') - {if(d.getHours()>=18||d.getHours()<6)thm=thm[0]+'b';else thm=thm[0]+'a';} - ent=`theme${thm}`; - var R=new RegExp('theme[0-4][ab]'); - for(var i=0;i diff --git a/blog/post/2016-03-26.html b/blog/post/2016-03-26.html index 20be317..9216327 100644 --- a/blog/post/2016-03-26.html +++ b/blog/post/2016-03-26.html @@ -1,9 +1,10 @@ - + Chrisoft::Blog + @@ -30,42 +31,9 @@ function ol() else unsetevents(); } window.onresize(); + loadTheme(); _decryptonload(); } -function loadTheme(){ - var thm=document.cookie.replace(new RegExp("(?:(?:^|.*;\\s*)thm\\s*\\=\\s*([^;]*).*$)|^.*$"),"$1"); - if(thm.length<2||'0123z'.indexOf(thm[0])==-1||'abz'.indexOf(thm[1])==-1)thm='zz'; - var ent=""; - var d=new Date(); - if(thm[0]=='z') - { - var m=d.getMonth()+1; - if(m>=3&&m<6)thm='0'+thm[1]; - else if(m>=6&&m<9)thm='1'+thm[1]; - else if(m>=9&&m<12)thm='2'+thm[1]; - else thm='3'+thm[1]; - } - if(thm[1]=='z') - {if(d.getHours()>=18||d.getHours()<6)thm=thm[0]+'b';else thm=thm[0]+'a';} - ent=`theme${thm}`; - var R=new RegExp('theme[0-4][ab]'); - for(var i=0;i diff --git a/blog/post/2016-04-09.html b/blog/post/2016-04-09.html index 56d4aea..9cda65b 100644 --- a/blog/post/2016-04-09.html +++ b/blog/post/2016-04-09.html @@ -1,9 +1,10 @@ - + Chrisoft::Blog + @@ -30,44 +31,15 @@ function ol() else unsetevents(); } window.onresize(); + loadTheme(); _decryptonload(); } -function loadTheme(){ - var thm=document.cookie.replace(new RegExp("(?:(?:^|.*;\\s*)thm\\s*\\=\\s*([^;]*).*$)|^.*$"),"$1"); - if(thm.length<2||'0123z'.indexOf(thm[0])==-1||'abz'.indexOf(thm[1])==-1)thm='zz'; - var ent=""; - var d=new Date(); - if(thm[0]=='z') - { - var m=d.getMonth()+1; - if(m>=3&&m<6)thm='0'+thm[1]; - else if(m>=6&&m<9)thm='1'+thm[1]; - else if(m>=9&&m<12)thm='2'+thm[1]; - else thm='3'+thm[1]; - } - if(thm[1]=='z') - {if(d.getHours()>=18||d.getHours()<6)thm=thm[0]+'b';else thm=thm[0]+'a';} - ent=`theme${thm}`; - var R=new RegExp('theme[0-4][ab]'); - for(var i=0;i - +
      @@ -92,9 +64,7 @@ loadTheme();
      2016-04-09
      #devel #qmidiplayer #midi

      - +

      Abstract

      @@ -107,9 +77,7 @@ For the Chinese version, please visit <Chinese version link here>.

      Contents [hide]
      - +
      • 1 Data Representations
          diff --git a/blog/post/2016-05-12.html b/blog/post/2016-05-12.html index b2c9640..7c935ae 100644 --- a/blog/post/2016-05-12.html +++ b/blog/post/2016-05-12.html @@ -1,9 +1,10 @@ - + Chrisoft::Blog + @@ -30,42 +31,9 @@ function ol() else unsetevents(); } window.onresize(); + loadTheme(); _decryptonload(); } -function loadTheme(){ - var thm=document.cookie.replace(new RegExp("(?:(?:^|.*;\\s*)thm\\s*\\=\\s*([^;]*).*$)|^.*$"),"$1"); - if(thm.length<2||'0123z'.indexOf(thm[0])==-1||'abz'.indexOf(thm[1])==-1)thm='zz'; - var ent=""; - var d=new Date(); - if(thm[0]=='z') - { - var m=d.getMonth()+1; - if(m>=3&&m<6)thm='0'+thm[1]; - else if(m>=6&&m<9)thm='1'+thm[1]; - else if(m>=9&&m<12)thm='2'+thm[1]; - else thm='3'+thm[1]; - } - if(thm[1]=='z') - {if(d.getHours()>=18||d.getHours()<6)thm=thm[0]+'b';else thm=thm[0]+'a';} - ent=`theme${thm}`; - var R=new RegExp('theme[0-4][ab]'); - for(var i=0;i diff --git a/blog/post/2016-06-21.html b/blog/post/2016-06-21.html index b3fea73..b8fbed3 100644 --- a/blog/post/2016-06-21.html +++ b/blog/post/2016-06-21.html @@ -1,9 +1,10 @@ - + Chrisoft::Blog + @@ -30,44 +31,13 @@ function ol() else unsetevents(); } window.onresize(); + loadTheme(); _decryptonload(); } -function loadTheme(){ - var thm=document.cookie.replace(new RegExp("(?:(?:^|.*;\\s*)thm\\s*\\=\\s*([^;]*).*$)|^.*$"),"$1"); - if(thm.length<2||'0123z'.indexOf(thm[0])==-1||'abz'.indexOf(thm[1])==-1)thm='zz'; - var ent=""; - var d=new Date(); - if(thm[0]=='z') - { - var m=d.getMonth()+1; - if(m>=3&&m<6)thm='0'+thm[1]; - else if(m>=6&&m<9)thm='1'+thm[1]; - else if(m>=9&&m<12)thm='2'+thm[1]; - else thm='3'+thm[1]; - } - if(thm[1]=='z') - {if(d.getHours()>=18||d.getHours()<6)thm=thm[0]+'b';else thm=thm[0]+'a';} - ent=`theme${thm}`; - var R=new RegExp('theme[0-4][ab]'); - for(var i=0;i - +
            @@ -162,9 +132,7 @@ Most posts are in Chinese...
      - +

      课程相关

      这个学期在我以为它还没开始多久的时候就要结束了。于是现在我来随便看看这学期都学了些什么…… @@ -493,7 +461,7 @@ SMELT其实最初是作为给BLR3用的一个hge的替代品出现的。也算

      神秘组织「BKT」

      [27] -
      This section is encrypted. Click here +
      This section is encrypted. Click here to decrypt.
      一些额外的话 [28] @@ -532,7 +500,7 @@ to decrypt.
    -
  • Prev post
  • -
  • Next post
  • +
  • Prev post
  • +
  • Next post
  • No, I'm not dead

    2021-06-03
    #garbage

    -

    No I’m not dead. Sure this blog has been snubbed for quite a while now, and I just marked 5 old unfinished posts (from 2019 all the way to 2021) as WIP so that they do not appear here. Just not feeling finishing them up (or writing anything) right now.

    +

    No I’m not dead. Sure this blog has been snubbed for quite a while +now, and I just marked 5 old unfinished posts (from 2019 all the way to +2021) as WIP so that they do not appear here. Just not feeling finishing +them up (or writing anything) right now.

    Quick status update

    -

    I’m doing random, stupid researches – as an average computer scientist wannabe. Also I’m learning Latin. Nondum possum loqui. (or write, for that matter – sudden code-switching)

    +

    I’m doing random, stupid researches – as an average computer +scientist wannabe. Also I’m learning Latin. Nondum possum loqui. (or +write, for that matter – sudden code-switching)

    What have I done

      -
    • My first Minecraft mod (server only, and unrelated to gameplay – so probably uninteresting to anyone but server maintainers)
    • -
    • A few fluidsynth commits
    • -
    • Trying to extract stuff from my SD-80 (and failing no-so-spectacularly)
    • +
    • My first +Minecraft mod (server only, and unrelated to gameplay – so probably +uninteresting to anyone but server maintainers)
    • +
    • A +few fluidsynth commits
    • +
    • Trying to extract stuff from my SD-80 (and failing +no-so-spectacularly)
    • Messing on a shitty block game server called 2b2t
    • Writing a skyblock datapack, and playing it
    • -
    • Random researches in various CS fields until I could settle somewhere firmly
    • +
    • Random researches in various CS fields until I could settle +somewhere firmly
    • Falling into the functional programming cult
    -

    When are the unfinished posts gonna be finished?

    -

    I don’t know. I reckon that would be somewhere in <redacted>.

    +

    When are the +unfinished posts gonna be finished?

    +

    I don’t know. I reckon that would be somewhere in +<redacted>.



    diff --git a/blog/post/2021-10-10.html b/blog/post/2021-10-10.html index 9b31d8c..a93caf3 100644 --- a/blog/post/2021-10-10.html +++ b/blog/post/2021-10-10.html @@ -49,10 +49,11 @@ function ol()
  • Table of Contents +
  • The Encounter
  • The Module
  • The Setup
  • The Sounds
  • The Editability
  • The Manual
  • The Insides
  • The Secrets
  • The Conclusion
  • The … Death?
  • Prev post
  • -
  • Next post
  • +
  • Next post
  • @@ -118,39 +119,88 @@ for(let x of al) });
    -

    I was intrigued by the insides of EDIROL’s SD-20. How on earth did Roland squeeze half of SD-80’s content in to a package that’s smaller than SD-80’s main board? Turns out it was by crippling the product…

    +

    I was intrigued by the insides of EDIROL’s SD-20. How on earth did +Roland squeeze half of SD-80’s content in to a package that’s smaller +than SD-80’s main board? Turns out it was by crippling the product…

    The Encounter

    -

    I didn’t get my SD-20 for $50 as promised in my SD-80 article. The lowest price I found when I started watching for spares again was $75. It stayed there for over half a year. But just weeks before I got into the States, it was gone. All the rest of the listings asked for ridiculous prices ranging from $150 to $250. There’s no way I will pay over $100 for a SD-20. So I waited and waited…

    -

    Until one day a new listing popped up. It was exactly $100 (with free shipping). “Well,” I thought, “this is it.” It accepts best offer, but nobody else offered to buy it until the listing ended. That’s the bizarre story of me getting my SD-20 at my max acceptable price…

    +

    I didn’t get my SD-20 for $50 as promised in my SD-80 article. The +lowest price I found when I started watching for spares again was $75. +It stayed there for over half a year. But just weeks before I got into +the States, it was gone. All the rest of the listings asked for +ridiculous prices ranging from $150 to $250. There’s no way I will pay +over $100 for a SD-20. So I waited and waited…

    +

    Until one day a new listing popped up. It was exactly $100 (with free +shipping). “Well,” I thought, “this is it.” It accepts best offer, but +nobody else offered to buy it until the listing ended. That’s the +bizarre story of me getting my SD-20 at my max acceptable price…

    The Module

    -

    I felt the cheapness inside instantly when I picked up the package: the SD-20 (with the included, somewhat dodgy aftermarket power adapter) weights absolutely nothing! It’s even lighter than the ThinkPad mouse I occasionally use. That doesn’t inspire much faith on its insides.

    -

    The exterior of the module is made of plastic exclusively. No metal whatsoever (except on the connectors). SD-80’s metal front cover weights more than this entire thing…

    -

    Flipping the module around reveals the dreaded three word phrase: “Made in China”. I wonder how many products that are never available in China at all are assembled in China.

    -

    There’s only one button and one knob on the front panel of the SD-20. This is even more cut down than the SC-8820, which also has only one button and one knob, but the volume knob doubles as a preview button.

    -

    Roland clearly made SD-20 the intended successor of SC-8820. Just look at the pictures in the manuals. They have nearly identical form factors. Let’s see how their sounds will compare.

    -

    The choice of ports is kind of weird on the SD-20. It’s almost identical to the ports on the back of the SC-8820, except the audio input being replaced by a 3.5mm combo jack, addition of an optical S/PDIF TOSLINK port, and omission of the DIN MIDI out port. The serial port (mini DIN 8-pin) featured on all older SC models made its only reappearance in the SD series. Despite having an audio input port, the SD-20, just like its predecessors in the SC family, doesn’t have any digital audio interface functionality. The audio input is merely passed through to the analog output.

    +

    I felt the cheapness inside instantly when I picked up the package: +the SD-20 (with the included, somewhat dodgy aftermarket power adapter) +weights absolutely nothing! It’s even lighter than the ThinkPad mouse I +occasionally use. That doesn’t inspire much faith on its insides.

    +

    The exterior of the module is made of plastic exclusively. No metal +whatsoever (except on the connectors). SD-80’s metal front cover weights +more than this entire thing…

    +

    Flipping the module around reveals the dreaded three word phrase: +“Made in China”. I wonder how many products that are never available in +China at all are assembled in China.

    +

    There’s only one button and one knob on the front panel of the SD-20. +This is even more cut down than the SC-8820, which also has only one +button and one knob, but the volume knob doubles as a preview +button.

    +

    Roland clearly made SD-20 the intended successor of SC-8820. Just +look at the pictures in the manuals. They have nearly identical form +factors. Let’s see how their sounds will compare.

    +

    The choice of ports is kind of weird on the SD-20. It’s almost +identical to the ports on the back of the SC-8820, except the audio +input being replaced by a 3.5mm combo jack, addition of an optical +S/PDIF TOSLINK port, and omission of the DIN MIDI out port. The serial +port (mini DIN 8-pin) featured on all older SC models made its only +reappearance in the SD series. Despite having an audio input port, the +SD-20, just like its predecessors in the SC family, doesn’t have any +digital audio interface functionality. The audio input is merely passed +through to the analog output.

    -
    SD-20 on top of the SD-80 +
    SD-20 on top of +the SD-80
    -
    Bottom with serial number censored +
    Bottom with +serial number censored

    The Setup

    -

    Like the SD-80, Roland has discontinued driver support for the SD-20. The SD-20 will not even appear powered on if you choose to power the unit through USB bus power and have no driver installed. The same trick to make SD-80’s driver work on Windows 10 also works for the SD-20. You can search the Internet for the trick, or check out my first post on the SD-80 for the directions.

    -

    The module works out of the box on Linux as long as you have proper kernel support (that is, you shouldn’t have to worry about this unless you build the kernel yourself). Required kernel modules are identical to those of the SD-80.

    -

    The use of RCA jacks for analog audio output means that I don’t have the suitable cable to connect them to my audio interfaces at the moment. Fortunately I can still make digital recordings thanks to the inclusion of the S/PDIF output. The digital signal has a sample rate of 44100 Hz, the same as SD-80.

    +

    Like the SD-80, Roland has discontinued driver support for the SD-20. +The SD-20 will not even appear powered on if you choose to power the +unit through USB bus power and have no driver installed. The same trick +to make SD-80’s driver work on Windows 10 also works for the SD-20. You +can search the Internet for the trick, or check out my first post on the +SD-80 for the directions.

    +

    The module works out of the box on Linux as long as you have proper +kernel support (that is, you shouldn’t have to worry about this unless +you build the kernel yourself). Required kernel modules are identical to +those of the SD-80.

    +

    The use of RCA jacks for analog audio output means that I don’t have +the suitable cable to connect them to my audio interfaces at the moment. +Fortunately I can still make digital recordings thanks to the inclusion +of the S/PDIF output. The digital signal has a sample rate of 44100 Hz, +the same as SD-80.

    The Sounds

    -

    (Unless otherwise stated, all hardware demos in this section are recorded through the digital S/PDIF interface with EDIROL UA-25. All files are level normalized to -1 dB. Excerpts are not normalized after being extracted from the normalized original.)

    +

    (Unless otherwise stated, all hardware demos in this section are +recorded through the digital S/PDIF interface with EDIROL UA-25. All +files are level normalized to -1 dB. Excerpts are not normalized after +being extracted from the normalized original.)

    It’s the same StudioCanvas sound, but …

    -

    With a few exceptions, preset instruments shared by the SD-20 and the SD-80 sound roughly identical. However, note the different mix levels on each model.

    +

    With a few exceptions, preset instruments shared by the SD-20 and the +SD-80 sound roughly identical. However, note the different mix levels on +each model.

    @@ -181,12 +231,15 @@ SD-80
    -Excerpt from AMEDLEY.MID by Earl Gray Fowler from Voyetra Technologies, arranged for SD-80 (Native Mode) +Excerpt from AMEDLEY.MID by Earl Gray Fowler from Voyetra Technologies, +arranged for SD-80 (Native Mode)
    -

    However significant differences show up as soon as you start tuning any non-GM1 controls (this includes new controls defined by GM2, e.g. cc 74).

    +

    However significant differences show up as soon as you start tuning +any non-GM1 controls (this includes new controls defined by GM2, e.g. cc +74).

    @@ -223,7 +276,25 @@ Excerpt from th06_13.mid

    Note the very different filter characteristics on the piano.

    -

    What make this module nearly unusable is its 64 voices polyphony. Roland has been using this “voice” concept for polyphony since the very beginning of their PCM based synths. An instrument can have up to four “layers” (or “WGs”, wave generators in Roland’s terms) in these Roland PCM synthesizers. Each layer can consist of up to two channels (for stereo samples). Each one of these channels takes up a “voice” when played. The contemporary set and solo set of the StudioCanvas make heavy use of layering, as well as stereo samples. Some of these patches casually use up to 4 voices per note, with a (theoretical) maximum of 8. Unlike the SC-8850 vs SC-8820, when Roland stripped down the polyphony of the SD-20, they did not create simplified patches that use fewer voices like they did for the SC-8820. This immediately brings down the actual note polyphony of the SD-20 down to the same (or even lower) level of SC-55, and is no where near usable. Hence in terms of polyphony, the SD-20 is a downgrade compared to its predecessor SC-8820: Even you have Roland’s (then) latest studio sounds inside a tiny box, you have to take great precaution while using them, as they deplete your available polyphony very fast. Both tracks below demonstrate how 64 voices is nowhere close to enough for the SD-20.

    +

    What make this module nearly unusable is its 64 voices polyphony. +Roland has been using this “voice” concept for polyphony since the very +beginning of their PCM based synths. An instrument can have up to four +“layers” (or “WGs”, wave generators in Roland’s terms) in these Roland +PCM synthesizers. Each layer can consist of up to two channels (for +stereo samples). Each one of these channels takes up a “voice” when +played. The contemporary set and solo set of the StudioCanvas make heavy +use of layering, as well as stereo samples. Some of these patches +casually use up to 4 voices per note, with a (theoretical) maximum of 8. +Unlike the SC-8850 vs SC-8820, when Roland stripped down the polyphony +of the SD-20, they did not create simplified patches that use fewer +voices like they did for the SC-8820. This immediately brings down the +actual note polyphony of the SD-20 down to the same (or even lower) +level of SC-55, and is no where near usable. Hence in terms of +polyphony, the SD-20 is a downgrade compared to its predecessor SC-8820: +Even you have Roland’s (then) latest studio sounds inside a tiny box, +you have to take great precaution while using them, as they deplete your +available polyphony very fast. Both tracks below demonstrate +how 64 voices is nowhere close to enough for the SD-20.

    @@ -254,13 +325,17 @@ SD-80
    -“Crude” replica of Septette for a Dead Princess by ZUN. The original tuning was not replicated. +“Crude” replica of Septette for a Dead Princess by ZUN. The original +tuning was not replicated.
    -

    The SD-20 drops notes like crazy in the final section. The SD-20 MIDI Converter drops percussion notes instead.

    -

    Unlike my SD-80, which sometimes messes up timing a bit and slows down when the load is high, the SD-20 simply cut off existing notes instantly without causing timing errors.

    +

    The SD-20 drops notes like crazy in the final section. The SD-20 MIDI +Converter drops percussion notes instead.

    +

    Unlike my SD-80, which sometimes messes up timing a bit and slows +down when the load is high, the SD-20 simply cut off existing notes +instantly without causing timing errors.

    @@ -296,8 +371,12 @@ SD-80
    -

    Besides the obvious fact that Loose Lips is missing, pay attention to the way the piano notes are cut short. Also note each model has its own filter response for the synth bass.

    -

    Finally, a GM-ish track for comparing vanilla GM2 patches without any tweaking. Reed Romance and SH-2 Lead from the SD special set are used in this adaptation.

    +

    Besides the obvious fact that Loose Lips is missing, pay attention to +the way the piano notes are cut short. Also note each model has its own +filter response for the synth bass.

    +

    Finally, a GM-ish track for comparing vanilla GM2 patches without any +tweaking. Reed Romance and SH-2 Lead from the SD special set are used in +this adaptation.

    @@ -328,57 +407,126 @@ SD-80
    -AMEDLEY.MID by Earl Gray Fowler from Voyetra Technologies, arranged for SD-80 (Native Mode) +AMEDLEY.MID by Earl Gray Fowler from Voyetra Technologies, arranged for +SD-80 (Native Mode)
    -

    Patches in SD-80’s special set are substituted with patches in the solo set when played with the SD-20 Converter. However hardware SD-20 doesn’t do this substitution and doesn’t produce any sound if a patch from SD-80’s special set is selected, making the last two segments sound like a backing track on the SD-20. The choir in the ballad segment also has a notably shorter release on the hardware SD-20, possibly to mitigate the impact of a reduced polyphony.

    -

    The SD-20 MIDI Converter is actually a reasonably good recreation of the SD-20 sounds. That is not saying so much, as the hardware of SD-20 itself is simply not capable of recreate the StudioCanvas sounds very well if the MIDI sequence you feed to it has any complexity to it at all. Sometimes the output from converter is actually closer to the SD-80 than the SD-20, especially if you take parameter response curves into consideration.

    +

    Patches in SD-80’s special set are substituted with patches in the +solo set when played with the SD-20 Converter. However hardware SD-20 +doesn’t do this substitution and doesn’t produce any sound if a patch +from SD-80’s special set is selected, making the last two segments sound +like a backing track on the SD-20. The choir in the ballad segment also +has a notably shorter release on the hardware SD-20, possibly to +mitigate the impact of a reduced polyphony.

    +

    The SD-20 MIDI Converter is actually a reasonably good recreation of +the SD-20 sounds. That is not saying so much, as the hardware of SD-20 +itself is simply not capable of recreate the StudioCanvas sounds very +well if the MIDI sequence you feed to it has any complexity to it at +all. Sometimes the output from converter is actually closer to the SD-80 +than the SD-20, especially if you take parameter response curves into +consideration.

    The Editability

    It’s virtually nothing compared to the SD-80.

    -

    The official SD-20 editor can only tune GM2 parameters. The available parameters are even fewer than the HyperCanvas (HQ-GM2) or TTS-1, mostly because the SD-20 doesn’t expose those parameters at all. As mentioned in my first post on the SD-80, the SD-20 editor is essentially the SD-90 editor with the audio / AFX section removed.

    +

    The official SD-20 editor can only tune GM2 parameters. The available +parameters are even fewer than the HyperCanvas (HQ-GM2) or TTS-1, mostly +because the SD-20 doesn’t expose those parameters at all. As mentioned +in my first post on the SD-80, the SD-20 editor is essentially the SD-90 +editor with the audio / AFX section removed.

    -
    SD-20 editor. SD-90 GM2 editor on the right for comparison. +
    SD-20 +editor. SD-90 GM2 editor on the right for comparison.
    -
    The mixer. It has a very similar layout to the main page of HyperCanvas / TTS-1. +
    The mixer. +It has a very similar layout to the main page of HyperCanvas / TTS-1.
    -
    The instrument editor. Only GM2 parameters are exposed. +
    The +instrument editor. Only GM2 parameters are exposed.
    -
    The instrument picker. The instrument picker of the SD-90 GM2 editor is on the right. +
    The +instrument picker. The instrument picker of the SD-90 GM2 editor is on +the right.
    -

    The SD-80 editor doesn’t work on the SD-20. Nor does the XV-2020 (which uses the same synth engine as the SD-20) editor. This makes the SD-20 far less editable than the SD-80. Forget about manually piecing together presets on the SD-20 to mimic the SD-80. I don’t even know how to change the samples used by a part on the SD-20 or is it even possible (the MIDI implementation doesn’t mention it).

    +

    The SD-80 editor doesn’t work on the SD-20. Nor does the XV-2020 +(which uses the same synth engine as the SD-20) editor. This makes the +SD-20 far less editable than the SD-80. Forget about manually piecing +together presets on the SD-20 to mimic the SD-80. I don’t even know how +to change the samples used by a part on the SD-20 or is it even possible +(the MIDI implementation doesn’t mention it).

    The Quirks

    -

    The address mapping used by SD-20’s DT1 system exclusive messages is similar to that employed by GS-based Sound Canvas models. Therefore the SD-20 is still somewhat editable, but nowhere close to the level offered by the SD-80. GSAE (GS Advanced Editor) may work with the SD-20, but there could be major compatibility issues.

    -

    The SD-20 still responds to GS NRPN messages in native and GM2 mode. SD-90 and SD-80 doesn’t have such behavior.

    -

    SD-20 has a special NRPN for selecting sound sets (MSB: 0x41 LSB: 0x00, send set # to value MSB) in GM2 mode. On the SD-90 and SD-80, only system exclusive messages can be used to select sound sets in GM2 mode. The manual mentioned this feature, however it doesn’t tell you which NRPN to use.

    +

    The address mapping used by SD-20’s DT1 system exclusive messages is +similar to that employed by GS-based Sound Canvas models. Therefore the +SD-20 is still somewhat editable, but nowhere close to the level offered +by the SD-80. GSAE (GS Advanced Editor) may work with the SD-20, but +there could be major compatibility issues.

    +

    The SD-20 still responds to GS NRPN messages in native and GM2 mode. +SD-90 and SD-80 doesn’t have such behavior.

    +

    SD-20 has a special NRPN for selecting sound sets (MSB: +0x41 LSB: 0x00, send set # to value MSB) in +GM2 mode. On the SD-90 and SD-80, only system exclusive messages can be +used to select sound sets in GM2 mode. The manual mentioned this +feature, however it doesn’t tell you which NRPN to use.

    The Manual

    -

    This really doesn’t deserve its own paragraph, but here it is. Unless otherwise noted, this is referring to the English manual, not the Japanese version (which is somewhat better, but still horrible).

    -

    The user manual of Roland products has been criticized for being convoluted, unclear and difficult to navigate through for a long time. The user manual for SD-20 is on a whole new level. It’s an absolute abomination.

    -

    To be fair, it’s not like one can write a lot about a product that only have one button and one knob on the front panel. Someone in Roland must have been forced through this …

    -

    Content wise, it’s an amalgamation of SD-80’s “owner’s manual” and “quick start guide”. This make the entire thing even more confusing. You can find traces of SD-80’s manual everywhere. Just take a look at the huge gaps in the instrument list and drum set list. That sad drum set table even has a missing border. There’s also the sentence that goes something like this “you can’t edit the sounds in GS mode using the front panel” [1], which is copied straight from SD-80’s manual. Well, duh … you can’t do much editing with one button (which instantly erases all changed parameters when pressed) and one knob in any mode!

    -

    Since the SD-20 can only be controlled through MIDI, there would be plenty of information on how to operate the module using MIDI messages in the manual, right? Here Roland took the worst move imaginable and included ZERO information on that in the English manual, not even the system exclusive messages to switch between sound generator modes (the Japanese manual does include this), nor does it include a list of parameters that can be controlled by MIDI. It’s almost like Roland doesn’t want you to learn about the parameters it has at all, unless you read the ultra technical MIDI implementation (which, to make it even better, only has a download for the Japanese version left on the official website. Screw everyone who can’t read Japanese I guess).

    +

    This really doesn’t deserve its own paragraph, but here it is. Unless +otherwise noted, this is referring to the English manual, not the +Japanese version (which is somewhat better, but still horrible).

    +

    The user manual of Roland products has been criticized for being +convoluted, unclear and difficult to navigate through for a long time. +The user manual for SD-20 is on a whole new level. It’s an absolute +abomination.

    +

    To be fair, it’s not like one can write a lot about a product that +only have one button and one knob on the front panel. Someone in Roland +must have been forced through this …

    +

    Content wise, it’s an amalgamation of SD-80’s “owner’s manual” and +“quick start guide”. This make the entire thing even more confusing. You +can find traces of SD-80’s manual everywhere. Just take a look at the +huge gaps in the instrument list and drum set list. That sad drum set +table even has a missing border. There’s also the sentence that goes +something like this “you can’t edit the sounds in GS mode using the +front panel” [1], which is copied +straight from SD-80’s manual. Well, duh … you can’t do much editing with +one button (which instantly erases all changed parameters when pressed) +and one knob in any mode!

    +

    Since the SD-20 can only be controlled through MIDI, there would be +plenty of information on how to operate the module using MIDI messages +in the manual, right? Here Roland took the worst move imaginable and +included ZERO information on that in the English manual, not even the +system exclusive messages to switch between sound generator modes (the +Japanese manual does include this), nor does it include a list of +parameters that can be controlled by MIDI. It’s almost like Roland +doesn’t want you to learn about the parameters it has at all, unless you +read the ultra technical MIDI implementation (which, to make it even +better, only has a download for the Japanese version left on the +official website. Screw everyone who can’t read Japanese I guess).

    The Insides

    -

    I spent $100 on this thing mostly because I’m curious about its insides. After testing it out, I don’t have any hope that there’s a chance this thing could have an XV chip inside. Having no screwdrivers did not hinder me even a little bit. I used the scissors in my nail care kit to remove the only 4 screws in the bottom of the module, and one screw holding the board. The board came out without any resistance.

    +

    I spent $100 on this thing mostly because I’m curious about its +insides. After testing it out, I don’t have any hope that there’s a +chance this thing could have an XV chip inside. Having no screwdrivers +did not hinder me even a little bit. I used the scissors in my nail care +kit to remove the only 4 screws in the bottom of the module, and one +screw holding the board. The board came out without any resistance.

    -
    No ICs on the bottom side of the board. The scissor used to undo the screws is visible. +
    No ICs on +the bottom side of the board. The scissor used to undo the screws is +visible.
    @@ -390,44 +538,100 @@ AMEDLEY.MID by Earl Gray Fowler from Voyetra Technologies, arranged for SD-80 (N
    -Click any IC above for a detailed shot of components around that chip.
    Click here for the whole board shot without the IC markings. +Click any IC above for a detailed shot of components around that +chip.
    +Click +here for the whole board shot without the IC markings.
    -

    No, it isn’t an XV chip. It’s an XP7 (RA0C-003) chip. This chip is also used by the bottom-of-the-barrel model in the XV line-up, the XV-2020. This is likely the final iteration of the codename XP. The CPU is a SH7016, same as SC-8850 and SC-D70. Other major chips include two 4Mbit EDO DRAM chips (one for CPU and one for XP7), a 16Mbit flash memory for system and parameters, and two 128Mbit Wave ROM chips. The part number and mask ID of the wave ROMs are different from those used by the SD-80 (either in the service manual or my particular module), suggesting they may contain different data.

    -

    This is a major let down, sort of speak. The hardware is almost as capable as the XV-2020 (which has a larger CPU RAM and flash memory chip, 16Mbit and 32Mbit respectively). The XP7 is even capable of using 40 types of classical JV/XP insertion effects (MFX), which is not used at all by the SD-20. Maybe the reduced system resources prevented Roland to squeeze the XV-level editability inside.

    -

    The XP7 chip runs much hotter compared to the XV chip in the SD-80. It’s almost too hot to touch when the synthesizer load is high. The XP7 chip in the SD-20 is clock much higher than any previous XP chips (33.868 MHz vs 24.576 MHz) to achieve the 44.1 kHz digital output, which is probably the cause of the excessive heat. For a more detailed technical assessment of the chip (and other Roland PCM synth chips), see my second post on SD-80.

    -

    There are 4 unpopulated switch headers on the board. Two are DPDT switches (SW4 and SW2), two seem to be buttons (SW3 and SW5). SW4 and SW5 seem to be electrically connected to the peripherals of the USB controller, SW2 and SW3 seem to be connected to the CPU. One side of SW4 seems to short the USB power. SW2 resets the unit. SW3 puts the unit into an inoperable state (USB indicator turns off, SPIDF output shuts down, does not respond to any key press / MIDI input). SW2 is weird. One side of the upper pole shorts the power to ground. The same side of the lower pole puts the unit into another inoperable state (just like frozen in place). The other side doesn’t do anything consistent. Sometimes the upper pole acts like a perpetual sustain pedal if engaged (no notes are released even after letting the connection go). All of these switches behave the same in test mode and doesn’t seem to affect boot mode selection.

    +

    No, it isn’t an XV chip. It’s an XP7 (RA0C-003) chip. This chip is +also used by the bottom-of-the-barrel model in the XV line-up, the +XV-2020. This is likely the final iteration of the codename XP. The CPU +is a SH7016, same as SC-8850 and SC-D70. Other major chips include two +4Mbit EDO DRAM chips (one for CPU and one for XP7), a 16Mbit flash +memory for system and parameters, and two 128Mbit Wave ROM chips. The +part number and mask ID of the wave ROMs are different from those used +by the SD-80 (either in the service manual or my particular module), +suggesting they may contain different data.

    +

    This is a major let down, sort of speak. The hardware is almost as +capable as the XV-2020 (which has a larger CPU RAM and flash memory +chip, 16Mbit and 32Mbit respectively). The XP7 is even capable of using +40 types of classical JV/XP insertion effects (MFX), which is not used +at all by the SD-20. Maybe the reduced system resources prevented Roland +to squeeze the XV-level editability inside.

    +

    The XP7 chip runs much hotter compared to the XV chip in the SD-80. +It’s almost too hot to touch when the synthesizer load is high. The XP7 +chip in the SD-20 is clock much higher than any previous XP chips +(33.868 MHz vs 24.576 MHz) to achieve the 44.1 kHz digital output, which +is probably the cause of the excessive heat. For a more detailed +technical assessment of the chip (and other Roland PCM synth chips), see +my +second post on SD-80.

    +

    There are 4 unpopulated switch headers on the board. Two are DPDT +switches (SW4 and SW2), two seem to be buttons (SW3 and SW5). SW4 and +SW5 seem to be electrically connected to the peripherals of the USB +controller, SW2 and SW3 seem to be connected to the CPU. One side of SW4 +seems to short the USB power. SW2 resets the unit. SW3 puts the unit +into an inoperable state (USB indicator turns off, SPIDF output shuts +down, does not respond to any key press / MIDI input). SW2 is weird. One +side of the upper pole shorts the power to ground. The same side of the +lower pole puts the unit into another inoperable state (just like frozen +in place). The other side doesn’t do anything consistent. Sometimes the +upper pole acts like a perpetual sustain pedal if engaged (no notes are +released even after letting the connection go). All of these switches +behave the same in test mode and doesn’t seem to affect boot mode +selection.

    @@ -535,17 +739,20 @@ Click any IC above for a detailed shot of components around that chip.
    - + - + - + @@ -555,13 +762,16 @@ Click any IC above for a detailed shot of components around that chip.
    - + - - + + @@ -570,7 +780,8 @@ Click any IC above for a detailed shot of components around that chip.
    - + @@ -602,13 +813,20 @@ Click any IC above for a detailed shot of components around that chip.

    The Secrets

    -

    It seems dead easy to enter the secret test mode on the SD-20 – there’s only one button. Hold the button and turn the power on, the USB indicator will light up. This is the boot mode selection prompt. Release the button. Now you have around 4 seconds to do one of the following:

    +

    It seems dead easy to enter the secret test mode on the SD-20 – +there’s only one button. Hold the button and turn the power on, the USB +indicator will light up. This is the boot mode selection prompt. Release +the button. Now you have around 4 seconds to do one of the +following:

    • Pressing the button twice. The unit will boot into test mode.
    • -
    • Pressing the button three times. The unit will boot into an unknown mode (likely firmware update).
    • +
    • Pressing the button three times. The unit will boot into an unknown +mode (likely firmware update).
    -

    If your action matches none of these, the unit will boot into normal mode.

    -

    This section will employ the following notation for the status of the indicator LEDs.

    +

    If your action matches none of these, the unit will boot into normal +mode.

    +

    This section will employ the following notation for the status of the +indicator LEDs.

      PWR USB   OUTPUT   o o o o
        o   o      MODE   o o o o
                          GM2 G X
    @@ -617,7 +835,9 @@ o=on
     -=off
     *=faint

    Test mode

    -

    The test mode is far less interesting than that of the SD-80 because I don’t necessarily understand what does every indicators pattern mean.

    +

    The test mode is far less interesting than that of the SD-80 because +I don’t necessarily understand what does every indicators pattern +mean.

      test 1 (some sort of version?)
       PWR USB   OUTPUT   - - - o
    @@ -683,22 +903,33 @@ Mode key pressed = next
     Synthesizer resets again.
     The module no longer respond to any key presses from this point.
    -

    unknown (likely firmware update) mode

    +

    unknown (likely firmware +update) mode

      PWR USB   OUTPUT   o o o o
        o   -      MODE   o o o *
       Doesn't respond to any key presses. (long, short, multiple presses)
       Shows up as a USB device with normal ID (0582:0027).
       Does not function as synthesizer.

    The Conclusion

    -

    For a low, low price of $300 in 2002, you get 3 set of mediocre (with a few exceptions) GM2 patches. The sounds themselves are reasonably new and refreshing back then, but the higher average voice-per-note of the new StudioCanvas sounds make the SD-20 a less desirable choice than previous 64-polyphony models. The lack of advanced editing of any sort removes all possibility to explore custom sound design with the module. It’s a cheaply built unit that Roland asked for too much. Even for a Touhou music fanatic today, there are much cheaper ways to get access to the most sought-after instruments.

    +

    For a low, low price of $300 in 2002, you get 3 set of mediocre (with +a few exceptions) GM2 patches. The sounds themselves are reasonably new +and refreshing back then, but the higher average voice-per-note of the +new StudioCanvas sounds make the SD-20 a less desirable choice than +previous 64-polyphony models. The lack of advanced editing of any sort +removes all possibility to explore custom sound design with the module. +It’s a cheaply built unit that Roland asked for too much. Even for a +Touhou music fanatic today, there are much cheaper ways to get access to +the most sought-after instruments.

    The … Death?

    -

    My SD-20 is in temporary coma right now, as it’s receiving a brain surgery …

    +

    My SD-20 is in temporary coma right now, as it’s receiving a brain +surgery …

    I will give updates in a separate post when it’s complete.

    IC 24Roland R02677490 RA0C-003 JAPAN 0645EGI B0106ZACRoland R02677490 RA0C-003 JAPAN 0645EGI +B0106ZAC ASIC DSP, “XP7” Synth Engine
    IC 26Roland R03010612 23C128BL832J 0620K7002Roland R03010612 23C128BL832J +0620K7002 128 Mbit Mask ROM, Wave ROM
    IC 27Roland R03010623 23C128BL833K 0620K7005Roland R03010623 23C128BL833K +0620K7005 128 Mbit Mask ROM, Wave ROM
    IC 29EliteMT M11L416256SA- 35T SZV2C51GR 0627EliteMT M11L416256SA- 35T SZV2C51GR +0627 EDO DRAM 4 Mbit, XP Effects RAM
    IC 30LH28F160BJE-BTL80 SHARP JAPAN 0631 5 XNFlash Memory, 16 Mbit, System / ParametersLH28F160BJE-BTL80 SHARP JAPAN 0631 5 +XNFlash Memory, 16 Mbit, System / +Parameters
    IC 31
    IC 32EliteMT M11L416256SA- 35T SZV2C51GR 0627EliteMT M11L416256SA- 35T SZV2C51GR +0627 EDO DRAM 4 Mbit, System RAM
    -
    I don’t know what I’m doing … +
    I don’t know +what I’m doing …
    @@ -710,7 +941,8 @@ The module no longer respond to any key presses from this point.


    -
    [1]: Had to paraphrase this, because Roland prohibits reproducing contents from their manuals…
    +
    [1]: Had to paraphrase this, because Roland prohibits +reproducing contents from their manuals…