Raven's Blog

It does not matter how slow you go so long as you do not stop. - Confucius

The Government and Violence in the Media

This is an essay written in practicing for the IELTS test writing module.

Due to recent advances in technologies, the horizon of the media has been broadened so much so that it is now covering a much greater territory and influencing our society in a much more profound way. The resurfacing discussions about how violent content in the media should be controlled by the government demonstrate one such pressing concerns of the public in response to this development.

I believe that the government should always maintain certain degrees of regulation on how violence could be appeared in the media. For example, because young audience, of different age groups and levels of maturity, takes and reacts to the given content very differently, through enforcing a well maintained and designed Rating System, the government could effectively regulate our younger generation’s media exposures — much younger children could enjoy harmless non-violent programs that focus on nurturing their abilities to appreciate the world’s pure beauties, while adolescence, upon entering the adult world, could be better prepared and learn how to think critically, when exposed to a proper amount of selected categories of violent content under parental supervision.

However, the government’s power of regulating the media should neither be left unwatched nor should it be solely relied upon. For one, each government will have its own political agenda, and it will not hesitate to exploit the ‘weapons’ in possession to its own favor, which, to the extreme, could be used to undermine the freedom of speech. Also, the government alone, despite its great powers and seemingly unlimited resources, is still not enough in keeping measures up-to-date in order to counter the side effects resulting from the rapid developments of modern media industry. For example, violent content floating on the Internet is still in no good control. As a result, allowing NGOs(non-profit organizations) and private companies of related backgrounds and qualifications to step in as complements to the regulation process could benefit the system enormously in keeping the made policies relevant and practice effective.

In conclusion, the government has an important part to play in the battle of balancing media violence, but this effort and responsibility should be properly distributed among the various forces of our society.

Charity Special Days

This is an essay written in practicing for the IELTS test writing module.

Special days, such as National Children’s Day and National Anti-Smoking Day, have been established and advertised by some charitable organizations across the globe, which is a rather common form employed to promote cultural or religious ideas.

In order for such ideas or visions to be effectively promoted to the general public and in the end achieve their designed goals, it is required for the advertising methods to be both economical to carry out and able to persist a long-lasting influence on societies. Since most charities are operating on public or private fund and limited resources, it would be economically wiser to take on roles of inspiring people, instead of getting involved in every one of the detailed operation — sending staffs out on the street to talk each smoking person out of the habit would not be that cost-efficient for example. Special days, like holidays, on the other hand, once adopted, requires no further costs from charities. Those who are convinced of the ideas would come out preach, and those who have been sharing similar ones would be attracted and join the parade, when the days come.

Through out the entire human history, special days of all kinds has been observed within almost every existed culture and proven to be quite effective, due to the facts that they can be easily remembered and practiced and useful on attracting public attention. Human is the creature of habit, which, once formed, is rather hard to be unlearnt. Also, because most of the special days are oftentimes associated with some historical or major public events occurred on specific dates that will constantly be reminded with later on, it is not hard for the public to remember and relate to them. Even if some special days were started out and only held seriously by a few minority groups, once the values behind them have been recognized, it would not be impossible for them to draw attention from the government and media to further promote the ideas to a much broader audience.

In general, I think it is a smart move for charities to exploit special days as vehicles for making their visions known and keeping them alive, both efficiently and effectively.

Working Too Much and Having No Time for Families and Friends

This is an essay written in practicing for the IELTS test writing module.

In today’s ever demanding yet opportunity-rich society, people tend to focus too much on their work, rather than spending enough time with their families and friends.

Admittedly, the major cause of this phenomenon is that our working environment is becoming increasingly competitive, due to the progress of modernization and globalization. As information flowing more freely and transparently, it becomes much harder for business to keep a competitive advantage over its rivals. Without even approaching any form of commercial espionage, a simple Google search might just yield enough results regarding solutions about how to cut down operational cost, new market angles to generate fresh revenue, accessible technologies to boost productivity, etc. Competitions drive down prices, force companies into cost reductions and working people nowadays have to either work longer hours to get enough pay or invest more time into improving their employability. Many other reasons, such as global project collaboration which requires long-distance traveling, also contribute to longer time spent away from family and friends.

This trend has a two-way impacts on our society. On the up side, hard working increases social wealth and further enriches individuals’ life. Increased social wealth means more tax incomes for the government, thus more money could be spending on improving education, building better infrastructure and covering public welfare, which could eventually be translated into a happier and more productive society. While on the down side, working too hard and not paying enough attention to family members could severely weaken family bonds. Children growing up in such families often show less respect to others and have higher rates of committing crimes, comparing to those from well-bonded families. Also, without frequent communication with friends, it is easy for adults to build up stress, inducing bad tempers and various psychological or physical health issues. All of which decrease the overall stability of our society.

Personally, I enjoy working hard and creatively in order to fulfill my potentials, and I also prefer to keep a proper work-life balance. Hopefully, more people will start realizing that work, families and friends are all crucial parts of our life.

Too Many Wi-Fi Hotspots Are Not Just Annoying

The moment I noticed my Kindle Paperwhite got updated the other night, I headed over to the Settings page to see if there were any new features available to play with. What I instantly noticed though, was that there were 30 available Wi-Fi Networks around my tiny apartment.

I would have consulted Wikipedia and tried to figure out how Wi-Fi discovery works and whether or not more hotspots mean more battery energy gets consumed during the process, if I was geeky enough or perhaps suffered good from OCD. I mean, that potential bit of energy spent purposelessly could have been used to flip through a couple more pages of enjoyment.

And come to think of it, it almost feels funny when you realize how cumbersome a Wi-Fi router really is. An ugly square box, guaranteed to look out of place, poor portability, taking up space and an extra socket outlet, exists solely for the purpose of linking together devices and providing them access to the Internet.

So why are we having all these routers broadcasting signals to such an extent that the density of their coverage goes beyond waste, especially when all traffic converges upon a central hub somewhere near the building? Is it really necessary for each one of us to have a dedicated Wi-Fi router?

Well, do not get me wrong. There is no doubt that wireless connections are of absolute necessity to many, if not all, which I am not going to argue about, and the convenience and productivity boost that Wi-Fi routers and the like have been providing is not to be dismissed lightly, but maybe it is now worth taking a close look at the fundamentals about devices connectivity, especially the patterns that Wi-Fi routers have been imposing.

So what are the implications of having Wi-Fi routers everywhere? Well, it forces you into thinking that in order to have your iPhone to be able to collaborate with your iPad on certain project, you must first have each of them connected to some intermediate device or service, for example a Wi-Fi router, to exchange data, and arguably, this line of thinking is part of the reasons why we have Cloud Service everywhere today, to play the central hub role. At any rate, this represents a persistent and centralized pattern, offloading the connectivity complexities onto those routers sitting in between. This simplification encourages a wide range of devices and applications.

However, in the light of ever emerging workflow-centric applications and increasing data privacy concerns, I believe that short-range, intermittent, on-demand, device to device direct type of connection is to be emphasized. For example, when I take a photo with my iPhone and want to use an App on my iPad for further processing and adding extra effects, it is to my most convenience to be able to just “pair” the two devices and get it done, not to wait for the photo to appear from PhotoStream after a round trip back from iCloud, and certainly not through iTunes from a laptop. Also, by limiting the devices that have access to the data, privacy could be better protected.

Business Software Development Part 2

In Part 1, I provided the definition of Business Software Development. The conclusion is that Business is the final goal of a non-stop development process, and computable Device is the major channel to bridge Business and the end users.

The challenges

What it really means to Software Development?

  • Business is the final goal. (Never ever getting tired repeating this)
  • Development is a Process and it works only when deliver.
  • Delivery means shipping, means putting Business into Device.
  • So the goal of Development is to make sure Business gets delivered to Device.

The major headaches stop us from getting there?

  • We have one business model, yet it refuses to keep still.
  • We have one business model, yet it targets multiple devices.
  • Different devices require us knowledges of different platforms and tools.
  • New device of good potentials for Business keeps coming up.
  • Device has its own limits, which makes the One-Size-Fits-All design impossible.

Maybe not so bad after all?

  • Although Business changes, it changes gradually.
  • Although Device are many, some share common characteristics.
  • Although we will have to face different Device platforms, we’re running the same Business.

The emphasis here is that the escalated complexity of running Business the multi-devices fashion brings us developers new kinds of challenges. You should now stop considering yourself a mere Web Developer. Instead, you should approach other devices, design and code for the big platform. And this hardship is not for developers only.

Searching for a way out

To begin the search of possible solutions, I list bellow a few points which I think are critical to have in order for any solution to be effective.

  1. Abstract business logic from details — away from any detail including device hardware detail, data persistence detail, User Interface detail, Programming Framework detail…
  2. Implement business logic as self-serving modules, they should be small at scale, easy to understand, clearly defined basic building blocks of the business domain.
  3. Implement sub-application level modules/features to address common business scenarios, which should be based on the above business modules, away from details too.
  4. Write automated tests, both the business and sub-application level modules should be covered.
  5. Plan for all targeting devices, to identify and manage the common and unique feature sets, make sure the business goal covered fully.
  6. Bridge the business and sub-application level modules with implementation details only when develop and deploy for a specific device.

Mixing business logic with device details is bad because it makes the business logic hard to change. And the situation gets worse when the business starts targeting multiple devices, for each of this device requires unique platform knowledge to be operated effectively. Mixing Business logic with details makes it hard for the logic to be ported from one platform to another.

Business logic should be modularized, this makes sure future changes to the business isolated within a handful of modules. With sub-application level modules addressing the common business scenarios, features could be defined and maintained in a multi-devices environment reusing these modules.

Automated test is extremely important. When developing for a new platform, you’ll have to port over at least part of your business logic due to the introduction of a new platform. Tests under such circumstances offer you great confidence. (Test should be simple, easy to write and read, therefore much easier to be ported over to and ran from a new platform, compare to the business logic.) Tests should not be developer only, higher level testing and integration is crucial for Business to be expressed consistently across devices.

Details only make sense to a specific device. By carefully implementing details the way it requires, you get the best performance while not complicating the business logic. For example, when a business feature requires user identity, a web application may read it from Browser Cookie, while a mobile application may need to retrieve the information from a Keychain Service.

So Business starts out an abstract idea and it should be maintained that way, the it got split into modules, realized into a specific form by details for each targeting device. A careful solution of Development process should cover above listed points in order to achieved the Business goal effectively under the new challenges.

Business Software Development Part 1

This is the first part of my brain dump about Business Software Development.

The problem

There’s no doubts the world’s changing, everyday new informations flooding in overwhelmingly, like this exciting piece about the Next Web. So how would you, as a person or an organization related to the field, feel and act upon such changes? Will you try to pursuit whatever that’s new and promising? Or just bury your head in the sand then wait to be forced out with tears bursting out off your face?

Now here’s what I proposed to deal with such. Starting with a little bit maybe philosophy.

How I understand the world

It might be naive, but I believe things in the world are operating under certain set of principles. Only with a firm grasp of such anchors that one could secure his position above water to further breath, observe then explore. Oftentimes, when I found myself confused, I was merely confused by how the details would have been unfolded, not the principles that I choose to believe.

Then the process for me to understand things could be summarized as follow:

  1. I view the world of two distinct kinds: principles and specific objects.
  2. Principles are abstract, they are about how I view and explain the world, so they are ‘conceptually’ stable. Things are what the world really is, and it’s so big a world that I couldn’t possibly live long enough to experience it all.
  3. In order to understand enough about something that is specific, I need to be able to place it to a fixed, known position in my conceptual mind, meaning I need to know exactly to which set of principles they comply.
  4. Things that I have yet to deal with may very well end up changing what I used to think of the world. So despite that principles are stable for most of the time, they could as well be altered under different circumstances.
  5. There’re things in the world that I just don’t care about, knowing the principles I value will help sorting those out quickly as possible.

As I see software development non special but one aspect of my life, I expect principles of some kind about the field to be formed so I don’t get panic every time dealing with things unfamiliar. Now here’s the question: as a developer, Business Software Developer specifically, what kind of principles available that I could follow to make my days a little bit less tough?

(Figuring out such principles will certainly assist a person in shaping his career. And I wouldn’t hesitate adding organizations to the benefitting-list)

So let’s dive a bit deeper to the subject, by giving a definition to

Business Software Development

By my definition, is the process of creating interactions between the end users and the business, on a set of computable devices.

  • Computable Devices

Business can definitely be operated in many fashions. As a developer, we’re focusing on those done through the Computable Devices. Being Computable, it leverages the power of a magic ‘device’ — special hardware plus the ecosystem around it, for achieving the business goals more efficiently and naturally as human society evolves in favor of higher productivity.

Think about the transitions we’ve been through and experiencing:

  1. The mainframe era, computing resources were solely available to academics or maybe some giant corporations. It performs massive data analysis and generates maybe statistical predictions which helps in making business decisions. In this period, there is no direct interactions between the end users and the business through the computable devices. So obviously, no Business Software Developers were required.
  2. The Pre-Internet-PC era, less expensive workstations are available, limited connections between the servers and stations could be setup locally. It starts moving into the everyday practices of a business, by improving operational efficiencies and saving cost. We started to see the emergence of word processing, data entry/reporting, printing, etc. In this period, IT administrators were hired, to maintain in-office hardwares and softwares which often came in as a bundle and normally provided by specialized companies taking care of both the software & hardware. But still, no interactions, no Business Software Developers.
  3. The Internet-PC era, PCs becomes available and keeps getting cheaper. Software begins its focus on individuals. Then rose the Great Internet, which enables the connection between PCs and PC – Organization, then starts the application of the browser and the Web. Only at this period, the business and the end users began to realize that they could reach out to each other through a cheap browser window. Applications such as corporate websites, web campaigns/marketings, eCommerce models, and the likes became major phenomenons and strong links between the business and the end users. Because of the uniqueness of each business model, in order to convey its intents to the end users, business needs software specialists to implement various of its strategies. A new career line was then created, the Business Software Developer. Since they were mainly dealing with the Web – by creating applications available to browsers, and the browser back then was slow and incompatible b/w brands, these applications tend to be simple. Thus a lot of the business logics are performed at the backend, on the servers running within organizations. This’s how we established the classic 3 layer abstraction model for building enterprise applications, namely the Presentation layer, the Business logic layer and the Persistence layer.
  4. The Post PC era, this’s happening because customers now have more computing powers at hand. Not only through PCs, but other accessories like phone, music player, watch, etc have become computable devices. These magical devices empower people, basically every single one of them, kinds of easy, natural, contextual ways to interact with the digital world. Data and business intents could now be rendered in such an appealing way to the end users that their great satisfactions unlock a whole lot new possibilities to present, perform and deliver business. Business now has more interaction models at their disposal, to reach out for the end users. As a Business Software Developer, he is now required to build applications for specific devices in order to provide the kind of experience the customer needs and knowing what kind of computable device he’s building on, what sort of scenarios the device will be used in, and what kind of interactions are expected on that device is crucial for his success. But his main focus remain unchanged, to deliver business to the end user.

So we could arrive at our first principle: Business Software Development is to bring business to the end users through various types of computable devices. The device’s capability and use scenario decide what parts and how much of the business logics the device should contain.

It seems the business logic is moving from within organizations to devices that are much more closer to the end users, from trends of above transitions.

  • Business

As a Business, it presents a known domain of rules base on which things could be operated. Business lives by being competitive, able to achieve goals, otherwise it is as good as dead. Because of the dynamics presented by the business itself, competitors and operating environment, for a business to stay successful, responsive decisions needed to be made from time to time. So naturally, Business Software Developers will be tasked to implement such decisions within a limited timeframe, along with making sure obsoleted business strategies implementations retired without breaking up those active ones’ proper functioning.

So the second principle: Business Software Development should be done in such a way, that changes are expected and the business logics could be swap in and out, with minimum efforts.

  • Interactions

No business could succeed when it fails on communicating to the end users, in a way they understand. To reach out to a customer, you have 2 basic forms: #1 you manage to get a list of customers, then you can ask them how they want to receive your product messages; #2 you have no idea of your customers’ where about, but you do have couple communication channels at your disposal. Then base on behavior analysis of customers related to a specific channel, you cook up a special message for that channel, send it and hope it works. And whatever that is, at the very end, when it comes down to implementation for a Business Software Developer, it’s to make sure that the end user on a specific communication channel gets the best user experience. Even to communicate the same business idea, you’ll have to do it differently for different communication channels.

So the third principle: Business Software Development should be done in such a way, that the real implementation of a business logic align with the communication channel that facilitates the interaction.

Conclusion

The business, computable devices and customer interactions keep evolving, one must realize that there’s no points claiming that we have created such thing as the ‘Perfect Software’. Development is an ongoing process, when any of the factors presents challenge, the process shall well reflect that. This is the very nature of Business Software Development.

And to recap the 3 principles:

  1. The first one is about where to place the business logics, for a specific type of computable device to achieve best performance.
  2. The second one is about the granularity of the business logics, so business changes could be applied manageably.
  3. The third one is about the business logic implementation is dictated by the communication channel, in order to achieve the best user experience.

We’ll see in the next piece how these 3 principles could be realized when structuring your project in certain way. And hopefully, how these could help a developer from understanding and choosing technologies.

Corporate Website the Awkwardness

the fall of the corporate website

Companies, at least mine, are investing on their corporate websites, not in such an efficient way, I’d say.

Why is that? Internet user’s behavior has been drastically changed in recent years. Way too much investment and energy have been focus in this field and we’re experiencing so called information explosion period of the Internet. Too much information creates distractions, which creates picky users, who used to be “so bored out here, let’s go window shopping” and now they’re more like “you’d better have room service, or I’d turn away right now”.

Corporate website is stepping down. It’s used to be the only online face of a company, and now it’s just one of them.

how users behave on the internet?

In reality, we probably don’t care to see these big complex, rich & informative, menus stack on menus corporate old fashion website anymore. I don’t even go to search engines that much, instead I’d keep my Tweetbot up and running all day.

Do you remember Google used to have an iGoogle Page, with all kind of customizable widgets on? Now they replaced it with G+ and soon after that they have a +1 button appended to the search result. Also look at some others: Facebook(you connect friends, community so you can keep in touch with friends and also get a bunch of likes, which is so easy and nice to interact with, just one click away), Twitter(you get what’s popular out of the fields relevant to you), RSS feeds(bit like Twitter, interesting content with extend detail. Who cares about blog design anymore as long as you get me hook? I just read blogs that I care.), social aggregation tools(like hacker news, identify popular & important topics among (the developer) communities), etc.

So obviously, we now prefer or promote those web experiences attached with interesting contexts, and we expect information relevant to us under that context be smart enough to reveal themselves. For that, we’re willing to give up personal identities, preferences and some other information to the web.

We follow what we likes, tumble across the things interest us. Along the way, something new comes up, with a mouse click away, nice tempting visual effects, relevant to the context and mood, we couldn’t possibly be able to resist on checking it out.

Only those consumable, accessible, relevant information that pops up right in front of you gets noticed.

corporate website is still important

Although the role our dear old corporate website used to play has changed, it is still the most official/unmistakable source about the company, the products, the marketing events. I bet you would still check on the product you come across from many sources on its website to make sure everything they claimed is authentic, so you’ll be in confidence making purchases. If that kind of information not so hard to locate, right? Plus, a central repository make it easy for the company to manage content and react to challenges. So you’ll still need that site hanging in there.

[Re]Positioning

So user wants information, and we have the most official ones now on our website, but people just don’t bather going there spontaneously no matter how gorgeous you think you’ve made it looks… How could these be changed?

Quite simple actually, we have the good stuff and the only thing we need is to figure out a way to sell it.

Now repeat after me: Corporate website is no longer the only online face of your company image. It’s one of the many. You should switch you mind from Corporate website oriented to Information oriented – build a central resource repository and distribute accordingly, not only to your web site, also to other channels.

Information should be collected and managed in a central place. Then break them into pieces and deliver using channels that make the most sense. Information pieces could have different appearances and reach out in many ways. Managing old fashion websites becomes managing information and content, building channels, processing content into consumable, fit for the channel and target pieces, delivering them right so they show up when mostly needed and expected, logging and analyzing feedbacks for further improvements.