Wednesday, September 2, 2015

Eloquent Javascript Chapter 6 Table Layout Example

 Hello everyone! :)
Here are some notes I typed up to help you guys understand the beginning of the Table Layout example in chapter 6 of eloquent javascript.
This isn't the best worded thing in the world, but I believe if you work through it things will click and you will understand what is going on.

This is a reaaaally long-winded explanation of it all, but hopefully it is helpful :)

Enjoy!

NOTE: THIS CODE WAS DESIGNED TO BE READ IN A CODE EDITOR LIKE TEXTWRANGLER OR IN THE INTERACTIVE PROMPT AT http://eloquentjavascript.net/06_object.html

THE TABLES I PRINTED OUT FOR REFERENCE DO LINE UP PROPERLY ON BLOGGER


/*
var exampleData = [ //layed out in rows
    [    //row one (really row 0, etc)
     TextCell{text: ["##", "__"]},//the rows contain TextCell objects which contain the text
     TextCell{text: ["  "]},
     TextCell{text: ["##", "__"]},//if there are two text chunks that represents a height of 2
     TextCell{text: ["  "]},
     TextCell{text: ["##", "__"]}],
    [   //row two
     TextCell{text: ["  "]},
     TextCell{text: ["##", "__"]},
     TextCell{text: ["  "]},
     TextCell{text: ["##", "__"]},
     TextCell{text: ["  "]}],   
    [  //row three
     TextCell{text: ["##", "__"]},
     TextCell{text: ["  "]},
     TextCell{text: ["##", "__"]},
     TextCell{text: ["  "]},
     TextCell{text: ["##", "__"]}],
    [
     TextCell{text: ["  "]},
     TextCell{text: ["##", "__"]},
     TextCell{text: ["  "]},
     TextCell{text: ["##", "__"]},
     TextCell{text: ["  "]}],   
    [
     TextCell{text: ["##", "__"]},
     TextCell{text: ["  "]},
     TextCell{text: ["##", "__"]},
     TextCell{text: ["  "]},
     TextCell{text: ["##", "__"]}]
];

name         height country
------------ ------ -------------
Kilimanjaro    5895 Tanzania
Everest        8848 Nepal
Mount Fuji     3776 Japan
Mont Blanc     4808 Italy/France
Vaalserberg     323 Netherlands
Denali         6168 United States
Popocatepetl   5465 Mexico
 */

var exampleData = [
    [   
     new TextCell("##\n__"),
     new TextCell("  "),
     new TextCell("#u#\n_o_"),
     new TextCell("  "),
     new TextCell("##\n__")],
    [ 
     new TextCell("  "),
     new TextCell("##\n__"),
     new TextCell(".."),
     new TextCell("##\n__"),
     new TextCell("  ")],   
    [   
     new TextCell("##\n__"),
     new TextCell("  "),
     new TextCell("#u#\n_o_"),
     new TextCell("  "),
     new TextCell("##\n__")],
    [  
     new TextCell("  "),
     new TextCell("##\n__"),
     new TextCell(".."),
     new TextCell("##\n__"),
     new TextCell("  ")],   
    [   
     new TextCell("##\n__"),
     new TextCell("  "),
     new TextCell("#u#\n_o_"),
     new TextCell("  "),
     new TextCell("##\n__")]
  ];

/*
  The idea behind this is that it returns an array of RowHeights
  So it reduces each row of TextCells to 1 value: the minimum RowHeight
  (which really means the largest row height: the maximum of the rows,
   but the minimum you need to make the row the right size when drawing)
   (i.e. if you have a row of objects of different sizes, the minimum size(height)
    of the row is the largest size of any of those objects, right?)
  So let's break it down
   
    It starts off with rows.map()
      This means it is turning each row into some piece of info about the row
      (i.e. it is mapping each row to the "minimumHeight" that row can be to
       represent TextCell correctly (i.e. a two line hight textcell can't be
        represented with a one cell high row))
   
      Then it uses row.reduce()
        It is RETURNing row.reduce()'s result.
        This is because it is mapping the row itself to the result of the reduce
        Reduce takes two arguments (max, cell).
        Now reduce usually takes the first element, and the next element in the
        array as arguments.
        However, if you look at the code, it has
          return Math.max(max, cell.minHeight());
        Hmm you think, 'max' is a TextCell object.
        Thus it should fail in Math.max, since max() is a numeric function
       
        However, if it was coded as
          return Math.max(max.minHeight(), cell.minHeight());
        Then on the second attempt at reducing we would have
          return Math.max( (previous numeric result).minHeight(), cell.minHeight());
        "WAIT!" you think, the previous result is a number!
        Thus the next call to "max.minHeight()", using the prior result, would fail.
        Numbers don't have a minHeight method.
        What we really want to do is compare that prior max number with the next
        cell.minHeight.
       
        So what do we do?
        That is where the second argument to reduce() comes in.
       
        If you noticed, the Eloquent code has the following structure
          row.reduce(function(max,cell){ //code }, 0);
        See that zero?
        That is the default first 'max', or current element.
        What this means is that the reduce uses that as the first 'max'
        and uses the first element of the row array as the current 'cell'.
        I.e.
        The first time it runs it will do:
          return Math.max( 0, cell.minHeight());
          //cell is row[0], NOT row[1] like it normally would be.
        This fixes both issues we had with our earlier attempts!
        Because the next time it will still use return Math.max(max, cell.minHeight)
        only now max will always be a number and never a TextCell object!
        Success!
*/
function rowHeights(rows) {
  return rows.map(function(row) {
    return row.reduce(function(max, cell) {
      return Math.max(max, cell.minHeight());
    }, 0);
  });
}

//The example below prints out all 2 because the minimum height is 2 "##\n__" => "##", "__" (two lines!)
console.log(rowHeights(exampleData));


/* Alright, let's check out this one.
   For reference, if we printed out drawTable(exampleData) we would get:
  
        ##    #u#    ##
        __    _o_    __
           ## ..  ##  
           __     __  
        ##    #u#    ##
        __    _o_    __
           ## ..  ##  
           __     __  
        ##    #u#    ##
        __    _o_    __
  
   carefully notice the 3rd column, see how it has a width of 3 but the ".." element
   has a width of 2? (in our actually code definition of it
     new TextCell(".."), //<- br="" not="" of="" three="" two="" width="">   This is where the rest of this explanation comes in.
   This is what cellWidths is all for, the padding and alignment of the columns
   with their subcolumns.
  
   The idea behind this one is a bit trickier.
   I am just going to phrase it bluntly, which will make little sense at first,
   and then I am going to break it down so it makes sense.
  
   It will help to know what the output of this is.
   It will return an array of values, just like rowHeights, which represent the
   maximum column widths of a given column
   So, in my example, I purposely made the third column alternate between "#u#\n_o_"
   and ".."
   In the first one we would get
     #u#
     _o_
   Upon printing it out. This column has a width of 3 characters, so it has a width of 3.
   But upon printing the one out just below it we would get
     ".."
   This column has a width of 2, not 3.
   This means that at least two layers of the same overall column have different widths!
     //3rd column
     #u#
     _o_
     ..//width of 2, doesn't match the width of the other pieces
     #u#
     _o_
     ..//width of 2, doesn't match the width of the other pieces
     #u#
     _o_
   Thus, to find out what the minimum width a column needs to be to draw it all correctly
   colWidths maps the place of this column to the "minimum" width needed.
   By place I mean, the output of colWidths is
     [col1's minimum width, col2's minimum width, col3's min width, etc]
   As you can probably imagine in your mind's eye,
   This array is like smooshing the entire table into a flat disk,
   where each slot in the disk corresponds to the largest width of that corresponding
   column.
  
  
   (Note that the minimum width needed to draw a column is the maximum of the subcolumns
    themselves. Minimum needed to draw right, maximum of the subpieces)
  
   So, what this means is, if we ran
     console.log(colWidths(exampleData));
     //-> [2,2,3,2,2]
   The output is saying column 1 has a minimum needed width of 2
   The largest object in the 3rd column is 3 wide, so the minimum for that column is 3
   This means smaller pieces in that column need padding.
   (this is so that ".." will line up with "#u#". You just add a space ".. " taa daa lol)
  
   Phew! That wasn't so hard was it?
   Now we have to delve into the nasty code lol.
   This is where it gets a bit trickier, but with the above concepts in mind,
   it shouldn't be that bad ;)
  
   So here is the blunt explanation first, and then I'll break it down.
  
   Alright, so the basic structure of "rows" ("exampleData" in my example)
   is
     [ row1, row2, row3, row4, row5]
   and the structure of any row is
     [ itemFromColumn1, itemFromColumn2, itemFromColumn3, itemFromColumn5, itemFromColumn5]
   Let's represent the first row as ordered pairs, where we have
   TextCell(m,n) is the TextCell of row N(y) at position M(x)
   This just makes sense though, doesn't it? rows are the y values, columns the X values
  
   If you think about it like a grid then we have each row is
     //rowN, where n is the row number 1, 2, 3, 4, or 5 etc
     [ TextCell(1,n), TextCell(2,n), TextCell(3,n), TextCell(4,n), TextCell(5,n)]
   Thus the whole array is really like the following diagram, which is basically a grid
     [ TextCell(1,1), TextCell(2,1), TextCell(3,1), TextCell(4,1), TextCell(5,1)]//row1
     [ TextCell(1,2), TextCell(2,2), TextCell(3,2), TextCell(4,2), TextCell(5,2)]//row2
     [ TextCell(1,3), TextCell(2,3), TextCell(3,3), TextCell(4,3), TextCell(5,3)]//row3
     [ TextCell(1,4), TextCell(2,4), TextCell(3,4), TextCell(4,4), TextCell(5,4)]//row4
     [ TextCell(1,5), TextCell(2,5), TextCell(3,5), TextCell(4,5), TextCell(5,5)]//row5

   In my model I start the numbers at 1, but they really start at 0 because arrays
   start at 0.
   But as you should be able to tell, the row number is clearly the "Y" value in the grid
   And the index into any given "row" is like the "X" value into the grid.
  
   Now how does this apply to understanding the code?
   Well, the code returns just the first array of the above:
     [ TextCell(1,1), TextCell(1,2), TextCell(1,3), TextCell(1,4), TextCell(1,5)]//row1
   mapping each slot to a reduction of all the rows containing elements of that column.
  
   First, let's understand the outer code, to understand what role 'i' has in all this,
   but then let's dive straight into the inner code first, so we can understand the outer
   code in relation to it.
  
   Alright, so we first have
     return rows[0].map(function(_,i){ //inner code blah blah});
  
   The map() function takes two parameters (or more, but don't worry about that)
   They are as follows
     map(element, index_into_array)
   We aren't using the element itself, because we are doing some super confusing
   sneaky stuff and don't need it.
   (basically if we just have map(element) it takes each element in the array and uses it
    to determine what to map that slot to.
    We are just using the index into the array to figure out what to map the slot to
    This means we are just using the X values, or column numbers, to determine
    what to map each slot to.
    Each slot represents a column, so slot 0 represents column 0(the first one, col 1)
    And we are only using that information, not the 'row' element stored in that slot,
    to figure out what to put in that slot.
    This is a highly unusual way to use map, (based on the prior examples) but it is nifty.
    (tho confusing as all hell)
    )
   All we need is the index into the array itself.

   This is equivalent to the column number, since the index into rows[0]  
   is the index into
     [ TextCell(1,1), TextCell(1,2), TextCell(1,3), TextCell(1,4), TextCell(1,5)]//row1
   In our model that would seem to be 1, 2, 3, 4, 5, the x values, but it is really 0 - 4, since
   arrays start at 0. This is clearly the X value of our grid, or column number.
  
   Okay, so i represents the column number, or 'x'.
   It would have been better if the Eloquent code had named it as such, but sadly it
   didn't.
  
   Now that we know i represents the column number, let's dive into the inner code.
    return rows.reduce(function(max, row) { //blah blah}, 0);
   Notice that second parameter again? The zero?
   That means the first time through the reduce's 'max' is 0 and 'row' is rows[0]
   (the variables 'max' and 'row' take on those values the first time reduce does its thing)
   This is the same idea as what we saw with rowHeights() earlier.
  
   We are reducing all of the rows based on max, and the individual row.
   Let's look at the inner code to figure out what is going on.
     return Math.max(max, row[i].minWidth());    
   Woah! There is the 'i' again! Wait, what is i really?
     return Math.max(max, row[columnNumber].minWidth());
   Oh! okay.. sooo.. this is saying.. what exactly?
  
   You have to remember that this reduction is embedded inside of a map.
   This means that 'reduction', reduce(), is called 5 times, one for each time map maps an element
   of row[0]. (row[0][0] - row[0][4]
   This means each time reduce() is called 'i', columnNumber, is fixed, constant.
   Thus, reduce compares each _>rows<_ against="" another.="" br="" column="" element="" i="" one="" th="">   (i.e. it compares each X slot of the grid with the ones right below it, incrementing the Y value)
     
   Basically, in other words, putting all the pieces together, we get:
    
     function colWidths(rows) {
      //rows[0] = [ TextCell(1,1), TextCell(1,2), TextCell(1,3), TextCell(1,4), TextCell(1,5)]
        return rows[0].map(function(_, column) { //column is columnNumber or the x value of the grid
         
          return rows.reduce(function(max, row) {
         
            return Math.max(max, row[column].minWidth());//using the X value as the fixed
                                                         // Y value
            /*
              i.e. for each row compare row[column] against the prior row's row[column]
              i.e.
             
              1st time map does what it does
              map(row[0][0]), column = 0, to the result of reduce()
                reduce() max = 0, row = rows[0]  //[y][x(column)]                       (x,y)
                  return Math.max(          0, rows[0][0].minWidth()); //Max(0, TextCell(0,1)) 
                  return Math.max(priorResult, rows[1][0].minWidth()); //Max(0, TextCell(0,2))
                  return Math.max(priorResult, rows[2][0].minWidth()); //Max(0, TextCell(0,3))
                  return Math.max(priorResult, rows[3][0].minWidth()); //Max(0, TextCell(0,4))
                  return Math.max(priorResult, rows[4][0].minWidth()); //Max(0, TextCell(0,5))
               //result[0] is now full, and contains the min
             
              2cnd time map does what it does
              map(row[0][1]), column = 1, to the result of reduce()
                reduce() max = 0, row = rows[0]  //[y][x]  //comparing to model start @ 1
                  return Math.max(          0, rows[0][1].minWidth()); //Max(0, TextCell(1,1))  
                  return Math.max(priorResult, rows[1][1].minWidth()); //Max(0, TextCell(1,2))
                  return Math.max(priorResult, rows[2][1].minWidth()); //Max(0, TextCell(1,3))
                  return Math.max(priorResult, rows[3][1].minWidth()); //Max(0, TextCell(1,4))
                  return Math.max(priorResult, rows[4][1].minWidth()); //Max(0, TextCell(1,5))
               //result[1] is now full, and contains the min
             
              3rd time map does what it does
              map(row[0][2]), column = 2, to the result of reduce()
                reduce() max = 0, row = rows[0]  //[y][x]  //comparing to model start @ 1
                  return Math.max(          0, rows[0][2].minWidth()); //Max(0, TextCell(3,1))  
                  return Math.max(priorResult, rows[1][2].minWidth()); //Max(0, TextCell(3,2))
                  return Math.max(priorResult, rows[2][2].minWidth()); //Max(0, TextCell(3,3))
                  return Math.max(priorResult, rows[3][2].minWidth()); //Max(0, TextCell(3,4))
                  return Math.max(priorResult, rows[4][2].minWidth()); //Max(0, TextCell(3,5))
               //result[2] is now full, and contains the min

              4th time map does what it does
              map(row[0][3]), column = 3, to the result of reduce()
              //once again, let me reiterate, 3 is the X value, but due to the way 'rows' is set up
              //compared to the grid, x and y are swapped
              //rows[y][x] is the TextCell at point (x,y)
                reduce() max = 0, row = rows[0]  //[y][x]  //comparing to model start @ 1
                  return Math.max(          0, rows[0][3].minWidth()); //Max(0, TextCell(4,1))  
                  return Math.max(priorResult, rows[1][3].minWidth()); //Max(0, TextCell(4,2))
                  return Math.max(priorResult, rows[2][3].minWidth()); //Max(0, TextCell(4,3))
                  return Math.max(priorResult, rows[3][3].minWidth()); //Max(0, TextCell(4,4))
                  return Math.max(priorResult, rows[4][3].minWidth()); //Max(0, TextCell(4,5))
               //result[3] is now full, and contains the min
             
              5th and last time map does what it does
              map(row[0][4]), column = 4, to the result of reduce()
                reduce() max = 0, row = rows[0]  //[y][x]  //comparing to model start @ 1
                  return Math.max(          0, rows[0][4].minWidth()); //Max(0, TextCell(5,1))  
                  return Math.max(priorResult, rows[1][4].minWidth()); //Max(0, TextCell(5,2))
                  return Math.max(priorResult, rows[2][4].minWidth()); //Max(0, TextCell(5,3))
                  return Math.max(priorResult, rows[3][4].minWidth()); //Max(0, TextCell(5,4))
                  return Math.max(priorResult, rows[4][4].minWidth()); //Max(0, TextCell(5,5))
               //result[3] is now full, and contains the min
            */
         
          }, 0);
       
        });
     
      }  
   So basically, this uses the first row as an anchor, and reduces each column based on
   using the index into that row (i) as a fixed index into each row.
   i.e.
   row[0] is mapped using 0-4 as keys
   0: is mapped to a reduction of rows[all][0] based on which has the maximum minwidth
   1: is mapped to a reduction of rows[all][1] based on max minwidth
   2: mapped to reduction of rows[all][2]
   etc
  
   The whole "reduce" thing is like basically doing this
       var result = [];
      
       //this part is analogous to the outer Map loop
       //X is equal to column number, etc
       for(var x = 0; x < rows[0].length; x++){
         result[x] = 0; //the default for Max as the second parameter to reduce()
        
         //This part is analogous to the inner reduce loop
         //Stay at a fixed X value and loop through each item in that column
         //until you find the largest minimum width needed to draw that column
         for(var y = 0; y < rows.length; y++ ){
           if(rows[y][x].minWidth() > result[x]) //get the maximum minWidth
             result[x] = rows[y][x].minWidth();
         }
       }
  
   I hope this all makes sense?
   It was kinda harder to explain than I had imagined, but hopefully it made sense.
   I was a bit rambly, but if you look at and read everything I wrote
   things should eventually click.
   :)
  
  

*/
function colWidths(rows) {
  return rows[0].map(function(_, i) {
    return rows.reduce(function(max, row) {
      return Math.max(max, row[i].minWidth());
    }, 0);
  });
}

Sunday, August 30, 2015

Eloquent Javascript Chapter 6

Hello people! :) *cheesy smile*

Today I was working through Eloquent Javascript, which you can read for free and work through for free online here http://eloquentjavascript.net, which is a super awesome book teaching programming concepts and Javascript. 

It can get pretty damn confusing tho, although I was breezing through it until I hit Chapter 6.
I am going to write a post tomorrow or later tonight(not likely) explaining everything so anyone can understand it.
It was sooo randomly difficult and unexplained that it really pissed me off.
I can understand it, but it is unnecessary to make it so.. non-intuitively presented.
It is much harder to look at someone else's code in little isolated bits without any context and without any of the knowledge that went into the brainstorming behind the code being looked at.

Yup, case-in-point, here is an excerpt from my notes as I was trying to figure everything out:

  "/* OKAY
     so this is GOD AWFULLY CONFUSING AS SHIT
     But this is what it means:
     It maps each slot in the 0th index of the rows array to the minWidth of all the columns of that index [...]"

I don't want to ^give the whole quote out of context, plus I just wanted to show just how frustrating it was lol. I mean look at that colorful language xD

I am going to be breaking Chapter 6 down into bite-sized manageable bits so anyone can understand it.
There was one particular thing that was bothering me, which I finally figured out.
I will go over that too, but I'll mention it now in case it is throwing anyone else for a loop. (no pun intended LOL)


So we have the following code written by the author(with the example Rows object for context):

/*
0:    [
0:    TextCell{text: ["##"]}
1:    TextCell{text: ["  "]}
2:    TextCell{text: ["##"]}
3:    TextCell{text: ["  "]}
4:    TextCell{text: ["##"]}
]
1:    [
0:    TextCell{text: ["  "]}
1:    TextCell{text: ["##"]}
2:    TextCell{text: ["  "]}
3:    TextCell{text: ["##"]}
4:    TextCell{text: ["  "]}
]
2:    [
0:    TextCell{text: ["##"]}
1:    TextCell{text: ["  "]}
2:    TextCell{text: ["##"]}
3:    TextCell{text: ["  "]}
4:    TextCell{text: ["##"]}
]
3:    [
0:    TextCell{text: ["  "]}
1:    TextCell{text: ["##"]}
2:    TextCell{text: ["  "]}
3:    TextCell{text: ["##"]}
4:    TextCell{text: ["  "]}
] */

function rowHeights(rows) {
  return rows.map(function(row) {
    return row.reduce(function(max, cell) {
      return Math.max(max, cell.minHeight());
    }, 0);
  });
}

function colWidths(rows) {
 return rows[0].map(function(_, i) { //rowZero.map( function(element, index) {
   
    return rows.reduce(function(max, row) { //reduce each row into a minWidth for that row
      return Math.max(max, row[i].minWidth());
    }, 0);
  });
}


So, if you look, you'll see (inside function rowHeight)
row.reduce(function(max,row){
   return Math.max(max, cell.minHeight());
}, 0)

Now, if you are me, you think.. okay, "row" contains "cell"s, so it contains TextCell objects.
and "reduce" takes the first object, compares it to the second, and returns whatever it feels like, replacing them both with something else, until there is only 1 survivor left.

Thus, when I saw Math.max(max, cell.minHeight())
I assumed max would be an object of type TextCell, and that cell.minHeight() would, of course, resolve into a number (integer).
But if max is an object, then Math.max should fail miserably and return NaN.
So why does it work?!

When I finally figured it out, it made so much sense.
The trick is the second parameter to reduce, which is an argument you can use as the first argument to compare against the arrays contents, instead of using the array's contents as the starting point.

So , when we say
row.reduce(function(max, current){}, 0)
This means that 0 will be put in first for max, and current will be the 1st object in the array
Thus, Math.max(max, current.minHeight()); will never be NaN
because the first time it is Math.max(0, current.minHeight());
then every time after it becomes
Math.max(oldResult(which is a number), current.minHeight()(which is the next thing in the array));

I hope this (awfully formatted) quick post helps someone.
If you have any questions, don't hesitate to reach out. :)

~James

Sunday, May 3, 2015

Noktaj Notoj

Saluton karaj legantoj! :)

Cxi tiu skribajxo estas pri mia jxus-kompletita legado, pri Scienco kaj la Matematikoj. (Mi studas la matematikojn kaj komputalajn sciencojn, do mi vere gxuas tiujn studobjektojn/studinteresojn)

(se vi trovas iujn erarojn en cxi tiu pagxo, bonvolu komenti :) Dankon!)

Mi estas leginta la libro nomata "La Vojo al Realeco" (Eble tradukita malbone, mi ne uzas Esperanton antaux longe, mi paronpetas), verkita de Roger Penrose.
La libro estas tre tre granda kaj dika, kaj profunde interesa.
Mi volas legi gxin pli, sed gxi estas tre malfrua nun, kaj mi havas tro multe da interesojn mi volas ankaux studi.
(Kiel la matematikojn, kaj multajn lingvojn, ktp ;P)

Gxi sentas bone uzi kaj skribi Esperanton denove, sed mi probable forgesis kelkajn vortojn aux pli..
Kiel mia studado de la japana, gxi estas tro facila forgesi vortojn se vi ne uzas ilin.
Sed, la japana estas mojose bela kaj interesa, do mi certe studos gxin plu. ;)
Mi volas ankaux studi la hispanan, kaj cxinan, kaj francan, ktp, sed mi ne havas multe da tempon pro miaj planoj pri religiaj aferoj (mi ne scias la vorto por la afero, sed... "Kiam oni volas, senpage kaj volante, instrui religiajxojn kaj servi iu Pregxejo plimembrigxi.

En la angla mi iras/ decidis iri en(al? je?) "Mission".
Dum du jaroj mi instruos kaj helpos la pregxejo gajni pli da membrojn, kaj mi helpas personojn trovi kontecon kaj felicxecon.
La religio mi estas parto estas tre familio-pri-ante, nu...
familio-koncernante, pensas kaj tre amas la familiajn strukturojn kaj idealecon, kaj laboras ege kontentigi familiojn.

O! Mi gxis nun ne menciis iom pri mia legado!
Nun mi ekas :)

La libro diris pri la "Ideala Mondo kie la Matematikaj Ideoj kaj Ajxoj Vivas".
(Cxi tiu estas profunda ideo, kaj mi nur legis la 32 pagxojn de la unua cxapitro (<- eble hispana vorto E-igxigita, mi ne certas @_@ Mi korektos pli malfrue) )
Gxi estas tre interesa kaj, kiel mi skribis supe, profunda.
Mi pensemas ke realeco estas tre kompleksa kaj interesa, sed ankaux tre bela kaj malordinara.(nu... "unique" angle. interese, sed malhelpante, mia menso volas uzi kaj pensi japanajn vortojn xD)

Oni ne kutime pensas pri la ideo ke matematikaj ideoj havas ilian proprajn vivojn kaj esteco kiel ajxoj ne de nia mondo, sed vivante en ilia propra mondo.
Mondo de idealeco kaj (abstraktaj?) ideoj.
Gxi gravas cxu la vereco de iu matematikajxo (plue skribata "matemajxo") ekzistas sendependante je nia realeco.
Ke matematikaj ideoj kaj verajxoj ekzistas cxu ni trovas ilin aux ne.
Ke granda trovaro ekzistas ke ni ne ecx komprenas.

Tiu estas ege profunda ideo, kaj, laux mi, estas tre grava.
(sed, vere, mi estas Matematikisto. Sed la matematikoj estas parto de cxiuj, kaj ilia graveco estas bone konata/sciata.)

La matematikoj estas tre bona modelo de nia mondo, tre tre precisa modelo.
Ege precisa.
Tiu estas stranga, cxu ne?
Gxi estas strange kaj profunde precisa.

Mi volas tuj legi la tutan libron pro mia interesado, sed triste la libro estas 1000+ pagxoj kaj dikas kun matematikojn me ne jam studis.
("dikas kun" => estas dika koncernante matematikojn me ne jam studas kiuj cxiuj estas malfacile kompreneblaj (sed mi probable povas, sed ne certas))

Nu... mi dormemas, kaj volas studi aliajn ajxojn antaux tiu dormado.
Do, mi "Bonan Nokton"as vin, kaj esperas ke vi havas bonegan fojon kaj trovas felicxecon en cxiu afero de via vivo. :)

Sincere via,

~James D.



Thursday, July 24, 2014

The Strange Metamorphosis of Life



There comes a point in your life, when you realize that there are many things about yourself the truth of which you have never come to terms with, aspects of your character that are either hidden or really unpleasant to behold.

And sometimes, just sometimes, you begin to wonder... when did I become such an asshole?

I mean, seriously, no-one likes to be told they are an arse, therefore once one is told such a fabulous observation about themselves, how do they respond?

I guess we could agree that if someone tells you that you're a butthole, either
A: you are a butthole,
B: they are a butthole and don't like you,
C: you are both buttholes and no one likes either of you,
D: they think you are a butthole but you really aren't
or
E: you are only a butthole under certain conditions, conditions which you should be aware of.

For me it turns out my case of "The Great Buttholio" comes from situation E.
I become extremely unpleasant to be around in certain situations and in response to certain factors.
This comes back to the idea of "Reaction versus action", reacting to situations will usually put you into bad water, as people tend to be defensive rather than rational when reacting to things.
(More primal, emotive)

Let's discuss the heart of the issue in my case:
First, are there very logical reasons for my anger and fiery rudeness?
Well.. yes, but there are also logical reasons for not responding in a manner that upsets everyone else around you.

For example, the first semester I was in college I lived with my roommate, and over the course of two semesters we kind of became accustomed to each other's ground rules, or so I thought.
Well, I made it clear that I really didn't like it when he played his music out loud, and yet when I was in the room with him he would play his music out loud anyway.
I always use my headphones, but I can't hear my own thoughts, let alone my music, when he is playing his music out loud.

Okay, so how does one respond?
Obviously you should have a talk with your roommate and ask them to please not play music out loud while you are in the room, since you have to study and whatnot. A simple, calm, rational, and respectful approach to resolving tensions and to a peaceful resolution.

That is not the point of this story though.
The point is that one of the kinds of situations that drives me absolutely crazy is when someone does something, that has long been established as something hated by me, that directly effects/affects me despite knowing that I dislike it and/or despite me explicitly asking them not to do so multiple times over the years or months.

This is what I mean when I say my reasons for being angry and rude are real, it's not like I am being rude and angry for no reason, there is a substantial build-up of an abuse of my trust and our established respect for one another.
Essentially here is the problem:
It's an issue of resonance.
Even a small issue, if repeated at the right frequency intensity, will build upon itself even as vibrations can resonate with a bridge and build into a destructive crescendo, crushing the defenses and sensibilities of the person upon which the issue has been inflicted.
(Basically even a small issue, if repeated enough times, despite the careful discussion of its effects upon both parties, can elicit an explosive response from the afflicted towards the inflicter)

However, ^this way of looking at the situation is extremely unhelpful, as it is totally self-centered in the literal meaning of the phrase.
I included it to explain how and why people like myself snap, and why we would respond so rudely, it is only supposed to serve as a way to bridge understanding.
Honestly, this post is supposed to discuss the ways the person who freaks out can change their views and responses to prevent disastrous scenarios, but there could and should be changes on both sides of the spectrum.

The problem is that neither participants are completely objective.
It is about equally as fair to say that the person who freaks out is the "asshole" as it is to say that the person causing the freaking is.
But from the casual observers point of view, only the responder is an asshole, as, like I said prior, the issue tends to be a minor one.
They don't realize that the minor issue isn't the issue, it's the deliberate and continued inconsideration on the behalf of the initiator that the responder is freaking out over.
Once again, the response of the responder isn't justified, isn't proper, and is not the best choice, I do not intend to defend the responder, but rather to encourage an understanding of his thought-process.
(If one even exists during that brief window before he snaps)


Now, we could say that the person who caused the responder to freak out is inconsiderate, or a bit of a butt too, or that the responder is in the wrong for getting so worked up, or we could simply say that both are partly at fault here.
The initiator should realize that they have a history of ignoring the responder's feelings and preferences and should try to be considerate, and the responder should realize that acting batshit crazy, even under the guise of self-righteousness, is absolutely asshole-ish and is not an appropriate way to respond to any situation.

As far as the responder is concerned:
In my experience, the other person rarely does what they do to annoy me on purpose, despite the idea on my side that a little careful thought or consideration would have sufficed to prevent the repetition, and they genuinely do not seem to expect me to respond the way I do.
Perhaps it is a form of hope, people change, and change is good, so maybe they hope I will respond favorably at some point in time.
It doesn't matter either way why or how things come about, what is important is to realize that the issue does not mark a deliberate attempt to torture you and your soul, that once you realize that there is no real cruelty here and that your mind is blowing the situation way out of proportion, that you should respond calmly and thoughtfully.

I guess one could say that thinking, being calm, and being aware of the fact that freaking out is totally unhelpful, yes, even a hindrance, are the best pieces of advice to which one could adhere.

Remember: is there really ever a reason to become an asshole?
So what, you can't stand that the other person has completely ignored things you have established over and over again, so what?
Are you a King? Are you Prince?
Are you so snobby that you can honestly say that such an act is heresy in your eyes?
Honestly, even if someone repeatedly does something you have asked them no to do, even if you have a long established history of responding unfavorably to that act, even so, the only respectable and mature response is to respond in a peaceful and dignified manner.

I mean, why would anyone want to respond in an ugly, undignified, accusatory, defensive, counterproductive manner?
Being an Asshole never solves any issues, and there is really never an excuse to allow yourself to stoop to such a low level of thinking and acting.

In the process of growing up and becoming mature I think a major part is realizing that you have to stop blaming others and the world for issues that you can fix on your own.
In my case, I can stop responding like an Asshole due to my own petty peeves/self-righteousness.
No-one is really doing anything to bother me on purpose, and even if they were, responding the way I have up to now is really immature and unhelpful.
It's unpleasant. Dealing with people who react the way I have been is unpleasant, I need to be more flexible and considerate myself in my reactions and mannerisms.

Okay, so I will make a commitment right here, right now.
I will strive to respond to unfavorable situations in a calm, rational, and respectful manner from now on. I will not lose my head, as they say, upon hearing that something has arisen which conflicts with prior arrangements. I will be more aware of my speech-patterns and will identify when I am switching gears into more disrespectful, destructive speech. I will be more calm and will be more easy-going, less strict with others as far as my their impacts upon my life are concerned.
I will pay attention to my habits and will make conscientious changes as needed

Well, this has been a rather long, probably dreary, post.
It was more helpful for me than for anyone else, I'll bet.
Some probably would read it partly and then give up, having been persuaded that I would never admit my faults and change them, largely due to the tone I used when describing the why and how of my own experiences and responses.
For that I apologize, it is a bit hard to write about and attempt to explain my own experiences without that tone coming across, and since that section was only part of this whole blog-post, and didn't adversely effect the outcome of the post, I saw no reason to remove the passion from it.

So yeah, I guess what we should all take away from here is that self-reflection and improvement are very important on the path to enlightenment and continued growth, and that there is probably always room for improvement in some aspects of your life, and that with each improvement you become a healthier, happier, and more successful and productive person. :)

Well, thanks for reading, and please forgive the expletives @~@

Most sincerely,

~James Dodon





Wednesday, July 2, 2014

Mia Dua Tago en Esperantlando (Kanado vere)

Mi salutas vin miaj geamikoj! :D
Kiel vi fartas? :P

Mi? Mi estas tre bone, hieraux estis Kanada tago cxi tie, do mi festis kaj iris al la urbo por aspekti artfajrajxojn. (Angle "Fireworks")

Sed cxi tiu artikulo ne estas pri hieraux, la tria tago, sed du tagoj pasitaj, la 30a de Junio.

Tiu tago ni komencis 40 minutoj post la oka horo, kaj ni kunvenis cxe la "Student Union Building", kie ni havis nian enkondukon al NASK.
Ni diskutis helpajxojn kiel la ideo ke oni devas paroli nur Esperanton la plej ebla, kaj ke cxiu havus pli bonan Esperanton se ni ne timas erari.
La vortoj de niaj instruistoj estis tre helpanta, kaj mi tre aprezas iliajn vortojn.

Tiam mi ne komplete komprenis mian nivelon de paroldado, do mi estis atinganta la post-basa kurso, kiu estas la plej basa ke oni povas atingi je NASK cxi-jare. Vere, mi trovis ke mi povis kompreni preskaux tute tion kiun la instruistino estis diranta. Sed, mi decidis aligxi al la mez-nivela kurso preskaux al la fino de la kurstago (kursa tago).

La mez-nivela kurso nur legas kanton skribita de Zamenhoff, kaj faris la kantanto de gxi ankaux.

Pli malfrue, mi atingis prezenton de Istvan Ertl, kiu prezentis pri la revuo BA, beletra almanako, kiun li redaktas kun aliaj redaktistoj.

Vere, mi ne bone komprenas la paroladstilo de Istvan, lia Esperanto estas pli malfacila kompreni ol la aliaj instruistoj kaj Esperantistoj, probable cxar lia denasklingvo estas tre malsama.
Do, mi ne komprenis tute tion kiun li diris, sed mi acxetis 2012 eldono de la BA.
Gxi enhavas multajn eseojn, poemojn, kaj aliajn skribajxojn esperantajn.
Mi probable provos legi gin baldux, kiam mi hejmiros.

Pli poste, mi atingis la prezento de Francisko Lorrain pri 'Kristnaskaj Rakontoj el franca Kanado", libro kiu estas tradukita Esperante kaj kiu enhavas rakontojn de francan kanadon.
Lia auxturo faris duan eldonon, sed Francisko estas laboranta en la tria.
(La auxturo ne jam vivas, sed lia libro jam faras tiel.)

Mi acxetis la duan eldonon de la libro, kaj mi pensas ke mi legos gxin hejme anaux.
Mi uzis multan da mian tempon tiu tago parolanta kun aliaj Esperantistoj, kiu helpis min paroli Esperanton pli kaj pli bone.

Mi tre sxatas ilian helpon, kaj aprezas ilin grande ^u^

Nun, mi devas skribi pli pri la aliaj tagoj ke jam finis, do mi finis cxi tie. :)

Dankon por via legado,
Mi tre sxatas vian legecon, kaj esperas ke vi havos bonan tagon! :D (aux nokton, kiel la tagtempo estas)

Sincere,

~James Dodon

- Posted using BlogPress from my iPad

Location:Victoria Universtity, Canada

Monday, June 23, 2014

Onwards to New Jersey and New York!

Avast ye mateys! Arrr! :D Lol
Hello dear readers! :)

I yesterday arrived to New York after an insane chain of events that nearly prevented the whole journey. :P

(NOTE, I will update this post with photos shortly, as my phone is having issues recognizing the online drafts and thus cannot add its photos to them)

The immense amount of luggage weighed down upon us, as we trudged towards the emigration areas for Hong Kong. We wielded our Hong Kong identity cards as to exit as residents and skip the longer lines for vistiors. "Heya, Elsa and I should go first right?", I asked my elder sister Anna. Anna's thick brown curls bobbed vigorously as she confirmed, "Yup, and if they don't work we can go through the other way". She beamed, and so Elsa and I trudged on and inserted our cards. Loading... loading.. Okay!
Everything seems good..
We enter the little closed off box area to have our thumbs scanned, so you know: no big deal, we have done this many times prior.
I press my thumb firmly down, silently musing thoughts as I wait for the cue to release my thumb. Twirl, twirl, twirl... nothing.
Suddenly guards come over to our spots and this intense feeling of anxiety began to bind and lacerate my intestines.
"Hey will you two come with us", the blue-shirted man closes to me asked us, "Yeah, go wait over there". He pointed towards this little tiny square bench area connected to a podium-like thing where another guard was diligently working away.
So, the guards then proceeded to tell Elsa and me that our visa's were expired, stating that we owed 160 hong kong dollars EACH.
We didn't have 160 hong kong dollars, let alone each..
And as far as we knew Elsa just graduated from highschool, her visa expired 8 days prior, we didn't think it was that big of a deal.
As for me, Anna tried to argue with the guards and convince them that since I was visiting, or since I just came in to hong kong, my visa or whatever had a grace period of 3 months (which is normally true if you visit another country), and that since I am a visitor I should't have to pay the fees to extend my visa up to that day that I left.

Well, after a heated debate, it readily became clear that it rested upon a technicality: when I came into Hong Kong I used my hong kong ID to enter, and thus entered as a resident, not as a visitor.
Thus even though I was visiting, I was liable to the same consequences for not renewing as a resident of hong kong.

Oh, did I mention our plane was to begin boarding 40 minutes from that time?
Yes, amongst all this chaos we were a breath away from the time to begin boarding. Oh, and they wouldn't accept credit cards.

So these guards detain Elsa and me, putting us in a room while they pumped us for whatever currencies we had and trying to get us to fill out renewal paperwork.
To their credit they did try their best to speed up the process, since our flight was so close to that time.
That ended up taking a looong while, and by then we had about 5-10 or so minutes until boarding.
We paid them with our american currency, 10 of which was Elsa's special 10$ bill she received from her ex-boyfriend, 20 of which was what I had to pay the dude who was going to help us with our luggage once we landed in New York.

Not to mention the 100+ hkd that we gave the guards, which I am sure if you convert all that into hkd and then compare it to 320 will be more than enough.
They gave us 7 usd back, plus like 2 hkd in change.

Wiping the tears from our eyes, we calmed our hearts briefly before jumbling them once more as we dashed out and onwards towards our gate.
We rushed and dashed and passed as we zoomed towards the destination, our luggage careening and teetering precociously.

We finally arrived, making it just before they began boarding.
We managed to be the first people in line, so we got into the plane quite fast after then.

We then put all our luggage in the overhead compartments, and got nice and cosy for our 4 and 1/2 hour flight.
Well, we sat there waiting for like evveerrr, untl someone finally went on and broadcast the message the we would delayed for a while due to "traffic congestion".
Okay, we were delayed for over an hour!
Our stopover was supposed to only be 45 minutes!
If you do the math, you will aptly realize that we would miss our next flight, and would likely have to take the another, probably much later flight.
So we panicked a little, but, being the professional people that we were, we asked a flight attendant about our connecting flight and she asked her supervisors.
Needless to say, the attendant reassured us that our flight would be delayed, since 36 people bound for new york were on our plane, but that we should hurry.

So... we eventually land, and we are rushing out of the plane and we have to go through security. No big deal, we think, we have these "Short transfer" stickers or whatever, they will prob be quick.. Nope, they analyze everything in my bags and make me open both for inspection.
They took out all my electronics, re-scanned them, andd then found a set of pliers, the small pocket kind that you carry with you for convenience, in my carry-on suitcase. Needless to say, they didn't like me having them, since they have a little knife blade in them.
I didn't care, I told them they could have it.
They kept telling me I couldn't have it, and I kept telling them I don't care, that if they wanted it they could keep it.
Finally they say I am good, I take all my electronics and rush to stuff them back into my bag, with Elsa helping me put them away.

The lady inspecting some of my stuff took away my water and emptied it for me, but she was incapable of putting it back into my backpack so I did that myself, and then Elsa, Anna, and I rushed out and up the escalator.
There were airport people waiting at the top of the stairs to point the 'quick transfer' people in the right directions, and so we started our long sprint to the 17th gate in Korea.
Well, it turns out that the 17th gate happened to be the farthest on possible from where we were, we ran and ran and ran all the way down to the end of the building, then we quickly boarded the plane and sighed with relief: we had made it! :D

The flight had been delayed for 20 minutes to allow us time to make it there, and we had done all the rcrazy running on the moving sidewalks just in case 20 minutes wasn't long enough.
Then began our looong flight to New York!
13+ Hours of flying, it was insane!

During the flight they fed us twice, once when we took off, and once before we landed. Both times the food was awful, the first time I ate some weird beef pasta that tasted really nasty, and the second time I ate scrambled eggs with some nasty garlicky mushrooms or something in them that tasted horrible.
However, the fruit the meals came with and the side dishes like a yogurt and a croissant were both pleasantly delicious.

During the flight I watched the beginning of Pompei, but decided I didn't want to watch it and instead watched The Lego Movie.
The Lego Movie was actually pretty good, but it was also kind of ridiculous and not as exciting as it could be. Also one part of it horrified me, although I guess I am a bit more sensitive than most.
It was surprisingly good for a movie about legos, and I did find it enjoyable despite the obvious undertones that tried to make the movie like one big advertisement.
The commercial implications in the plot made me dislike it severly, but, my own cynicism aside, the movie was actually pretty great.
Bit unrealistic, but whatever it was fun to watch. :D

I only have one thing to say: Everything is awesome! Loll

Anyway, I managed to nap for four hours or so, give or take an hour I couldn't tell, despite screaming children and Elsa and Anna's being noisily.
(Sorry, using an adverb instead of an adjective is something I am beginning to do because it is part of the "Esperanto Idiom" lol. It does make sense if you think about it, it modifies the verb. Being noisily is basically like saying the verb means "to be in a noisy fashion", so basically it describes a noisy existence. It probably has a more intense meaning than the adjective alternative, implying longer duration or habitual occupation of the state of being, but that is inconsequential for now, as it is expressive and I like to use it if I wish. )
(In english I would probably say it sounds more natural, if you yiew to use adverbs as you would adjectives, to use specific verbs with which they sound acceptable. For instance, "being noisily" would sound better inverted, as "noisily being". But wit would also sound better as "existing noisily", rather than "being noisily", because being + adverb implies that they were simply there being noisy.)

Finally we landed in New York! :D
We were pretty calm, since we knew that we had arrived safely and that there wasn't much to worry about.
We exited the plane and headed on over to immigration, only to find that they had these automated personal machines that we could use to create the immigration slips that we needed.
So we go together since we are a family, and one by one we scan our passports and the machine takes our pictures.
I was last to scan my passport and take my photo, and when the machine printed our little papers with customs information mine had a giant X through it.
Underneath it said for me to go see a Passport Something or other officer.
So we got in line, and we showed the dude our information, he asked us some questions socially, stamped our passports and our custom papers, and then we were on our way to the baggage claim.

Ohhh boy, let me tell you the entire baggage claim area was jam packed!
Like, seriously! Tons of luggage coming out of everywhere, people pooling everywhere, and all of the huge trolley-like carts being claimed by people left and right.
I saw what looked like a foreign diplomat shaking his head as he had to wait for one of the carts for his luggage.
So we waited forever to get all our luggage, and then we had to go hunt for a dude to help us load our luggage and take it to where we needed to go.

Well... they put all the trolleys over to the side, and we had to go through this long line to exit the entire area, a line that luckily moved fast.
So we finally get all the way through, and no one is with our trolley.
We can't get it, so we look around and point to our luggage, asking about it.
This black-haired asian dude, with this gray jacket, a walkie talkie, and long black pants pointed towards the exit and told us to shoo.
We started to leave but then Anna and I looked at each other and we realized that he didn't understand that we were missing our luggage.
That we meant that we needed it, not that we didn't know the exit was where the signs were pointing for us to go and where everyone was going.
So we talked to him again and pointed to the trolley standing by itslef, and he then helped us get a dude to take our stuff for us. Sweet.

Okay, so we get out there and I needed to call the pick-up service that our parents had paid for and had arranged to pick us up from the airport, to figure out where they were going to pick us up.
I am the only one among the three of us who had an American phone number, since I go to college in America.
Also, since I pay the bill automatically everything month it should auto-renew and should work.
Well, it didn't. So I had to call my phone company, which has no live assistance whatsoever, to pay the bill.
So here the dude is waiting there with our luggage, while I spend like 10 minutes on the phone just to pay the bill so I can call the dude.
Well it all works out and then I find out that the guy will be there shortly.
Cool, sweet.

Well the dude calls us, and is like "Yo, I am at Terminal 1. Where are you?"
And I am all like, "I am too. Are you near the pickup area, or are you over by the other side?".
Turns out he was on the other side, by which I mean there was a crosswalk and then another little area where cars could stop to pick up people, like a little island type of thing only really long.
He asked me if we could go to him, even though he knew the three of us had 6 items of luggage!
I was like, ehh no we have too much luggage, could you come here?
And he was like, "okay".
So he drives on over and I see him, largely thanks to Elsa's suggestion that I go out where he could see me and I him.
Well, he pulls on over, and then puts the luggage in the car with ample help from me, as he was a scrawny guy like myself I couldn't even contemplate allowing him to load it alone, plus he asked me for help, and then we were off!
I was amazed by all the beautiful sights we saw as we drove around, as even though it was night I was still able to see beautiful lights and bridges and all sorts of interesting things.

We even drove through a china-town! XD
Unfortunately I began to close my eyes as the trip took longer and longer, and while I don't think I fell a sleep I did not see as much of the surrounding areas as I became more tired.

Well, eventually we arrived at our house in New Jersey.
Our Grandfather came out to greet us and pepper us with kisses and hugs, and we took all the luggage in through the garage.
Grandfather was so excited, he just took us on this huge tour of the house, even though we were all so tired and didn't really care.
Well, I didn't really care all that much, I was just so tired.
Well, anyway, somehow all the noise and and excitement culminated in me staying up real late, by choice of course, and I drifted off to sleep on a sofa.
(I didn't mention it, but I showered before bed, which is probably one of the reasons I was up for a while.)

The next morning the delivery dude arrived, and I got the food our parents had ordered for us in my pajamas.
I have been pretty jet-lagged ever since, and even took a long nap today (the day after the deliver dude stuff)

New Jersey is really quite beautiful, and there are squirrels and wildlife everywhere! :D
Also I got to see and cuddle our little doges! ^u^

Not to mention the American food, which is simply awesome! :)
(Not necessarily healthy though, mind you)

Well that was a mouthful! :D
I think I am done writing about this for now! XD
I will write more soon when I have more to write our about or more I wish to discuss :)

Thanks for reading! :>
Remember that I am jetlagged as I write this, so please forgive any weirdness you see that is abnormal for me. ;P

'Til next time! :)

~James








- Posted using BlogPress from my iPad

Location:New Jersey

Friday, May 9, 2014

Mathematical Intuition: The Cyanide of Standards-Based Curriculum

Mathematical Intuition: The Cyanide of Standards-Based Curriculum:

I just finished reading a 25 page paper titled "A Mathematician's Lament", by Paul Lockhart.
This document, more than anything else, speaks volumes about what exactly is wrong with our modern school educational systems. The problem is we kill all creativity, all intuition, all beauty, from the subjects we teach.
Of course the abstract concepts we teach have their importance and place, but they should be taught in the context of, and as a derivate of, the natural creative and explorative processes inherent in the actual subjects themselves.

It never ceases to baffle me how we teach Math. Even as a Math tutor, I have found my fellow tutors, and especially the students, telling me that we don't need to teach them the WHY behind anything: simply HOW to solve their problems, irrespective of the reasoning behind it.
This does not lead to them knowing or even understanding math, and only compounds their issues when they get to higher levels of math.

If you are only taught how to solve specific problems without THINKING yourself then of course you will find you can't solve all the problems on your exams! The secret is that solving all the problems requires CREATIVE application of the concepts taught in class, and yet in that very class you are not taught to creatively apply or use those concepts!
What a contradictory way to learn math!
No wonder so many students fail, they are prescribing to the teaching model while the testing model is a vapid shell of the creative process that is inherent in REAL mathematics, and they cannot comprehend how their rote memorization, what they are taught and encouraged to do, has failed to land them in good graces.
It's sad, it's troubling, and it is completely unnecessary and is a really bizarre and abnormal model for teaching.
Oh, except it is not abnormal: it's the standard! Ha!

The fact that I can find people in higher level math courses, math majors, who do not know where the double angle formulas or half angle formulas come from, who don't understand the beauty and interconnectedness of everything we do in math, continues to shock and baffle me.
Do students simply rote memorize everything in High School?
The answer is: yes, yes they do.
And is it their fault? No, they don't know better, and everyone knows your GPA takes precedence, particularly before you get into your dream college.

The problem is the way they are taught and the fact that teaching has been largely reduced into a passive activity for students.
Sure, they can do assignments and use what they are taught, but they aren't engaged, there is no dialogue, no active suggestions or explorations to get people thinking.
They aren't even taught in the historical and exciting context from which all this "Math stuff" comes from!
How many opportunities for original mathematical thought have been passed over in favor of the standard model of passive teaching and note taking?
Or, rather, in favor of lecturing I should say, the current model hardly passes for "teaching".
How much originality and creativity does note-taking really involve anyway?


Our students are never taught or told to play with math, to discover interesting and cool things for themselves, to have fun and gain a sense of intuition for where everything comes from and what place everything has in the greater context.

The only reason I was so excellent at math in High School, and continue to be quite decent in college, is that I actually understand and care about where things come from in Math, I love the history and context, but most importantly of all: I play with math and as a result am accustomed to creative interpretation and intuition when it comes to math.

When I understand where a lecture is headed before we reach there it is not because I read the textbook ahead of time, it is because I have developed my sense of mathematical intuition and mathematical creativity.
I have yet to meet a student who does math for fun as I often do.

I love math and find it to be extraordinarily fascinating and fun, as I do English, History, and the sciences.
People are always shocked when they find out I am a math major, largely due to my passion for writing and my love of poetry and English.
Hahahaha, people have such screwed up perceptions of everything, especially math.

I'll tell you what I told my English professor,
Once you get far enough out (abstract) everything blends together, the differences are artificial.
Math is beautiful and so is English(Or language and literature for that matter, to be more broad), and the ties between them and between any subjects are interesting.
Most notably, in the right context, every subject is beautiful and gorgeous in its own right.
This is where we often fail in teaching: we fail to provide that context, to provide that context so desperately needed and to provide a platform that is both engaging, natural, and inspiring.

These failures are what, I am convinced, above all else, differentiate excellent teachers from horrendous teachers, and are what make or break an excellent education.

I understand why the system is the way it is: it is easier to measure and rank students the way the system is now.
Easier to teach from a prescription than from the soul, easier to try to mechanize and remove the humanity from the experience than to make an organic and authentic, high-quailty, natural experience for students to learn from.
Schooling and Education is largely based on ranking students for some God-awful reason, not about learning or about passion or about making discoveries never before made, nor about creativity.
This is why school often kills the natural interest and joy students have in subjects, why it fails so epically to actually do what it theoretically is supposed to do, and is why I intend to create my own nonprofit entity for learning that does everything the school system does wrong right, without any of the pressures or baggage the educational system has.

Learning for the love and sake of it.
I am a purist, make no mistake.
I believe in doing things for the sake of the things themselves, and being a philomath and bibliophile, I intend to make an entity for learning that actually cares about learning itself, not ranking individuals pointlessly and/or grubbing money to perpetuate an antiquated and shitty system of education.
We all think that college and school is about learning, but no there are ulterior reasons for why things are the way they are, and believe me: things are not optimal if these institutions are actually here to help us learn.
These decaying and horribly inept systems in which we compete and memorize have little to do with learning and everything to do with ranking and competition, things that are, true, american, but things that do little to augment or improve the learning process. (Well, sure you can measure and track "improvement", but you, and I am certain your students, can surely tell when a student is struggeling? And if the dialogue in class was truly bi-directional, you wouldn't an abstracted way to measure and analyze students and their issues: they would tell you what they need help with.)


Until things change we will just have to grit our teach and form clubs that attempt to augment and counter the passion-killing modern educational system.


I will write more on this, this is far from over.

~James

- Posted using BlogPress from my iPad