Wednesday, July 6, 2022

Some Thoughts about the Future of the Linux Desktop

Now is time for a somewhat incoherent ramble about my thoughts about the Linux desktop.  Earlier today was a post on Hacker News regarding an announcement from the GNOME development team that GTK 5 will be exclusively for Wayland, thus dropping support for the venerable X Window System.  I have many thoughts about the transition from X11 to Wayland.  I won't share all of them, but while I believe that X11 is quite complex and a replacement will be welcome, I'm also concerned that many good aspects of the X11 ecosystem, such as the ability to run GUI applications remotely, the ability to choose between a wide array of window managers, and support for non-Linux operating systems such as the BSDs, will be lost partly due to the consequences of how Wayland is designed and also due to the effort required to convert window managers for X to Wayland compositors.

I'm also concerned about the influence that influential big players have on the Linux desktop community despite the feelings of the overall community.  We've seen this play out with the controversy behind GNOME 3 (which led to the splintering of the GNOME 2 userbase into three competing desktops: GNOME 3, MATE, and Cinnamon), the stewardship of the GTK toolkit (is it the GNOME toolkit, or should its maintainers keep it a general-purpose toolkit, recognizing that non-GNOME desktops and applications depend on it), and the adoption of systemd.  It seems that certain decisions have been foisted upon the Linux community.  Many of us are drawn to free, open source software because we don't like the decisions foisted upon us by Microsoft or Apple.  But to our dismay, we can't escape this even in the FOSS ecosystem.  "If you don't like it, then make a fork and modify the code," some people retort.  But one has to be really dedicated to learn and modify software that contains hundreds of thousands of lines of code.  Thus, many of us have no effective choice but to live with the changes, which leads to resentment, which leads to flamewars on social media.

But does it have to be this way?  Is there a way for technically-inclined users to get the desktops that they want?  I believe there is a pathway to get there, and the pathway is through embracing simple, modular, composable software rather than building large edifices and platforms that seek to directly take on major players like Apple, Google, and Microsoft.  I believe that we can learn from projects such as Smalltalk, Project Oberon, Plan 9, OpenDoc, and Microsoft's 1990s technologies (OLE, COM, ActiveX) and update this for the 2020s to build component-based GUIs.  I also believe that we can take lessons from the STEPS project, which was an effort from Alan Kay's Viewpoints Research Institute to build an entire operating system with a GUI in just 20,000 lines of code.  Reducing the amount of code needed to build a complete system may revolutionize open source software, since this may enable users to be better equipped to make contributions to the code base since the code would be easier to understand.  There would be far less complaining about GNOME, systemd, and other software projects if it were easier for users to respond to the common "if you don't like it, then fork it" retort by doing exactly that.

Tuesday, April 19, 2022

Plan for Studying for Level N3 of the Japanese Language Proficiency Test

It's been a while since I last made a blog post.  A lot has been going on, both in the world and also in my personal life, but I thought I'd share my plans for studying for Level N3 of the Japanese Language Proficiency Test (JLPT), which will be held on Sunday, December 4, 2022 provided that the pandemic won't worsen around that time.

I've been studying Japanese on-and-off for over 22 years, ever since I was a fifth grader.  In high school I attended a Saturday Japanese language school called Sakura Gakuen in Sacramento, and after graduating from Cal Poly with my bachelor's degree, I moved to Japan for eight months to intern at Fujitsu Laboratories Ltd. in Kawasaki.  Living in Japan was one of the greatest experiences in my life.  My Japanese skills improved dramatically while I was in Japan.  Unfortunately my Japanese skills laid stagnant since returning to America due to the demands of graduate school and other things happening in my personal life.  While my Japanese didn't worsen thanks to subsequent vacations to Japan as well as watching Japanese dramas and listening to Japanese music, my Japanese didn't dramatically improve.  I attempted Level N4 of the JLPT back in December 2012.  While I did very well on the vocabulary section (I credit that to spending over a year studying the Core 6000 Japanese vocabulary deck via Anki), and while I passed each individual section, I did not meet the overall passing bar for the exam; it was the listening section that was the most difficult for me and where I scored the lowest.

Recently I've been getting serious about studying Japanese again for personal and career reasons.  I've dreamed of becoming fluent in Japanese for over 20 years, and I want to put in the hard work to fulfill this dream.  Back in October I started taking a free Japanese course hosted by the Santa Clara Valley Japanese Christian Church.  The church offers Japanese classes at various levels and are taught by skilled Japanese teachers who are also native speakers.  I am currently taking the highest level offered, which uses Genki II as the textbook and meets every other week (due to the COVID-19 pandemic our courses were held online via Zoom).  The classes are at a gentle pace; there are no homework assignments or exams.  This fit well with my lifestyle, since at the time I started the class I was teaching a course on programming languages at San Jose State University.  The teacher is very friendly, and I enjoy interacting with her and the other students; since there are less than ten of us we're able to get individual attention during each biweekly lesson.

Since the school year at Santa Clara Valley Japanese Christian Church is ending and there's no summer instruction, I've thought about my next steps.  I want to take Level N3 of the JLPT.  My goal is to become fluent in Japanese, and part of this goal includes taking Level N1, the most advanced level, of the JLPT, which I want to take in either 2024 or 2025.  Since I have until December 4 to prepare for the N3 exam, and since my current textbook (Genki II) only covers JLPT N4 material, I'm going to need to increase the intensity of my studies.  However, I have more free time this year; I don't plan to teach during the rest of 2022.  Therefore I will be using some of my free time to prepare for level N3 of the JLPT.

Below is my plan:

  1. Finish Genki II, which covers the material needed to pass JLPT N4.  I should be able to finish this textbook no later than mid-July.
  2. Complete the entirety of Tobira, an intermediate-level textbook that is said to cover JLPT N3 material according to various online forums.  I plan to finish this textbook no later than the end of October.
  3. Beginning in September, begin taking practice JLPT N3 exams, making sure to brush up on weak points after each attempt.
  4. Throughout the next eight months I will be spending more time building my listening comprehension skills in Japanese.  I plan to do so by watching more Japanese dramas and movies, as well as using Japanese in conversation more.
  5. I am also studying the Mangajin series, which can be found here.  I recently saw a Hacker News post recommending the series.

I'm looking forward to making more progress with my Japanese studies and climbing each JLPT step until I make it to Level N1.  I'm glad I finally have the time again to take my Japanese studies seriously.


Monday, February 15, 2021

Note to Self When Setting up 2GB NVIDIA Jetson Nano: Ditch the Network Connection During Setup

During this Presidents Day weekend, I received a 2GB NVIDIA Jetson Nano that I purchased online from Micro Center about a week ago.  At the time of purchase, it was on sale for $49, but as of this time of writing it has reverted to its list price of $59.  I needed a CUDA-capable GPU for a side project I'm working on, but due to the ongoing inflation in GPU prices due to the effects of COVID-19, I figured that purchasing a Jetson Nano would be my best option for now.  Besides, if I need more horsepower than what the Jetson Nano provides, I could always rent a GPU instance from Amazon.

NVIDIA Jetson Nano Equipment

I followed the installation instructions from NVIDIA's official guide.  However, after installation, I found that I couldn't boot my Jetson Nano after shutting it down.  I ended up having to re-image my SD card.  The next time around, however, I decided to leave the included WiFi adapter disconnected from the Jetson Nano instead of having it connected during my first installation.  By doing this, I was able to restart from a cold shutdown without any problems.  I later connected my WiFi adapter, and my Jetson Nano works properly, whether the WiFi adapter is connected at power-up or after power-up.

I believe the problem had to do with a system update that occurred the first time I set up my Jetson Nano.  By not having a network connection the second time I set up my Jetson Nano, it did not update the operating system; thus I did not run into the same startup problem as before.

So, the summary is this: when you initially set up your 2GB NVIDIA Jetson Nano, do not connect it to the network until after it is set up.

Wednesday, January 13, 2021

Nice Interview of Professor Stephen Freund On Teaching Programming Languages at a Liberal Arts College

This is a nice interview of Professor Stephen Freund, who works at Williams College and specializes in programming languages.  I haven't had the experience studying at a liberal arts college, but I am familiar with undergraduate-focused universities; I earned my bachelor's degree at Cal Poly San Luis Obispo, and I recently taught a course on programming language paradigms and principles at San José State University.  It is always nice to read about others' experiences and to obtain advice.

Monday, October 26, 2020

Interesting Opinion Piece at The Chronicle

On my Facebook feed I saw an interesting opinion piece published on The Chronicle by André da Loba titled, "Is Deep Thinking Incompatible With an Academic Career?"  As a computer science researcher who is interested in long-term, speculative research projects, and also as a person who, like the author, grew up in a low-income family and was considered a "gifted student," this article resonates with me, and I recommend reading it.

Our economy promotes short-term gains and not long-term initiatives; I blame over 30 years of artificially-low interest rates for this. This short-term thinking has affected not only industry, but also academia.  The heyday of 1970s-era Bell Labs and Xerox PARC with their focus on inventing the future, which requires long-term, risky research, has long ended; it's all about getting something shipped next quarter. Academia is not much better with its grant cycle and its "publish or perish" demands.  I believe one of the biggest problems in modern American society is its structural disregard for the future. Instead of saving and planning for the future, we collectively spend and live like there's no tomorrow. But what happens when tomorrow comes? From the standpoint of research, where will tomorrow's inventions come from if there's so much emphasis on next quarter's earnings or the next performance review cycle?

Alas, we need to pay our bills, and so we adapt and make do. But I'm starting to think that there needs to be an "alt-economy" for researchers, scholars, and creators who want to create, build, and pursue scientific discovery without the pressures of modern industry and modern academia.  I'm always contemplating my career, and I'm considering pursuing this vision when it is time for me to make my next career move.

Saturday, October 17, 2020

Some Updates Regarding My Flexible, Composable, Libre Desktop Environment Project

Back in April I posted a proposal for a flexible, composable, libre desktop environment that will run on top of Linux and various BSDs.  Since April I have been fleshing out some of the design decisions, though I haven't started writing code yet, partly because there are other design decisions I want to make before coding, and also because there are some technologies that I still need to learn; I have experience building GUI applications (particularly using GTK and Glade), but I'm not as familiar with the lower levels of the graphics stack, and thus I need to gain more familiarity with 2D graphics programming in order to carry out this project.

Here are some key decisions I have made:
  • The desktop environment will be written in Common Lisp in order to take advantage of the Common Lisp Object System, a dynamic object system that supports multiple dispatch.  I feel that using a dynamic object system will make it easier for me to implement a component-based desktop environment.  I plan to write demo programs that are also written in Common Lisp.
  • The desktop environment will be for Wayland, which is expected to replace X for new GUI development in the future.
  • This desktop will be written using its own BSD-licensed GUI toolkit, written for Wayland (although support for non-Wayland backends may be possible) and also written in Common Lisp.  There seems to be few options for BSD-licensed GUI toolkits; GTK+, Qt, and GNUstep are under the LGPL.  Having a BSD-licensed toolkit will maximize its adoption.
  • This new GUI toolkit will be fully themable; programmers will be able to describe windows using an S-expression syntax.  For example, we could describe a window that contains the label "I'm a window!" and two buttons (one to change the color of the label and the other to close the window) using two S-expressions: one for describing the contents of the window, and one for describing its format:
; Content definition file
(window main
  (label i-m-a-window)
  (button change-color)
  (button close))


; Layout definition file
(window (main)
  :size (300 400))


(label (i-m-a-window)
  :text "I'm a window"
  :font "Helvetica"
  :font-size 20
  :position (20 5)
  :align left)


(button (change-color)
  :text "Change Color"
  :size (50 150)
  :position (100 100))


(button (close)
  :text "Close"
  :size (50 150)
  :position (260 100))


  • Underneath the GUI toolkit will be a 2D graphics system that renders directly to a Wayland pixel buffer.  I am still exploring possible design options, but I've always been intrigued by the Display PostScript system used by NeXTSTEP and Sun NeWS, and I personally love macOS's Quartz 2D graphics system, which uses the same graphics model as PDF.  I am leaning toward also using PDF as the 2D graphics model of this desktop environment.
As I mentioned before, I haven't started coding yet.  Because there are still many technologies I need to learn, as well as other responsibilities that I have, I anticipate development of my side project to be slow.  Nevertheless, I hope to have a working prototype of the desktop environment completed sometime in either late 2021 or early 2022.

Tuesday, October 6, 2020

Where Did Personal Computing Go Wrong: The Abandonment of User Empowerment, The Rise of "Big Platforms," and Solutions

Earlier today I found out about a documentary being created by Daniel Krasner, Matt Rocker, and Eric Gade called Message Not Understood, which plans to show the history of personal computing and how personal computing deviated from the values that pioneers such as Alan Kay (a former Xerox PARC researcher who worked on the Smalltalk programming language/environment and who greatly contributed to the development of the graphical user interface) imparted.

I believe that one value that was originally stressed by pioneers such as Alan Kay and Bill Atkinson (an early Apple employee who created Hypercard, a programming environment that was quite popular with non-software engineers before the Web became widespread) that has fallen by the wayside is the notion of empowering the user through technology.  Personal computers were supposed to be about making people more productive by having access to computational power at home.  Computational power was no longer controlled by gatekeepers; it could be harnessed by anyone with a few thousand dollars and the willingness to learn.  The transition from command-line interfaces to GUIs such as the classic Mac OS and Windows helped democratize computing by making them more accessible to people who found command line interfaces difficult to use.  When the World Wide Web started reaching people's homes in the mid- and late-1990s, this added an entirely new dimension of power: the ability to have access to large amounts of information and the ability to communicate with people throughout the world.

What I believe was the fundamental shift that transformed personal computing (and, by extension, the Web) away from empowerment is the realization from industry giants that the platforms that they built, whether they are operating systems, web browsers, or web services, were lucrative sources that they could exploit.  Making the user dependent on a platform resulted in additional revenue.  The platform has to be good enough for users to be able to perform their desired tasks, but the platform can't be so empowering that it allows the user to operate in a platform-agnostic way without imposing serious costs, both in terms of inconvenience and sometimes in terms of money (for example, it's harder to switch from iOS to Android when one has invested hundreds of dollars in iOS apps that must be repurchased for Android).  Microsoft realized how lucrative platforms are when it made a lot of money selling MS-DOS licenses in the 1980s, and we are all familiar with the history of Windows and Internet Explorer.  I am of the opinion that Apple shows favoritism toward its walled-garden mobile platforms over the relatively-open macOS, and macOS is becoming more closed with each recent release (for example, the notarization requirement in later versions of macOS).  In some ways Google Chrome is the new Internet Explorer, and Facebook is the dominant social networking platform.

I argue that innovation in personal computing has stagnated since the advent of smartphones in the late 2000s.  Windows 7 and Mac OS X Snow Leopard, both released in 2009, are still widely praised.  Even in the world of the Linux desktop, which has been less affected by commercialism (although still affected in its own ways), GNOME 2 received more praise than the controversial release of GNOME 3, which led to the development of forks such as MATE and Cinnamon.  In my opinion, there are no compelling advantages of Windows 10 (besides Windows Subsystem for Linux) and macOS Catalina over Windows 7 and Mac OS X Snow Leopard.  But why would the world's biggest platform maintainers spend money on innovating these platforms when they are already so lucrative today?  Coincidentally, any one with a compiler could write a Windows app or (in pre-notarization days) a macOS app, but distributing an Android or iPhone app requires paying for access to an app store.

In many ways computing has become just like the rest of the media industry; computing is a medium, after all.  There are plenty of technologists who work on their craft who write excellent software and who help push computing forward, but it's hard to compete against platforms with valuations worth ten or more figures.  But it's the same with media, literature, and film; for example, there is plenty of good music being created by passionate people, but unless they are backed by huge budgets, they'll never reach the Top 40, yet the Top 40 is often lowest-common-denominator stuff.

Could industrial research turn things around and make personal computing more innovative?  Unfortunately I am pessimistic, and this has to do with the realities of research in a global economy that emphasizes quick results.  (I personally feel this is fueled by our economy's dependence on very low interest rates, but that's another rant for another day.)  The days of Xerox PARC and Bell Labs where companies invested in research for the pure advancement of science are over; it's all about short-term, applied work that has promises of an immediate ROI.  Moreover, why would Google, Apple, or Microsoft fund research on making personal computing more empowering when such empowerment would threaten the bottom lines of these companies?

What's the solution?  I believe future innovation in personal computing that encourages user empowerment is going to have to come from academia, government, non-profits, non-VC-funded companies, or hobbyists; there is no incentive for the major platform companies to switch.  One idea that I'm thinking about is the development of some type of "PBS for personal computing" as an alternative to "big platforms."  I am fond of The Internet Archive, as it is an example of a non-profit that is so important to the Web, and I hope the situation at Mozilla improves.  I also believe another important step to user empowerment is making programming easier for casual users, and making it easier for casual users to contribute to open-source software.  Back when Alan Kay was at his Viewpoints Research Institute, researchers there worked on a project called STEPS, which attempted to build a fully-working desktop environment with a minimal amount of code by developing domain-specific languages for implementing each part of the system.  If I remember correctly, they were able to implement a complete desktop environment with just 20,000 lines of code, most of it written in domain-specific languages.  The purpose of STEPS was to develop a system that was just as understandable as the Apple II and Commodore 64 and MS-DOS environments of the past, yet was just as feature complete as modern desktop environments, which are implemented in hundreds of thousands or even millions of lines of code, which is too much code for one person to understand.

Sunday, June 14, 2020

Another Nice Blog Post about Component Software

I just ran across another great blog post about component software, this time from Graham Lee.  This article describes Brad Cox's vision of software ICs, components inspired by physical integrated circuits.  Brad Cox is the creator of Objective-C, a superset of C that implements a Smalltalk-like object system and is the foundation of the application-level APIs of NeXTSTEP, macOS's Cocoa API, and GNUstep.

Tuesday, April 21, 2020

Nice Blog Post about Composable Software

I just found this 2013 blog post from Paul Chiusano advocating composable software, including for web applications.  A lot of the ideas overlap with the ideas I discussed in my previous blog post proposing a new desktop environment for Linux/BSD that emphasizes composable software.

Sunday, April 19, 2020

A Proposal for a Flexible, Composable, Libre Desktop Environment

Note: I posted a better-formatted version of this document here as a PDF file.  Unfortunately there are some formatting glitches with Blogger's HTML editor.

Disclaimers:

  1. This is not an official project. This document describes my thoughts about a desktop environment intended for Unix-based operating systems that is libre (i.e., free software per the definition of the Free Software Foundation), is composable (where users can create command-line and GUI tools by connecting smaller tools together), and is flexible (where software tools do not impose a particular user interface, allowing the user to modify the UI of the tool to best suit the user's preferences). Whether or not I will work on it is something I still need to consider, but I'm sharing my thoughts for feedback to see if pursuing this as a side project is worthwhile.
  2. I will be expressing many opinions in this document. In the words of LeVar Burton, "You don't have to take my word for it."

Problems with Today's Desktop Environments and Applications

  1. Smartphone- and tablet-based UI/UX metaphors have been inappropriately applied to some desktop environments, resulting in a loss of usability compared to the desktop environments of the 2000s. This is especially apparent in Windows 8, GNOME 3, and (to a lesser extent) Windows 10. When Apple introduced the iPhone and iPad in 2007 and 2010, respectively, there was much talk in the personal computing world about mobile computing replacing desktop computing. The developers of Windows and GNOME were heavily influenced by this thinking, and they sought to develop versions of their desktops that aimed to be suitable for both desktop and mobile computing. Now, I must commend the developers of Windows and GNOME for taking risks. Windows 7 and GNOME 2 were well-received by many people, and it was a gamble changing these environments. The results were Windows 8 and GNOME 3. While these environments were well-received by mobile users, some desktop users were disappointed, feeling that the user experience was a downgrade from Windows 7 and GNOME 2. For Windows this led to people refusing to upgrade from Windows 7, and for GNOME this led to the fracture of the GNOME-based desktop community into GNOME 3, MATE, and Cinnamon, with both MATE and Cinnamon aiming to serve those alienated by GNOME 3’s changes. I believe the lesson in this is that developers of desktop environments should respect the fact that desktop computing has fundamentally different use cases than mobile computing, and trying to create a common interface winds up in misapplying UI/UX metaphors.
  2. The UI/UX design fads of the 2010s, including “flat design” and the gratuitous use of screen space, are a usability regression from the desktops of the 1990s and the 2000s. Consider the Windows 95 and Mac OS 7.5 interfaces. It is largely clear to see which elements are clickable and which ones are not. This held true as late as the late 2000s with Windows 7 and Mac OS X 10.6 Snow Leopard. Contrast that with the flat interfaces of a lot of software products today where it’s much harder to visually determine which elements are clickable and which ones are not. It’s not just flat design that’s problematic; there are other design decisions I disagree with. In macOS, what were once easily-visible scroll bars that were colored in bright blue have been replaced with thin, gray scroll bars that are harder to use, with the assumption that we’ll be using our mouse’s scrollwheel or our laptop’s touchpad’s scroll gestures instead of the actual scroll bar. In Windows 10, the title bars look excessively large relative to the menu bar (the reason for the large bars is to be able to move the window in a touchscreen interface; this is an example of a design decision that would be appropriate for mobile computing but is unnecessary in desktop computing), and its windows in new-style programs often consume large amounts of whitespace. I would love to be able to switch to Classic mode (i.e., a Windows 2000-style interface) in Windows 10; on Windows I feel most productive in Classic mode. There’s just one problem….
  3. Modern desktop environments and applications are increasingly curtailing the ability for users to control the appearance of their desktop environment and their applications. For Mac users this is not a new development. Ever since the transition from Mac OS 9 to Mac OS X in 2001, Apple has not provided mechanisms for users to apply themes that are different from the Mac OS X Aqua interface. Windows, however, used to support many modifications to its default themes. This changed in Windows 10 when it became more difficult to theme the desktop environment. In 2019 some GNOME developers wrote an open letter urging Linux distributions to not apply custom themes to their applications. Here is a key excerpt from the letter:
    “On a platform level, we believe GTK should stop forcing a single stylesheet on all apps by default [emphasis original]. Instead of apps having to opt out of this by hardcoding a stylesheet, they should use the platform stylesheet unless they opt in to something else. We realize this is a complicated issue, but assuming every app works with every stylesheet is a bad default.”
    Although the signatories of the open letter have explicitly stated that they are not opposed to end-users “tinkering” with the style of their applications, I feel that their suggestion to require GTK applications to explicitly opt into theming will, if implemented, make it more difficult for users to apply themes to their desktop environments and applications.
  4. Many desktop environments and applications lack the ability for users to customize the UI based on their needs and preferences. UI/UX decisions are a major cause of complaints about software. In some situations users respond by rejecting that software, instead seeking out alternatives. In other situations, though, sometimes the user doesn’t have a choice, but instead must learn how to cope with the UI.
    But what if users had another choice? What if users were able to modify the UI of their software as they saw fit without resorting to modifying its source code? For users who are not comfortable with adjusting their UI settings, what if they could download UI configurations from a repository of user-submitted configurations, including from UI experts who ran formal usability tests? This would increase user satisfaction with software products, since users won’t feel that they have to accept the UI decisions that were made by the product’s developers and designers.Microsoft took a step in the right direction by allowing its ribbon in Microsoft Office to be user-modifyable. When the ribbon was introduced in Office 2007, it had few configuration options, and it was controversial among long-time Office users, particularly since there was no way to switch back to the menu-and-toolbar-based interface of Microsoft Office 2003. However, while later versions of Microsoft Office still do not provide a means to return to menus and toolbars, the ribbon has been made to be much more customizable.

Monolithic Applications versus Composable Tools

Contemporary desktop environments promote the use of monolithic applications where the application itself is expected to provide the functionality that users need in order to perform a task. Often these applications are “silos,” where they tend to not interact well with each other unless they are part of a common suite of applications such as Microsoft Office and the Adobe Creative Suite. While some of these applications may provide internal scripting support (such as Microsoft Visual Basic for Applications), most applications don’t provide external scripting support (e.g., the ability for a bash script or a Python program to be able to access Adobe Photoshop’s image cropping functionality in order to programmatically crop images).
I contrast this with the traditional Unix approach of combining small tools to perform large tasks. While there are many tenets of the Unix philosophy, there are three tenets that I will emphasize the most:
  • There is no distinction between user and programmer.
  • Programs should do only one thing, and do them well.
  • Users are encouraged to combine small tools into larger tools using mechanisms such as pipes, I/O redirection, and shell scripting instead of developing large, monolithic applications that perform multiple tasks.

This philosophy is expressed and taught in the 1984 book The Unix Programming Environment by Brian Kernighan and Rob Pike, Bell Labs researchers who have played a major role in the development of Unix.
The idea of a user environment as a suite of composable tools is not inherently limited to command-line environments. OpenDoc was a project spearheaded by Apple, IBM, and other companies in the mid-1990s that encouraged software vendors to develop and sell components than can be combined by users and other developers to create larger solutions that were either in the form of a document or a larger application. The business goal was to challenge the dominance of large, monolithic applications by creating an ecosystem of smaller, composable utilities, allowing for more software companies to be able to compete in the software marketplace and also providing users and developers increased flexibility in their workflows. These components would run on the classic Mac OS, Apple’s eventually-cancelled Copland project, IBM OS/2, and other supported operating systems. Unfortunately, other than the influential Cyberdog web browser and a small handful of other OpenDoc components, OpenDoc did not last very long in the marketplace, and its impact was limited. OpenDoc’s development stopped in 1997 when Apple cut many engineering projects in order to focus on adapting the technology from the newly-acquired NeXT to its operating system strategy, which ultimately led to the release of Mac OS X 10.0 in March 2001.
Despite this setback, I believe OpenDoc was a victim of Apple’s circumstances, and I believe the ideas of OpenDoc should be re-explored for today’s desktop software.

Composable Tools Are Objects

One important key to building composable tools that work in programmatic, command-line, and GUI environments is using objects. OpenDoc was a C++ API backed by IBM’s System Object Model. However, there are rich dynamic object models that we can explore as alternatives, including Smalltalk’s derivatives such as Squeak and Pharo, Objective-C (which was heavily influenced by Smalltalk), and the Common Lisp Object System. By using dynamic objects as the foundation for software components, we can overcome the limitations of Unix’s pipeline approach to program composition, which relies on the weak link of parsing streams of text, and we can take advantage of the flexibility that dynamic objects provide as opposed to static objects. In fact, we can think of Unix utilities as objects with a run() method that accepts the utility’s command-line arguments and outputs a string. By explicitly expressing tools as objects, we allow for a much wider range of inputs and outputs that are not limited to text streams, resulting in a richer experience.

Separating UI from Core Functionality

A very important design tenet when developing composable tools is to separate the tool’s user interface from the tool’s core functionality. By not tightly coupling the UI with the underlying functionality, it is easier for the tool to be used under a variety of circumstances, whether those circumstances are (1) being invoked as an API call, (2) being run as a command line utility, (3) being run as a desktop GUI application, or even other circumstances.
As an example, suppose I want to provide a component that supplies a calendar. The object implementing the core functionality would supply methods such as retrieving the days of the week, figuring out whether the current year is a leap year, computing the numbers of days between two dates, storing events into a provided database, exporting to iCalendar format, etc. The Unix cal utility and GNOME Evolution can be rewritten to use the calendar component. This is how the same core calendar functionality can be used in a variety of settings, with the benefits of being able to use the same functionality without being restricted to a particular application.
This is also a guideline for converting existing software. Suppose GIMP’s core functionality were separated from its interface. This will allow for the creation of programs and command-line utilities to leverage GIMP’s image manipulation features without having to open the GIMP GUI application. This will also allow for the easier development of alternative UIs for GIMP, especially when combined with the ability for users to be able to customize the UI themselves.

UI Customizability and Themability

How will users be able to customize the GUI? I envision this to be a combination of two technologies:
  1. OpenDoc’s ability to merge components in a free-form style as part of a visual container structure known as a Document.
  2. With the exception of Microsoft Office 2007, since at least Microsoft Office 97 there has been extensive support for users to be able to change menus, toolbars, and/or the ribbon as they see fit.
How is this exposed programmatically? Each GUI component exports methods that implement some type of command. For example, a text editor would have commands corresponding to “Save File,” “Find/Replace,” “Delete Specified Lines,” etc. These commands would correspond to either menu items or toolbar buttons. Users can then modify how menus look, whether to use icons or words to describe commands in toolbars, whether to have a horizontal toolbar or a vertical one, etc.
All UI elements would be implemented under a common framework, and the framework chosen or developed will allow theming.

Not a New Operating System

For some time I’ve thought of the idea of creating either a Smalltalk-based operating system (e.g., imagine Pharo running on bare metal instead of as a siloed VM) or a Lisp operating system influenced by Symbolics Genera. The underpinnings of these systems would make an excellent base for implementing the ideas discussed in this document.
However, there are two main challenges with this approach of creating a new operating system:
  1. A new operating system will lack device drivers. One of the things that hinder the development of non-Linux libre operating systems such as Plan 9, Haiku, and ReactOS is their relatively limited driver support. It will be a major effort writing device drivers for a new operating system.
  2. There is also the “chicken-and-egg” problem of switching to a new operating system. Without certain key components such as a web browser (which will require porting Firefox or Chromium, a large effort, or creating a new web browser, which is an even larger effort), it would be hard to convince people to switch to the new operating system. But if the operating system has few users, then developers would be less likely to develop for it.
As much as I’d love to use a Smalltalk or Lisp operating system, I believe that instead of a new operating system, I think the best approach would be to leverage the libre GNU/Linux/BSD ecosystem and to build on top of it. This solves both the problems of device problems and the “chicken-and-egg” problem. Users can still run existing applications and use existing tools side-by-side with new components. These new components can even leverage the same GUI toolkits of existing applications in order to ensure overall system consistency.

Decisions to Make: Object Systems and GUI Frameworks

Two core decisions I’m considering are the object system and the GUI framework. For the object system I am enamored by the powerful Common Lisp Object System and it would allow for Common Lisp’s impressive live debugging features, but Objective-C is appealing due to its ability to call C and C++ code without the use of any wrappers. For the GUI framework I am partial to GNUstep due to its Objective-C foundation, which supports dynamic dispatch and would thus make it easier to implement component-based systems. Using GNUstep also has the side bonus of being able to bring macOS users into the fold and by providing native support for macOS.

Conclusion

Today’s desktop environments and applications suffer from a lack of flexibility, a lack of customizability, and a lack of composability among applications. This document proposed a new type of desktop environment and approach to application development that emphasizes components, objects that can be composed in ways that are even more powerful than Unix’s composable command-line tools. This document also advocates the development of GUI components that can be themed and also have malleable user interfaces. This new desktop environment will be built on existing Unix-like operating systems such as Linux and BSD.

Monday, June 17, 2019

Some Thoughts About GNUstep

Since 2004, when as a high school junior I was first exposed to Unix-based operating systems such as Linux and Mac OS X, I've been interested in GNUstep.  GNUstep is a free, open source implementation of the OpenStep API from NeXT, which later evolved into the Cocoa API, which is used for the creation of macOS applications.  Over the years, GNUstep's mission has evolved to striving to keep up with the additions made to Cocoa in each passing version of macOS.  However, as of this time of writing, GNUstep only guarantees compatibility with up to Mac OS X 10.4 Tiger, which was released 11 years ago; the current version of macOS is macOS 10.14 Mojave, with macOS 10.15 Catalina coming out later this year.

Since GNUstep's conception in the mid-1990s, many people have envisioned a Linux desktop environment powered by GNUstep, whether that be a faithful modern-day workalike of either NeXTSTEP or macOS, or perhaps a completely different desktop environment such as Étoilé, which has its own design and UI guidelines.  However, as of 2019, this vision still remains a dream, with GTK+-based desktops such as GNOME, Mint, and Cinnamon being dominant among Linux desktop users, as well as the original Linux desktop environment: Qt-based KDE.  Some people, including myself, have lamented the fact that GNUstep's progress has been slow relative to these more popular desktops.

This is my opinion, but I believe the following are the reasons why KDE and GNOME ended up taking off while GNUstep's development has been relatively slow for the past two decades:

  1. KDE was announced in 1996 during GNUstep's infancy.  Out of all of the GUI toolkits that were available for free, open source software developers for Linux in 1996, Qt was the only one available that satisfied Matthias Ettrich's needs.  Work ended up starting on KDE, and according to Wikipedia, KDE 1.0 was released in July 1998.  Unfortunately, Qt's license at the time was incompatible with the GNU General Public License, one of the major licenses used by many free, open source software projects.  While many Linux users did not find this objectionable, other Linux users felt otherwise, which ultimately led to the announcement of the GNOME desktop project in August 1997, which was based on the GTK+ toolkit, which was based on The GIMP image editing application and which released its first stable version in April 1998.  GNOME would eventually release its first version of its desktop environment in March 1999.  However, while all of this was taking place, GNUstep was still not finished with implementing the original OpenStep API.  Had GNUstep been ready in 1996 or 1997, there's a strong likelihood that someone like Matthias Ettrich would have built a desktop around it.
  2. Cocoa is a moving target, with changes being made to the API once every year or two on average.  Unfortunately, GNUstep does not have the personnel needed to keep pace with Apple's changes, similar to how the Wine and ReactOS projects are perennially behind Microsoft Windows or how long it took Haiku, a clone of BeOS made by volunteers, to reach beta status (and BeOS has been dead for nearly 20 years!).  My understanding is that GNUstep has been developed entirely by volunteers throughout its history.  By comparison, the GNOME desktop has a long history of corporate backing, and the aformentioned Qt framework used by KDE is commercially developed.  Unfortunately, the fact that GNUstep is over a decade behind macOS in terms of compatibility with Cocoa deters developers who want to use modern, up-to-date GUI frameworks.
  3. GNUstep, being based on OpenStep, is an Objective-C framework, while GTK+ is based on C and KDE is based on C++.  When the GNUstep project started, Objective-C was considered a niche language, and even to this day Objective-C is mostly used by developers of NeXT/Apple platforms.  The pool of Objective-C developers is considerably smaller than those of C and C++ developers.  Plus, with the increased importance of the Swift programming language, there's a chance that Apple may deprecate Objective-C in favor of Swift in the future, further reducing the pool of Objective-C developers.
Even with the challenges that GNUstep faces, I'm still holding out hope that GNUstep will increase in popularity and that GNUstep will one day reach API compatibility with newer versions of macOS, which would make the framework more attractive to developers.  I also hope that the Étoilé project will get restarted in order to bring a modern GNUstep-based desktop to Linux.  Given the increased discontent that some macOS users have over the state of their platform, it would be nice if there were a similar alternative available based on GNUstep.

Tuesday, June 11, 2019

My 2019 Mac Pro Disappointment and Thoughts of a New Operating System


I believe that Apple's announcement of the 2019 Mac Pro at the 2019 Apple Worldwide Developers Conference has finally brought much clarification regarding Apple's position on the Mac.  During the years of 2016 and 2017, Mac users like myself felt that Apple has abandoned the desktop Mac market, particularly for pro users.  After all, the Mac Mini went for years without a refresh after the 2014 model was released, and the previous-generation Mac Pro hadn't been updated since its release in 2013.  But after years of silence, Apple finally broke its silence in April 2017 by doing something that hasn't been done since unrealized murmurs of a PowerBook G5 back in 2004 and 2005 before the Intel switch occurred: Apple announced that a new, modular Mac Pro was in the works and that it would be released at a later date.  2017 and 2018 did not come with any Mac Pro product releases other than a drop in price for the 2013 Mac Pro, but it did come with the release of the iMac Pro and the long-awaited refresh of the Mac Mini.  Finally, on June 3, 2019, Apple finally announced the highly-anticipated new Mac Pro model, which is a user-serviceable, upgradeable, and expandable tower computer that is reminiscent of the Power Mac G5 and the 2006-2012 Mac Pro.


While I believe that this announcement has shown that Apple is still committed to the Mac and that Apple is willing to make very powerful machines for its most technologically demanding customers, I also believe that the new Mac Pro is a disappointment for some Mac users (including myself), and that the implicit statements that Apple is making about its Mac product line has some unfortunate implications for users such as myself.

For about two decades, Apple sold entry-level Power Macintosh and Mac Pro models at the inflation-adjusted price point of $2,500-$3,000.  The Power Macintosh and the Mac Pro were (and still are) Apple's models that provide user-serviceability, upgradability, and (with the exception of the 2013 "trash can" Mac Pro) internal expandability.  Starting with the 2008 MacBook Air and the 2012 Retina MacBook Pro, Macs gradually became less user-serviceable.  RAM started to get soldered onto the motherboard, and batteries became more difficult to replace.  This then started to spread to Apple's consumer desktops: the 2014 Mac Mini has soldered RAM, and many models of the iMac also have soldered RAM.  The 2016 MacBook Pro was the first Mac to have soldered storage, making it impossible to remove the storage device from the computer, which is important for data recovery.  The 2018 Mac Mini thankfully no longer has soldered RAM (although RAM installation must still be done by an Apple-authorized repair center), but it has soldered storage.  Users who wanted user-serviceability and upgradability were pointed to the Mac Pro, Apple's only model that offers these things.

However, when Apple announced the 2019 Mac Pro, it announced a starting price of $5,999, which is double the $2,999 starting price of the previous-generation Mac Pro, making it the highest-priced entry-level Power Macintosh or Mac Pro since the mid-1990s.  For users of previous-generation entry-level Mac Pro models (like myself; I own an entry-level 2013 Mac Pro that I bought in April 2017 after Apple discounted its price), this news is disappointing since $5,999 is a tremendous leap from $2,999.  I was prepared for a $2,999 or even $3,499 announcement, but not for a $5,999 one, which is well beyond my budget for a computer.  Unfortunately, I'm left with the following options when it is time to upgrade, none of which are appealing for me:
  • Sacrifice user-serviceability and upgradability by purchasing a Mac Mini or iMac.  However, user-serviceability and upgradeability are very important for me.  I would like to take advantage of falling prices over time in order to upgrade my computer whenever its necessary over time instead of having to guess my anticipated needs for the next few years and having to buy the upgrades up front at today's prices, not to mention that Apple charges a considerable sum for upgrades.  Moreover, non-serviceability precludes easy repair and easy data recoverability.
  • Scrimp and save for a 2019 Mac Pro.  Don't get me wrong; the 2019 Mac Pro is an excellent machine.  I would love to have one if I had the money.  But $6,000 is steep for a personal computer even on a Silicon Valley computer scientist's salary.
  • Switch to Windows 10 or Linux.  After the controversial 2016 MacBook Pro was released, I actually promptly purchased a refurbished ThinkPad T430 at Fry's for less than $150 in order to reacquaint myself with Windows, which I haven't used regularly since the Windows XP days.  My assessment of Windows 10 is that while its technical underpinnings are solid and its Windows Subsystem for Linux had made it possible for me to do Unix-style programming on Windows (which is one of the reasons why I use macOS: the fact that it is Unix underneath), unfortunately I find the interface gaudy (and the fact that my ThinkPad had a 1366x768 screen didn't help matters since Windows 10's interface seems to be optimized for high-resolution displays), and I find the advertisements, telemetry, and mandatory updates very annoying.  I also tried various Linux distributions, including KDE Neon and Linux Mint (which I currently use).  While I can be productive in Linux, I still find myself missing macOS.  I miss programs like Dictionary.app and Photos.app, and a recent update to Linux Mint 19 has somehow made Japanese text input no longer work with Firefox (although it works with other applications).  I prefer the various Linux desktops like MATE and KDE to Windows 10, but I love the Mac's attention to detail, especially when it comes to font rendering.  I can make do with either Windows 10 or Linux, but I find myself more productive in macOS.  I find that macOS provides a more polished, more consistent, less buggy, and far less annoying experience than Windows 10 or Linux.
  • Build a Hackintosh.  While I find the prospect of using macOS on PC hardware intriguing, unfortunately this is a non-starter for me.  I don't want to sound sanctimonious, but as a professional in the tech industry, I want to respect software licenses, even though I feel that users should be able to have the freedom to install whatever operating system they want on their hardware.  Also, for users who have no qualms with violating the macOS EULA, there are other challenges such as getting iCloud and iPhone integration to work properly on Hackintoshes, and there's also the prospect of Apple rendering Hackintoshing extremely difficult or impossible to do in the future through the use of Apple's T2 chip, which has been included in every Mac that has been redesigned since 2017 with the introduction of the iMac Pro.
Given these options, I'll express a lament about the state of personal computing these days: you can legally have a polished OS tied to restrictive hardware (unless you have $5,999 to shell out for a Mac Pro) or an unpolished OS running on a wide variety of hardware with varying degrees of freedom regarding user-serviceability, upgradeability, and expandability.  However, you can't have both (unless you want to build a Hackintosh): a polished OS running on the hardware of your choice.

What would it take for a new competing operating system to emerge, one that is not restricted to a particular vendor's hardware and yet is polished?  Unfortunately it will take a very large amount of work in order for it to be at par with even Windows 10 and desktop Linux distributions.  Below are the most formidable problems such an effort will bring:
  • There's the classic chicken-and-egg problem of software availability and user adoption: developers are less likely to develop for a new platform unless they're convinced it will attract a significant amount of users, and users are less likely to adopt a new platform if there are no software tools available for them to do their desired tasks.
  • There's the sheer amount of time and resources needed to create a modern operating system from the ground up.  All of our modern desktop operating systems (macOS, Windows 10, desktop Linux distributions) were evolved over many decades.  I believe the last semi-successful example of a consumer OS being built from scratch was BeOS, which was built in the 1990s; I say "semi-successful" because it did gain a cult-following among the users it attracted but it ultimately failed in the marketplace.  Apple's Taligent and Copland projects, both from the 1990s, were radical attempts to build new consumer operating systems from the ground-up, but they were never finished despite the amount of resources these projects were given.
  • Obtaining hardware support for a new operating system is challenging.  Many hardware vendors do not publicly provide the documentation needed for independent developers to write device drivers supporting their hardware, and many vendors are only willing to provide closed-source drivers for popular operating systems (see the chicken-and-egg problem above).  It is possible to perform reverse-engineering to create device drivers, but this is difficult to do with complex hardware and sometimes requires substantial resources.
  • Even though the rise of the Web and mobile computing has made platforms less important today than they were in the 1990s, there is still a need for native software, and there's also still a need to interact with dominant file formats and protocols.  Part of the reason why desktop Linux (and even the Mac for that matter) has struggled for adoption is compatibility with certain, more popular software packages.  Consider how long projects like GIMP and LibreOffice have existed and how they still struggle against more dominant products like Adobe Photoshop and Microsoft Office, respectively.  Part of these struggles include dealing with the files created by dominant software packages, which are often encoded in proprietary formats.  And projects that work specifically on application interoperability, whether at the source or binary level, tend to struggle.  Consider the long struggles of projects such as Wine (a Win32 compatibility layer for Unix-like operating systems), ReactOS (a Windows clone), and GNUstep (a reimplementation of the Cocoa API used in macOS, which is derived from the OpenStep API from the NeXT era).  Now, Windows and macOS are moving targets and thus those aforementioned projects will continue to need to play catch-up and with fewer resources than their corporate counterparts, but unfortunately it took a long time for projects like FreeDOS (a FOSS clone of MS-DOS) and Haiku (a FOSS clone of BeOS) to become mature enough to be useable, largely due to the small amount of resources these projects have relative to the resources that were available to develop the original systems.
  • If the new operating system is commercial, then how do we develop a sustainable business model, especially in a world where people expect software such as operating systems to be free?  If the new operating system is open source, then how do we attract and retain developers?
Now, it is possible to mitigate some of these concerns by building on the work of others.  For example, we can use Linux or one of the BSDs in order to avoid having to write an operating system kernel and also to dramatically reduce the number of drivers that would have to be written.  In fact, this is what Google and Apple did to create Android and macOS, respectively; Android uses a modified Linux kernel, while macOS, derived from NeXTSTEP, was built on Carnegie Mellon University's Mach microkernel and 4.3BSD (later upgraded to FreeBSD in the Mac OS X days).

Another way of decreasing the amount of time needed to embark on such an effort is to take advantage of computer science research that was not available in previous decades.  For example, Viewpoints Research Institute worked on a project named STEPS that sought to dramatically reduce the amount of lines of code necessary to write a full-fledged operating system by using domain-specific languages to write various subsystems.  An implementation of an operating system inspired by the STEPS project may encourage the rapid development of useful applications for it in a style similar to STEPS, thus potentially revolutionizing software development.

I've been thinking a lot about another canceled Apple project from the 1990s called OpenDoc, which was an attempt to make GUI application development more component-based rather than monolithic, which is similar to the Unix philosophy of using small utilities that interact with each other using pipes and I/O redirection.  The ultimate realization of a component-based GUI would be the Smalltalk environment from Xerox PARC, where everything in the environment is an object that can be manipulated by other objects in the system.  I read an insightful comment from the Hacker News forum (https://news.ycombinator.com/item?id=13573373) that states that the Linux desktop might have been more competitive had it embraced an OpenDoc-like style of component-based software instead of trying to fight Microsoft, Apple, Adobe, and other major software companies head on by building large, monolithic software packages like LibreOffice and GIMP.

The challenge with component-based GUIs, though, is maintaining a common standard of UI conventions across components.  UI consistency across applications is one of the strongest suits of macOS, and this is also true of its ancestors: both the classic Mac OS and NeXTSTEP.  For example, although the pipes-and-redirection approach of Unix command-line utilities works very well, unfortunately there isn't a lot of consistency between Unix tools, with argument flags often differing between utilities despite having similar meanings (for example, whether to use -r or -R to recursively search a directory tree depends on the tool).

Despite these challenges, I believe the time is ripe for a polished desktop operating system that serves as a competitor to macOS, Windows 10, and desktop Linux distributions.  This OS should attract users who are dissatisfied with today's current OS offerings and who desire consistency, usability, and reliability.

Saturday, September 20, 2014

I'm Back!

Hello, readers!  I've decided to resume blogging!  A lot has changed during the past three years that I haven't been updating this blog.  However, many things are still the same.  I am still a grad student, hopefully finishing up within the next 21 months.  I am still studying Japanese, although my progress has regrettably slowed due to the demands of grad school.  And I am still highly interested in the things that I have posted about in the past, including old Macs.  In fact, I'm happy to announce that I just bought a NeXTstation Turbo Color on eBay, which I'll be posting about in upcoming weeks.

Looking forward to writing again!

Monday, November 14, 2011

My Japanese Learning Plan

This upcoming December will mark the 12th anniversary of my beginning studying the Japanese language. I started learning Japanese back in December 1999. It's been nearly twelve years later, and I am unfortunately still not fluent in the language. To make a long story short, I actively studied the language between 1999 and 2005 and even attended a Japanese language school named Sakura Gakuen from 2003 to 2005. However, I took a sort of break during my undergraduate career at Cal Poly due to the demands of my coursework. But, upon getting an offer to do an internship at Fujitsu Labs in Japan, I started to take Japanese much more seriously. My Japanese skills improved dramatically during my time in Japan in 2010, and since I've returned to America I have spent a good chunk of my spare time studying Japanese vocabulary and kanji, as well as watching Japanese dramas and movies and also browsing Japanese websites (with the help of Rikaikun).

My goal is to become fluent in Japanese in 2014, which is around the time I should be finished with my PhD program. I am interested in working in Japan after I graduate, either in an industrial research lab or perhaps at a Japanese university (although I have a lot to learn about how academia works in Japan). Of course, I would need to be fluent in Japanese in order to qualify for a full-time research position out there. Suppose I become a professor at a Japanese university, for example. I would need to be fluent in Japanese in order to convey the course material effectively to my students.

Below is my study plan for the foreseeable future (not in any particular order):
  • Finish Remembering the Kanji I, which is a book that covers the basic 1,945 kanji taught in Japanese public schools, as well as some additional characters.
  • Study the "Core 6000" deck, which is a deck that consists of the 6,000 most commonly used Japanese words. I am almost done with studying the Core 2000 deck, which is the top 2,000 of these words (I only have about ~250 words remaining in my deck; I should be finished studying it next week).
  • Study All About Particles, The Handbook of Japanese Verbs, and A Dictionary of Intermediate Japanese Grammar. After I pass JLPT Level N2, I plan on purchasing A Dictionary of Advanced Japanese Grammar and studying it.
  • Read the stack of manga, magazines, novels, and other Japanese books that I bought while I lived in Japan.
  • Continue watching more Japanese movies and dramas.
  • Study for the JLPT. I plan to take Level N2 of the JLPT in December 2012, and Level N1 of the JLPT in December 2013.
  • Take a trip to Japan on vacation sometime in 2013 (okay, so this isn't exactly "studying" per se, but I will get a chance to use my Japanese again).
Hopefully this works out!

Wednesday, May 25, 2011

Words with Similar Meanings in Japanese

Right now I am studying the Core 2000 Japanese vocabulary list, which consists of the 2,000 most commonly used words in Japanese. I have been working my way through the vocabulary list for almost a month; I spend about 10-20 minutes or so a day studying the list via a flash card program called Anki, which is an excellent program for studying Japanese (or any other language for that matter). While many of the words that I've encountered are words that I was already very familiar with, there are other words that I did not know until I encountered them when studying the vocabulary list. Right now I have gotten through the first 513 words in the collection; many of those words I am now comfortable with. I should be finished studying the word list by the end of the summer.

One very interesting thing I discovered through my studies is that Japanese has a lot of words that are very similar to other words, but have a slight variation in meaning. For example, back when I was at Fujitsu, I learned the difference between 完了 and 終了, which both mean "to finish" but have slightly different connotations (the former implies that a task was completed, while the latter implies that something ended [but not necessarily completed], e.g., プロジェクトを完了しました [I completed the project] and プログラムが終了しました。[The program ended]).

Here are some additional groups that I noticed:
考える (to think, consider) vs. 思う (to think) vs. 検討する (to consider)
仕事 (work, job) vs. 作業 (work)
完了 vs. 完成 (both meaning "to finish, complete")
去年 vs. 昨年 (both meaning "last year")
変える vs. 変わる vs. 変化する (all meaning "to change")
大統領 vs. 社長 (both meaning "president")
開く 「あく」 vs. 開く 「ひらく」 (both meaning "to open"; notice that they are written exactly the same but pronounced differently)
行く 「いく」 vs. 行く 「ゆく」 (both meaning "to go"; same situation as above)
見せる vs. 示す (both meaning "to show")
閉める vs. 閉まる vs. 閉じる (all meaning "to close, to shut")
必要する vs. 要る (both meaning "to need")

It would be very interesting to see the differences between these words.

Thursday, May 5, 2011

Nebulousness of Graduate School (and Life in General)

Have you ever noticed that the further you go in your educational or professional career, the more nebulous the future seems?

Consider the following. In high school, there are clear, clean-cut requirements for graduation and clear, clean-cut requirements for getting into a university. I clearly remember being a high school student, stressing out about taking challenging courses, preparing for the SAT and stressing out over my scores, doing extracurricular activities, and making sure that my record was polished enough for me to get into the university of my choice. Obtaining an undergraduate degree and getting a job or an admission offer to graduate school is very similar. It essentially requires taking the right courses, earning the right GPA, networking with the right people, completing a few internships, and either doing a great job on the applications (for graduate school) or performing well on the interviews (for getting a job).

Of course, there are no guarantees in life. Having exceptional performance in high school does not guarantee admission to an exceptional university, and having an impressive CV or résumé does not guarantee a seat in a graduate program or a desk at a company. Competition for desirable universities and jobs is stiff, and the axiom of life not being fair also plays a role (you most likely don't know who are reviewing the applications and what their thoughts and possible biases are, after all). However, the probability that one could advance to his or her desired next step is high given that he or she fulfilled the requirements for that step. And the probability that one could fulfill those requirements, provided that he or she makes the necessary effort, is also high.

However, the path from graduate school to a research position, whether it is employment in an industrial research lab or a professorship at a research university, is a bit more nebulous, and the destination is more uncertain. Now, graduate school and obtaining a research position do have requirements. The coursework and examination requirements in graduate school are crystal-clear, and employers have expectations about what they want from prospective employees. However, there are a few of those expectations that are a bit nebulous, and sometimes being able to meet those expectations is uncertain. Even the ability to obtain a research position is uncertain.

One such expectation is that graduate students are known by the research community and that they make an impact in their fields. This can be determined by evaluating a student's publication record. If a student's publications tend to be frequently cited, and if the resulting research is adapted by other researchers, the student is deemed to have made an impact to the research community and thus has a better chance of obtaining a research position. However, if the student's publications are not cited much, did not generate much interest at the conferences that he or she presented them in, and overall seem to be ignored by the research community, then the student will have a harder time obtaining a desirable research position and may have to settle for a less desirable job.

Even though this expectation of making an impact in the field is known, the trouble is that there is no guarantee that one's research would make an impact on the field. While knowledge and hard work are necessities in pursuing any research topic and are exhibited in many researchers, luck is another important factor that could decide whether a researcher's work is deemed important enough to have made an impact on the field. Many factors that are outside of an individual researcher's control exist, from changes in the popularity of certain research topics to competition amongst researchers from different institutions. These factors play a role in determining the impact of one's research.

Another area of uncertainty is one's future employment. Unlike applying to graduate school, where there are a few slots open per year at nearly all graduate programs, not every university or company has research positions available each year. While in computer science (my field) the location of most industrial research positions is certain (the Silicon Valley, since most of the research labs of the world's major software companies are located here), for all fields a researcher hoping to be a professor needs to be prepared to make a move anywhere in the country where there is an open position. In some fields (such as the liberal arts) where there is very few industrial employment, demand for professorships is so intense that an advertisement for a position at a university in the middle of nowhere could receive hundreds of applications. It's a little less intense for computer science where there is a lot of industrial hiring, but there is still competition for professorships. But no matter the job, a researcher would have to stand out in his or her field in order to secure a position, and the researcher would need to be willing to move anywhere where there is a job.

Despite the uncertainties, I am still sticking to my plan. The major reason why I decided to attend graduate school is because I want to obtain a research position. I enjoy doing computer science research. To have a good chance at securing a research position in America, one must have a PhD. (I heard of people with MS degrees working in research labs, but they are the exception, not the norm.)

Besides, the nebulousness and uncertainties are not limited to the research world. Consider working in industry, for example. The criteria for being promoted may be nebulous at some companies, and, unlike school where there is "academic probation," one could be laid off or fired without warning at a company. My friends who are working right now are not shielded from this at all.

But, back to graduate school and the future, I hope that everything will work out for me. In the meanwhile, I'll work on doing research that will hopefully make an impact in the field. We'll see!

Friday, December 17, 2010

My Learning Plans for 2011

Hello, everybody. I apologize for not updating this blog; a lot has been going on in my life during this past year and I haven't had much time to update it during then. However, I hope to be updating this blog much more frequently from now on. There are a lot of things on my mind that I would like to share and to write about.

One of my core interests is learning new things. I have a love for learning and I have a desire to learn as much as I can about the subjects that I am interested in. Sometimes I can spend hours upon hours reading articles on the Internet about various different topics, whether it is about computer science, politics, Japan, Christianity, academia, or something else. Because I have just started a PhD program in computer science, I will need to use my free time much more efficiently, since free time is increasingly becoming a scarcer resource in my life. To avoid wasting my free time, I would like to apply much of it to a few learning pursuits of mine. Below are the things that I would like to focus on learning during my spare time in 2011:

Computer Science:
  • Aside from my coursework (I plan on taking courses in programming languages, machine learning, and data mining during the rest of this school year, and I still need to decide what to take next year), I also plan on learning more about large-scale storage and data management systems during this year. My PhD advisor has already given me some introductory work to do during the break, which will introduce me to this field and will prepare me for some exciting research work in this area later in the school year.
  • I want to develop system administration and computer networking skills. I realize that those skills are very important to have when working in a computer science research lab where we fellow students help maintain the lab's machines.
Japanese:
  • I will commit myself to studying Japanese at least one hour per day next year. While my language skills have improved a lot during my stay in Japan from January to August, I still have a lot to learn before I gain fluency. I am currently about halfway done with the book Remembering the Kanji I, which is an excellent way to learn kanji. I should be finished with the book in March 2011. In the meanwhile, I will be studying some of the Japanese grammar books and guides that I've found.
  • I also have a large collection of Japanese reading material that I need to, well, actually read. I hope that my technical Japanese improves tremendously once I finish reading my collection of Software Design magazines. (I even have the 20th anniversary edition of Software Design, which contains a DVD containing all of the back editions from 2000 to 2009). I also have a biography of Satoshi Tajiri (the creator of Pokémon), 1Q84 (a bestseller in Japan), a book about an World War II interrogation center near Tracy, CA, a book about Christianity in Japan (more on that later), and some other reading material that I need to get through.
  • I also want to buy a Japanese drama DVD box set to help me with my Japanese listening skills. I heard that there is a DVD store in San Francisco's Japantown that sells boxed sets of dramas. I'm going to have to check it out soon. Some of my friends from Japan recommended a drama named 「結婚できない男」, or "The Man that Can't Get Married." I also enjoyed the episode of 「ゲゲゲの女房」 ("Gegege no Nyobo" or "Gegege's Wife"; Gegege is the nickname of a famous manga artist) that I watched this summer. There is also a movie currently in theaters in Japan with the same title; I want to see it once it's out on video.
Christianity
  • I want to be much more serious about studying the Bible. Currently I am doing a cursory read over the Old Testament (I am currently in the middle of Isaiah). Once I finish this initial reading of the Old Testament, I want to start studying the Bible in-depth, in a manner similar to how seminary students or others really serious about understanding the Word. I plan to begin with the first four books of the New Testament and start examining the life and actions of Jesus. I will develop a "plan for action" soon.
  • I am very interested in learning more about Christianity in Japan. As mentioned above, I have a book called "Japan's Christianity" 「日本のキリスト教」, written by Yasuo Furuya and published in 2003. It's 282 pages long and is written in Japanese. Since I am not fluent in Japanese, it will take me a while to finish it. However, I am determined to read the book. The book contains a brief history of Christianity in Japan, comparisons between Japan, the United States, and Korea, and many other facets of Christian life in Japan. I will share some of my findings as I progress through this book.
Academia
  • I am interested about learning about the history of academia. Since I may become a professor once I finish my PhD, I would like to learn more about how academia works and about how it grew and evolved over time.
  • I would like to read some biographies or autobiographies of some scientists and mathematicians. I enjoyed reading Surely You're Joking, Mr. Feynman and What Do You Care What Other People Think, which are both books on Richard Feynman, a prolific and very interesting 20th century physicist.
Other:
  • I want to learn Korean for a variety of reasons. I know some hangul, but the only words that I know are food-related terms like 김치 and 비빔밥. Hopefully that changes soon!
Hopefully I will be able to commit to this plan this year! I'll keep you all posted!

Monday, April 12, 2010

お先に失礼します and お疲れ様です: Two Important Phrases When Working in Japan

I've been interning for Fujitsu Laboratories in Kawasaki, Japan for three months. During my three months I've noticed many interesting things about the Japanese workplace. For those of you who don't know Japanese or are unfamiliar with the Japanese workplace, in Japan it's considered a badge of honor to log very long hours at work. When the shift is over and the end-of-day bell rings (yes, Fujitsu has bells that rings that indicate when a shift begins, the beginning of lunch, the end of lunch, and the end of the day; I don't know if this bell system is standard across Japan), most people do not begin packing; instead they are still working. My work ends at 5:40pm, but I'm usually in the office until 6:00pm-6:30pm on average; I rarely leave at 5:40pm, and the latest I've stayed was 7:30pm when waiting on a coworker to return to a meeting to ask some work-related questions before leaving (but staying this late is very rare for me). And while I leave at about the same time as other people in my group, I'm never the last one to leave the office, although I'd venture and guess that most people are gone by 8:00pm or so at Fujitsu.

Anyway, if you are leaving the office at the end of the day and there are still other people in your group, you say to them 「お先に失礼します’ (osaki ni shitsurei shimasu). It literally means "I'm being rude for leaving before you," but it is the standard greeting for leaving work before other people. When somebody says that to you, you reply with 「お疲れ様です」(otsukaresama desu), which literally means "You must be tired," but it also has the meaning of "Great job!" or "You worked hard!" and other similar connotations.

Sunday, March 14, 2010

Trapped With a Samsung 730sc -- A Multi-Part, Japanese Urban Opera (or Drama)

Coming to stay in Japan for a medium-length term (greater than two weeks, but less than two years)? Need a prepaid cell phone because your phone from your home country does not operate on the Japanese network or because you don't want to pay the exorbitant international roaming fees, and because you can't meet the two-year contract requirement for most phones and services in Japan? Whatever you do, thoroughly research your cell phone options in Japan BEFORE you arrive here. Research not only the prepaid plans here (which I did), but also research the individual phones themselves (which I did not do, regrettably). Researching what phones are available will prevent you from just buying the cheapest phone available and paying for it dearly through many inconveniences and annoyances in the long run.

During my second day in Japan, I purchased a Samsung 730sc cell phone from Softbank, one of the three major cell phone providers in Japan (the other two are au, which is run by KDDI, and DoCoMo, which is run by NTT, Japan's equivalent of AT&T). One thing to keep in mind before coming to Japan is that not all cell phone stores provide prepaid phones; I visited a few other Softbank, au, and DoCoMo shops around my area but was turned away because those stores didn't carry prepaid phones. Another thing to keep in mind is that prepaid phone buyers are restricted to only a few phone models; some of the nicer phones such as the really advanced Japanese cell phones with Internet access and games in Japan and the Apple iPhone require two-year service contracts. I believe I only had a choice between three models; the Samsung 730sc was the cheapest one at around ¥4,900 (about $54 at this time of writing). There was another model selling for around ¥7,900, and a high-end model for over ¥10,000. I ended up choosing the Samsung 730sc due to price concerns; I came to Japan with just enough money to survive the first month's living expenses, and I did not want to spend any more money than necessary. The Samsung 730sc also had English menus, which was nice, and a camera, which made it very convenient to take pictures of my time in Japan without having to carry my camera everywhere, which can be inconvenient at times and vulnerable to loss or theft (I once accidentally left my camera, in its case, on a Metrolink train in the Los Angeles area at nighttime; I never did see the camera or its case again, even though I called lost-and-found immediately after I realized that I lost the camera. I had some awesome pictures on it that I had just taken of my adventures, too.).

Before I describe my experience with my phone, keep in mind that a prepaid plan is not a contract. Instead of being committed to a plan, a person with a prepaid plan purchases calling cards, which come in either ¥3,000 or ¥5,000 denominations. I forget the charges, but they are relatively steep compared to the charges if one has a contract, especially for international calls, but the charges are still lower than international roaming with American cell phone providers.

The phone has been nothing but trouble from the start. The phone is not a flip phone and therefore lacks a cover. Because of this, if you forget to lock the keypad on the phone, it is possible for the phone to dial numbers while it is in your pocket. I think I wasted about ¥1,500 on accidental phone calls; some of them were to my parents 5,300 miles away!!!!! Once I realized what was happening, I quickly learned how to lock my keypad. Problem solved. No more accidental calls back home, and no more money thrown away.

The next bad thing to happen related to my phone happened just two weeks after I bought my phone. I was using the restroom at work. A few days before this incident, I learned how to lock my keypad. I also decided to not carry my phone in my pocket due to fears that the keypad will unlock itself while the phone is in my pocket, so I then started keeping my phone in my shirt pocket. Unfortunately, I found out the hard way that this was also not a viable solution, but for different reasons. After I finished, ahem, doing my business, I went to bend over to clean around the toilet. As I bent over, I groaned "Noooooooooooooooooooo!!!" in horror as I saw my cell phone go in the toilet. (Thank goodness I didn't flush it right then). I immediately pulled the cell phone out of the toilet, dried it, turned it off, and then placed it in my desk after flushing the toilet. Unfortunately, I was unable to provide any more immediate attention to the phone due to the fact that I was at work; I just finished my lunch break and there was still at least four more hours left until I could leave for the day. Thankfully after removing the battery (which I did at work once the cell phone started vibrating uncontrollably) and after letting my cell phone dry in my dorm room for a few days, it started working again four days after its drop.

As I said, my cell phone has a camera. It also contains storage for storing data; however, there is no SD card slot; the data is stored directly on the phone. The cell phone also supports emailing pictures. Unfortunately, the maximum size for sending an email is only 300KB, and my pictures ranged from 80KB to over 250KB each. This made sending lots of pictures very time consuming. Annoyed by this method of sending pictures, I thought, "Hmmm, the cell phone uses USB for charging. Maybe I can buy a USB cable, connect it to my laptop, and transfer my pictures to my computer." Problem solved, right? Wrong! I purchased an overpriced USB cable for ¥1,200 (this is before my first time in Akihabara; I should have held out for then), and then was disappointed with the fact that not only did my operating systems (Mac OS X and Windows 7) not only not detect my cell phone, but there were no drivers available for the phone for any platform, either. Grrrrrrrrrrrrrrrr!!! After scouring the Internet, I discovered that the only supported interface for transferring data between a computer and the cell phone was through an infrared connection. My computer, a first-generation MacBook, lacks an infrared connection (in fact, according to my friend Dana, who knows a lot about computer hardware and has kept up with the latest hardware news for many years, laptops have not shipped with infrared readers for over ten years. The only computer that I have that has an infrared reader is an old Compaq Armada 7400 laptop with a 266MHz Pentium II processor and 64MB RAM, which I did not bring with me to Japan).

In the meanwhile, after another few weeks or so, I then discovered that my cell phone was getting no reception at all. I just bought a new prepaid card, and I wanted to enter the code into my cell phone (you dial a number to do it) so that way I can start calling others again. But when I tried to dial the number, the cell phone was unable to call the number because it couldn't get reception, it was "out of range." After a week of no reception, I then took it to the SoftBank store that I purchased it, hoping that they would be able to fix it quickly; I thought the reason why I didn't have reception was related to the fact that I was out of prepaid cash, and I needed to input my prepaid information in my phone so that way I can use it again. Turned to find out that I was wrong; the phone really didn't get any reception at all. They tried with other SIM cards; still no reception. They recommended repairs, but then they gave me some forms, which had some scary-looking fees on them. I also ran into language barriers, too; they suggested that I bring a Japanese-speaking friend with me and come back again. So I was left with a phone with no reception. Not only that, but I then found out that while they were trying to change the settings of the phone, they changed the settings in such a way that the cell phone can no longer even take pictures; even when attempting to load the camera, the cell phone says that it can't obtain the network information, and then just returns to the main screen. Why does the camera rely on the network??? Grrrrrrr!!!

Recently I've been focusing on trying to get my collection of photos off of my phone. I thought, "Hmmmm, how hard can it be to find a USB-to-infrared adapter?" Very, very, very hard, it turned out. You would think I was trying to find a 5.25" floppy disk drive, copies of WordPerfect 5.1, or something else rare and now obscure. I first tried the local electronics stores in my area (Yamada Denki and Yodobashi Camera). They didn't have it. Then I went to Akihabara, a sort of mecca for computer and anime nerds where there are dozens and dozens of computer shops everywhere, selling almost every computer-related thing you can think of, even used computers at decent prices (I'm flirting with the idea of buying an used 12" ThinkPad or netbook). During my first time in Akihabara on February 28, I stuck to mostly the big places along Chun-dori, which is the main street. No luck once again. On my return trip to Akihabara today (March 14), I started going to the little shops, one-by-one. After visiting about another dozen stores or so, I finally found it! It was a Best Connectivity USB to IrDA Adapter, manufactured in China, sold at a store in Akihabara called Tsukumo, and cost only ¥1,780 (a little less than $20). The cashier did warn me about the system requirements of the device before proceeding with selling the item to me; the box says it "support Windows 98SE/Me/2000/XP and other most popular OS" (I'm quoting verbatim), and he told me that it wouldn't work on Vista or Windows 7, and he hesitated about its working on even XP. Even with this concern, this was the only USB to infrared adapter that I can find after browsing a ton of stores, so I bought it anyway. When I got home, it (expectedly) did not work under Mac OS X 10.6 (there are no drivers for it), and it did not work under Windows 7. I then pulled out the driver disc for the device. Unfortunately, I saw that the driver disc is a mini CD, not a full sized CD. This is a big problem, since my MacBook has a slot-loading optical drive, not a tray-loading optical drive (most desktops have tray-loading drives; most non-Mac laptops have tray-loading drives, but Macs have slot-loading drives). Slot-loading drives and mini CDs do not mix; there are many incidents where a mini CD would be stuck in a MacBook's optical drive. To avoid that risk, I am forced to find another computer with a tray-loading CD drive and transfer the driver files from the mini CD to some other device. And then I still need to install the drivers, which might not work on Windows 7, which means that I'm going to either need to reinstall Windows XP on my MacBook, find virtual machine software that supports the guest OS (i.e., the OS running on the virtual machine) accessing USB devices, or buying an old computer with XP.

I question Samsung's design decisions for their 730sc phone. Why did Samsung choose to use an infrared connection for wireless connectivity, which is now considered obsolete, is no longer built-into laptops, and has hard-to-find adapters, when they could have used Bluetooth, which is the modern standard for wireless connectivity between a computer and a peripheral device? Why did Samsung not choose to implement support for mounting a cell phone as a hard drive so that users can access their files on the cell phone through a USB connection? Why did they choose to make the only interface between a computer and the phone an infrared connection given these facts?

This cell phone has been a never-ending nightmare; I now have to focus on getting those drivers onto some alternate media. I'm just trying to get my pictures off of my phone. Once I can retrieve those pictures, then I'll try to have the phone repaired. If it is too expensive to have repaired, I'll call it quits and purchase another phone. Hopefully the other models provided support modern features such as USB connectivity and Bluetooth. Whatever the decision is, I need to do it relatively quickly; people (including a woman) are starting to ask for my phone number, and my parents are starting to send me emails about when I'm going to call them again, and I can't go without a working phone for too long. I'll keep you informed about the latest of this drama.