11
Nov
09

Animasi

[ Team LiB ]

Chapter 7. Connection Manager
Operator! Give me the number for 911!

—Homer Simpson, The Simpsons

The last chapter described how to establish and interact with a connection to a remote server using the Remote Access Service (RAS). Although using the RAS APIs provides you with low-level functions to establish a connection with a server and get status information about it, a variety of aspects about that connection can change, depending on what type of network resource you are accessing. This is especially true on mobile devices such as Pocket PC, for which connectivity and authorization requirements can constantly shift depending on your current environment and what you are requesting.

Consider what happens when you try to access an HTTP resource that is located on the Internet. Whether you are dialed into your Internet service or on a wireless LAN at the local coffee shop, the device merely needs to establish a connection to the Internet to download the request. What happens, however, if you make the same request while you are at work and are connected to the corporate network, which is most likely under a firewall? Without having the user authentication information that is passed to the proxy server, the request will fail. Managing all of the various connection types that a user might have would be a nightmare for every individual application developer.

This is where the Pocket PC Connection Manager comes in—it is the best way to manage remote connections (see Figure 7.1).

Figure 7.1. Pocket PC Connection Manager

It is probably easiest to think of the Connection Manger as a centralized location that is used for the configuration of all possible network connections that the device can make. What this accomplishes is a simplified user experience—the user needs to configure what a “Work” connection is only once in order for all networking applications to use it. In addition, the Connection Manager can make some calculations about the cost, latency, and bandwidth required for the request, in an attempt to determine the best type of connection to make in order to get the network resource that you’ve requested.

If you are planning to develop any applications that require network communications, you will most likely want to have them use the Connection Manager to establish and schedule network connections. By doing so, all of the specific details—including dialing parameters, proxy information, VPN authentication, and so on—are handled for you, provided that the user has already configured his or her device. All you need to do is send a request to the Connection Manager to either establish or close a connection.

To use the Connection Manager API functions within your application, you need to include the headers connmgr.h and connmgr_proxy.h, and link with the cellcore.lib library.

[ Team LiB ]
[ Team LiB ]

Understanding the Connection Manager
You can configure two types of connection settings using the Connection Manager: Internet and Work. Both maintain connection parameters for the type of resource you are trying to access.

The Internet connection setting is used for a straightforward dial-up or network connection to the Internet when attempting to access an Internet-style dot-address (such as XX.XX.XX.XX or name.domain.com).

The Work connection setting offers a variety of connection options, including support for proxy servers, virtual private networks (VPNs), and ActiveSync synchronization. This option also supports the capability to address a WINS network address on a private LAN.

So, what does this mean for you as an application developer? Basically, depending on the type of resource you are requesting, the Connection Manager will choose which connection to use in order to get you access to the network resource. If you are attempting to get something with a fully qualified Internet URL, the Connection Manager will use the Internet setting; otherwise, it will choose Work. Figure 7.2 shows the Work setting configuration dialog box.

Figure 7.2. Pocket PC VPN settings

It is generally recommended that a user set all three of the Connection Manager’s configuration drop-down options (Internet, Work, and Network card) for the Work connection setting. By doing this, the device can easily connect to the Internet, use a VPN connection, synchronize with ActiveSync, and use local resources without having to reconfigure Connection Manager whenever the environment changes.

Preparing the Connection Manager
Before you can use the Connection Manager to manage your network communications, you must first make sure that it is available to be used. This is done by simply calling the ConnMgrApiReadyEvent() API, which is defined as follows:

HANDLE WINAPI ConnMgrApiReadyEvent();

The function takes no parameters, but returns a handle to an event that will become signaled when the Connection Manager is ready. Remember that you need to call the CloseHandle() function for the event that is returned.

Confirming that the Connection Manager is available is relatively straightforward:

// Make sure Connection Manager is ready
HANDLE hConnMgr = NULL;
BOOL bAvailable = FALSE;
hConnMgr = ConnMgrApiReadyEvent();

if(!hConnMgr)
return FALSE;

// Wait for 1 second to see if Connection Manager has
// signaled the event
DWORD dwResult = WaitForSingleObject(hConnMgr, 1000);

if(dwResult == WAIT_OBJECT_0)
bAvailable = TRUE;

// Close the event handle
if(hConnMgr)
CloseHandle(hConnMgr);

// Did it connect ok?
if(!bAvailable)
return FALSE;

// Do something now that Connection Manager is ready

URLs and Network Identifiers
The next thing you need to do before you can make a network request is to determine the globally unique identifier (GUID) for the type of object you are requesting, based on its Uniform Resource Locator (URL). The GUID you are returned has been deemed the best network connection to use for the destination that you passed to the function, based on the connection cost, latency, and so on. You then use the identifier when you eventually establish your connection.

To determine the best network connection to use, you need to call the ConnMgrMapURL() function, which is defined as follows:

HRESULT WINAPI ConnMgrMapURL(LPCTSTR pwszURL, GUID *pguid,
DWORD *pdwIndex);

The first parameter, pwszURL, is the location of the object you are requesting, and should be in standard Internet format (for example, http://www.furrygoat.com/index.html). You can also use the URL functions described in Chapter 2, such as InternetCreateUrl(), to correctly build a resource locator.

The next parameter, pguid, is a pointer that receives the GUID of the destination network. Finally, you have pdwIndex, which is an optional parameter that serves as a pointer to a DWORD index variable. The index is used if there were more than one network mapping for the destination resource. The first time you call the function, you should set the value of the index to 0. If there are additional mappings, then ConnMgrMapURL() will increment the index value, which should be passed into each additional call into ConnMgrMapURL().

The following example determines the best network connection to use for a particular URL:

// Map a local and remote URL
TCHAR tchLocalUrl[256] = TEXT(“”);
TCHAR tchRemoteUrl[256] = TEXT(“”);
HRESULT hResult = S_OK;

wsprintf(tchLocalUrl, TEXT(“http://fifi/report.txt”));
wsprintf(tchRemoteUrl, TEXT(“http://fifi.someserver.
com/report.txt”));

// Map a local URL {a1182988-0d73-439e-87ad-2a5b369f808b}
GUID guidNetworkObject;
DWORD dwIndex = 0;

if(ConnMgrMapURL(tchLocalUrl, &guidNetworkObject, &dwIndex)
== E_FAIL) {
OutputDebugString(TEXT(“Could not map a local request to
a network identifier”));
return FALSE;
}

// Map a remote URL {436ef144-b4fb-4863-a041-8f905a62c572}
dwIndex = 0;
if(ConnMgrMapURL(tchRemoteUrl, &guidNetworkObject, &dwIndex)
== E_FAIL) {
OutputDebugString(TEXT(“Could not map a remote request to
a network identifier”));
return FALSE;
}

Enumerating Network Identifiers
If you want to get more information about a particular network identifier, or just enumerate the available identifiers that are on the device, you can use the ConnMgrEnumDestinations() function, which is defined as follows:

HRESULT WINAPI ConnMgrEnumDestinations(int nIndex,
CONNMGR_DESTINATION_INFO *pDestInfo);

The first parameter is the index value of the identifier for which you want to get more information. If you want to enumerate all of the available identifiers, this should be set to 0 the first time the function is called, and incremented for each additional time you call the function. The other parameter, pDestInfo, is a pointer to a CONNMGR_DESTINATION_INFO structure, which contains the network information for the index specified.

The function will return an S_OK value if it is successful; otherwise, you will be returned an E_FAIL value.

The CONNMGR_DESTINATION_INFO structure looks like the following:

typedef struct _CONNMGR_DESTINATION_INFO {
GUID guid;

TCHAR szDescription[CONNMGR_MAX_DESC];
} CONNMGR_DESTINATION_INFO;

The structure contains only two pieces of information: the GUID that is associated with the network connection, and a null-terminated string containing the description of the network.

To enumerate all of the available network identifiers, you could do the following:

// Enumerate the available network identifiers
DWORD dwEnumIndex = 0;
BOOL fLoop = TRUE;
TCHAR tchNetNameInfo[256] = TEXT(“”);
CONNMGR_DESTINATION_INFO networkDestInfo;

// Walk through the list of Networks
do{
memset(&networkDestInfo, 0,
sizeof(CONNMGR_DESTINATION_INFO));

if(ConnMgrEnumDestinations(dwEnumIndex, &networkDestInfo)
== E_FAIL) {
fLoop = FALSE;
break;
}

// If we got a network ID’s information, show the
// description
wsprintf(tchNetNameInfo, TEXT(“Network Name:%s”),
networkDestInfo.szDescription);
MessageBox(NULL, tchNetNameInfo, TEXT(“Available
Networks”), MB_OK|MB_ICONINFORMATION);
dwEnumIndex++;
} while(fLoop);

[ Team LiB ]
[ Team LiB ]

Establishing and Maintaining Connections
Now that you have the proper network identifier to use for the network location from which you are requesting a resource, you can go ahead and tell Connection Manager to make the connection.

The Connection Manager API currently supports two different functions for establishing a connection to the network:

Synchronous Mode: To create a connection request that will not return until the connection either is established or returns an error, you can use the ConnMgrEstablishConnectionSync() function.

Asynchronous Mode: To create a connection request that returns immediately, you can use the ConnMgrEstablishConnection() function. You need to poll the request handle that you are returned in order to find out the current status of the connection.

Regardless of which method you use to establish your network connection, you need to properly fill out a CONNMGR_CONNECTIONINFO structure, which contains the parameters that describe the request. The structure is defined as follows:

typedef struct _CONNMGR_CONNECTIONINFO {
DWORD cbSize;
DWORD dwParams;
DWORD dwFlags;
DWORD dwPriority;
BOOL bExclusive;
BOOL bDisabled;
GUID guidDestNet;
HWND hWnd;
UINT uMsg;
LPARAM lParam;
ULONG ulMaxCost;
ULONG ulMinRcvBw;
ULONG ulMaxConnLatency;
} CONNMGR_CONNECTIONINFO;

The cbSize member should be set to the size of the CONNMGR_CONNECTIONINFO structure.

The dwParams member contains a list of optional member fields that are set in the structure, and can be a combination of the values shown in Table 7.1.

The dwFlags member defines the list of flags that specify any special properties for establishing the network connection. If no flags are set, the Connection Manager will use a direct IP connection. The dwFlags member should be set to one of the values shown in Table 7.2.

Table 7.1. CONNMGR_CONNECTIONINFO Flags Value
Description

CONNMGR_PARAM_GUIDDESTNET
guidDestNet field is valid

CONNMGR_PARAM_MAXCOST
ulMaxCost field is valid

CONNMGR_PARAM_MINRCVBW
ulMinRcvBw field is valid

CONNMGR_PARAM_MAXCONNLATENCY
ulMaxConnLatency field is valid

Table 7.2. Connection Manager Proxy Flags Value
Description

CONNMGR_FLAG_PROXY_HTTP
HTTP Proxy supported

CONNMGR_FLAG_PROXY_WAP
WAP gateway proxy supported

CONNMGR_FLAG_PROXY_SOCKS4
SOCKS4 proxy supported

CONNMGR_FLAG_PROXY_SOCKS5
SOCKS5 proxy supported

The dwPriority member specifies the priority level of the connection you are requesting. Remember that the Connection Manager needs to delegate various simultaneous network requests among multiple applications. It gives precedence to those that specify a higher priority value. Table 7.3 describes the priority levels that can be used.

The bExclusive member specifies whether the connection can be shared among multiple applications. If you set this value to FALSE, then other programs will be notified when the connection is available. If you set it to TRUE, then you place the connection in a state in which it cannot be shared. Other applications that request to establish a similar connection will fight for the same resource, with the outcome depending on each connection request’s priority.

The bDisabled member prevents the connection request from actually establishing a remote connection if set to TRUE. This can be used to test the availability of a network connection.

The guidDestNet member should contain the GUID for the network identifier that will be used to connect to the network. This is the same identifier returned using the ConnMgrMapURL() or ConnMgrEnumDestinations() functions. A remote connection cannot be established without this identifier.

Table 7.3. Connection Manager Priority Levels Value
Priority
Description

CONNMGR_PRIORITY_VOICE
Highest
Voice connection.

CONNMGR_PRIORITY_USERINTERACTIVE
A user has made this request, and is awaiting the creation of the connection.

Use this priority for user-interactive applications.

CONNMGR_PRIORITY_USERBACKGROUND
High
The application has become idle. You should switch to this priority when the application is not active.

CONNMGR_PRIORITY_USERIDLE
A user-initiated request has been idle for a length of time. Switching between this and CONNMGR_PRIORITY_USERINTERACTIVE enables the Connection Manager to optimize shared connections.

CONNMGR_PRIORITY_HIPRIBKGND
High-priority background.

CONNMGR_PRIORITY_IDLEBKGND
Low
Idle background task.

CONNMGR_PRIORITY_EXTERNALINTERACTIVE
A network request has been made from an external application.

CONNMGR_PRIORITY_LOWBKGND
Lowest
A connection is established only if a higher-priority client is already using the connection.

CONNMGR_PRIORITY_CACHED
None
Internal caching is being used; no external connection is needed.

To have the Connection Manager send any changes in the connection status to a window handle, you can use the next three members to set that up. The hWnd member is the window handle that you want to receive messages, uMsg should contain the WM_USER message ID that you want to have sent with the status change, and lParam is a DWORD value that will be placed in the lParam parameter of your message. You can set all three of these members to zero if you don’t want the Connection Manager to post any messages to your window.

The ulMaxCost member should specify the maximum cost of the connection.

The ulMinRcvBw member specifies the minimum amount of bandwidth that you need in order to accept the connection.

Finally, the ulMaxConnLatency member should specify the maximum acceptable connection latency, in milliseconds, before a connection fails. An acceptable value for the maximum latency would be around 4 seconds, or 4,000 milliseconds.

Establishing Connections
To create a synchronous connection, you can call the following function:

HRESULT WINAPI ConnMgrEstablishConnectionSync(
CONNMGR_CONNECTIONINFO *pConnInfo, HANDLE *phConnection,
DWORD dwTimeout, DWORD *pdwStatus);

The pConnInfo parameter should point to a CONNMGR_CONNECTIONINFO structure that contains the instructions for establishing the connection. This is followed by phConnection, a pointer to the connection handle that you are returned from the function. The dwTimeout parameter should be used to set a timeout value, in milliseconds, which the function will return if a connection cannot be established. Finally, the pdwStatus parameter will point to the final status of the connection.

Don’t forget that you need to call the ConnMgrReleaseConnection() function once you are finished using the connection in order to properly free the connection handle.

The following code establishes a synchronous connection:

// Establish a synchronous connection
HANDLE hConnection = NULL;
DWORD dwStatus = 0;
DWORD dwTimeout = 5000;

// Get the network information where we want to establish a
// connection
TCHAR tchRemoteUrl[256] = TEXT(“”);
wsprintf(tchRemoteUrl,
TEXT(“http://www.furrygoat.com/index.html”));
GUID guidNetworkObject;
DWORD dwIndex = 0;

if(ConnMgrMapURL(tchRemoteUrl, &guidNetworkObject, &dwIndex)
== E_FAIL) {
OutputDebugString(TEXT(“Could not map the request to a
network identifier”));
return FALSE;
}

// Now that we’ve got the network address, set up the
// connection structure
CONNMGR_CONNECTIONINFO ccInfo;

memset(&ccInfo, 0, sizeof(CONNMGR_CONNECTIONINFO));
ccInfo.cbSize = sizeof(CONNMGR_CONNECTIONINFO);
ccInfo.dwParams = CONNMGR_PARAM_GUIDDESTNET;
ccInfo.dwFlags = CONNMGR_FLAG_PROXY_HTTP;
ccInfo.dwPriority = CONNMGR_PRIORITY_USERINTERACTIVE;
ccInfo.guidDestNet = guidNetworkObject;

// Make the connection request (timeout in 5 seconds)
if(ConnMgrEstablishConnectionSync(&ccInfo, &hConnection,
dwTimeout, &dwStatus) == E_FAIL) {
return FALSE;
}

// Connection has been made, continue on…

Creating an asynchronous connection is a bit more involved. To make the connection request, you can use the ConnMgrEstablishConnection() function, which is defined as follows:

HRESULT WINAPI ConnMgrEstablishConnection(
CONNMGR_CONNECTIONINFO *pConnInfo, HANDLE *phConnection);

The first parameter, pConnInfo, is a pointer to a CONNMGR_CONNECTIONINFO structure that describes the connection. When the function returns, phConnection will point to a connection handle for the request.

When you are finished using the connection, you must properly free the handle by calling the ConnMgrReleaseConnection() function, as described in the section “Disconnecting from an Active Connection,” later in this chapter.

The following code polls the request handle for status changes:

// Establish an asynchronous connection
HANDLE hConnection = NULL;
DWORD dwStatus = 0;

// Get the network information where we want to establish a
// connection
TCHAR tchRemoteUrl[256] = TEXT(“”);
wsprintf(tchRemoteUrl, TEXT(“http://www.furrygoat.com/index.html”));
GUID guidNetworkObject;
DWORD dwIndex = 0;

if(ConnMgrMapURL(tchRemoteUrl, &guidNetworkObject, &dwIndex)
== E_FAIL) {
OutputDebugString(TEXT(“Could not map the request to a
network identifier”));
return FALSE;
}

// Now that we’ve got the network address, set up the
// connection structure
CONNMGR_CONNECTIONINFO ccInfo;

memset(&ccInfo, 0, sizeof(CONNMGR_CONNECTIONINFO));
ccInfo.cbSize = sizeof(CONNMGR_CONNECTIONINFO);
ccInfo.dwParams = CONNMGR_PARAM_GUIDDESTNET;
ccInfo.dwPriority = CONNMGR_PRIORITY_USERINTERACTIVE;
ccInfo.guidDestNet = guidNetworkObject;

// Make the connection request
if(ConnMgrEstablishConnection(&ccInfo, &hConnection) ==
E_FAIL)
return FALSE;

// Poll to see if the connection has been established
BOOL fLoop = TRUE;
BOOL fConnected = FALSE;

while(fLoop) {
dwStatus = 0;
if(FAILED(ConnMgrConnectionStatus(hConnection,
&dwStatus))) {
// Do some error processing here
fLoop = FALSE;
break;
}

// Got the status, do something with it:
if(dwStatus & CONNMGR_STATUS_CONNECTED) {
OutputDebugString(TEXT(“Connected!”));
fLoop = FALSE;
fConnected = TRUE;
break;
}

if(dwStatus & CONNMGR_STATUS_WAITINGCONNECTION)
OutputDebugString(TEXT(“Establishing a
connection….”));

if(dwStatus & CONNMGR_STATUS_DISCONNECTED) {
OutputDebugString(TEXT(“Disconnected from the
network….”));
fLoop = FALSE;
}
}

// Release the handle gracefully
if(!fConnected && hConnection) {
if(ConnMgrReleaseConnection(hConnection, FALSE) == S_OK)
hConnection = NULL;
return FALSE;
}

// Connection has been made, continue on…

Getting the Connection Status
To get the status of a Connection Manager connection, you can use the ConnMgrConnectionStatus() function:

HRESULT WINAPI ConnMgrConnectionStatus(HANDLE hConnection,
DWORD *pdwStatus);

The function needs only the handle to a current connection, and will return the status code for it in the pointer specified by the pdwStatus parameter.

Table 7.4 shows the possible status values that the Connection Manager can return.

Table 7.4. Connection Manager Status Values Value
Description

CONNMGR_STATUS_UNKNOWN
Unknown.

CONNMGR_STATUS_CONNECTED
Connected.

CONNMGR_STATUS_DISCONNECTED
Disconnected.

CONNMGR_STATUS_CONNECTIONFAILED
Connection has failed and cannot be reestablished.

CONNMGR_STATUS_CONNECTIONCANCELED
User-aborted connection.

CONNMGR_STATUS_CONNECTIONDISABLED
Connection is ready to connect but disabled.

CONNMGR_STATUS_NOPATHTODESTINATION
No path could be found to the destination.

CONNMGR_STATUS_WAITINGFORPATH
Waiting for a path to the destination.

CONNMGR_STATUS_WAITINGFORPHONE
Voice call is in progress.

CONNMGR_STATUS_WAITINGCONNECTION
Attempting to connect.

CONNMGR_STATUS_WAITINGFORRESOURCE
Resource is in use by another connection.

CONNMGR_STATUS_WAITINGFORNETWORK
No path to the destination could be found.

CONNMGR_STATUS_WAITINGDISCONNECTION
Connection is being brought down.

CONNMGR_STATUS_WAITINGCONNECTIONABORT
Aborting connection attempt.

Connection Priorities
One of the Connection Manager’s most useful features is its ability to juggle multiple requests, i.e., from more than one application at the same time. When making a connection request for your application, you are required to set its priority level (the dwPriority member of the CONNMGR_CONNECTIONINFO structure). This enables the Connection Manager to effectively schedule the order in which each request is processed—connection requests that have a higher priority are handled before those with a lower one.

Once a connection has been established, you can manually change its priority at any time by calling the ConnMgrSetConnectionPriority() function:

HRESULT WINAPI ConnMgrSetConnectionPriority(HANDLE
hConnection, DWORD dwPriority);

The first parameter is the request handle you were returned from either the ConnMgrEstablishConnection() or ConnMgrEstablishConnectionSync() function. This is followed by the new priority level you want to set for the request. The list of possible values is the same as the list for the dwPriority member of the CONNMGR_CONNECTIONINFO structure.

A well-behaved application will change its connection priority based on what the user is currently doing on the device. For example, if an application is downloading a Web page, you would want to set the connection to a high-priority level such as CONNMGR_PRIORITY_USERINTERACTIVE. This provides users with a better experience, because they expect an immediate response and high-priority requests are favored by the Connection Manager. However, if a user switches to a different application or is idle for an extended period of time, you will want to switch the level to CONNMGR_PRIORITY_USER_IDLE. A lower priority level enables other processes to more effectively share the connection.

The following code sample shows how to manually change the priority for a connection:

if(FAILED(ConnMgrSetConnectionPriority(hConnection,
CONNMGR_PRIORITY_USERIDLE))) {
OutputDebugString(TEXT(“Could not change connection
priority..”));
return FALSE;
}

Disconnecting from an Active Connection
To close a connection request, you can simply call the following function:

HRESULT WINAPI ConnMgrReleaseConnection(HANDLE hConnection,
BOOL bCache);

The hConnection parameter should be set to the current connection you want to release. If this is the last request handle that the Connection Manager has for the network type with which you are connected, it will drop the connection; otherwise, it will be left open for any other active requests. The bCache parameter should be set to TRUE if you want the Connection Manager to remember the connection in its cache; otherwise, you should set this to FALSE.

[ Team LiB ]
[ Team LiB ]

Connection Service Providers and Proxies
The Connection Manager uses what is known as a Connection Service Provider (CSP) to talk over a particular network. Each individual provider is a COM object that encapsulates the specifics for an individual network’s communications. For example, there are currently CSPs for networking, proxy servers, VPNs, and GRPS connections—each providing specific instructions about how to talk over a network. When you request a network connection, the Connection Manager will determine which CSP to use based on the cost, latency, and bandwidth for the resource you are trying to access.

To exchange information with a CSP object, you can use the ConnMgrProviderMessage() API function:

HRESULT WINAPI ConnMgrProviderMessage(HANDLE hConnection,
const GUID *pguidProvider, DWORD *pdwIndex, DWORD dwMsg1,
DWORD dwMsg2, PBYTE pParams, ULONG cbParamSize);

The hConnection parameter is optional but can be set to a particular request handle if one is active. The next parameter, pguidProvider, should point to the GUID of the CSP to which you want to send a message. If multiple network providers are being used by a single connection, then you can set the pdwIndex pointer to the index of the specific provider to which the message should be sent. Both dwMsg1 and dwMsg2 are optional and have different meanings depending on the provider and message being sent. The pParams parameter should point to a data structure specific to the provider you are talking with, and is followed by cbParamSize, which should point to the size of the structure.

By this point, you are probably asking yourself why communicating with the provider interfaces is useful. One of the most common uses for sending a connection service provider a message is to obtain the proxy server configuration options for a particular communications request.

You can get proxy configuration information by passing a PROXY_CONFIG structure to the network provider defined by IID_ConnPrv_IProxyExtension. After the ConnMgrProviderMessage() function is called, the structure will be filled in with the requested information for the proxy type. The PROXY_CONFIG structure is defined as follows:

typedef struct _PROXY_CONFIG {
DWORD dwType;
DWORD dwEnable;
TCHAR szProxyServer[CMPROXY_PROXYSERVER_MAXSIZE];
TCHAR szUsername[CMPROXY_USERNAME_MAXSIZE];
TCHAR szPassword[CMPROXY_PASSWORD_MAXSIZE];
TCHAR szProxyOverride[CMPROXY_PROXYOVERRIDE_MAXSIZE];
TCHAR szExtraInfo[CMPROXY_EXTRAINFO_MAXSIZE];
} PROXY_CONFIG;

The dwType member specifies the type of proxy server to use. It can be set to the following: CONNMGR_FLAG_PROXY_HTTP (for standard HTTP proxies), CONNMGR_FLAG_PROXY_WAP (for a WAP gateway), CONNMGR_FLAG_PROXY_SOCKS4 (for a SOCKS 4.0 server), or CONNMGR_FLAG_PROXY_SOCKS5 (for a SOCKS 5.0 server). This member should be set before calling the function.

The dwEnable member specifies whether the CSP should have the capability to connect to the specified proxy server. The CSP automatically sets this to 1, which enables the proxy server. If you set it to 0, then although the proxy configuration will exist, the CSP will not connect to the server.

The szProxyServer member specifies the server and port of the proxy. The correct syntax for setting this should be a null-terminated string that contains the server name, a colon, and the port number (for example, server:port).

The szUsername and szPassword members specify the authorization to be used when communicating with a SOCKS4 or SOCKS5 proxy server.

The szProxyOverride and szExtraInfo members are not currently used.

The following example shows how you could obtain the proxy information for a standard HTTP request:

// Get information on the proxy for an HTTP connection
// request
PROXY_CONFIG proxyConfig;
DWORD dwSize = sizeof(PROXY_CONFIG);
HRESULT hr = 0;
GUID IID_ConnPrv_IProxyExtension = {0xaf96b0bd, 0xa481,
0x482c, {0xa0, 0×94, 0xa8, 0×44, 0×87, 0×67, 0xa0, 0xc0}};

memset(&proxyConfig, 0, sizeof(PROXY_CONFIG));
proxyConfig.dwType = CONNMGR_FLAG_PROXY_HTTP;

hr = ConnMgrProviderMessage(NULL, &IID_ConnPrv_IProxyExtension,
NULL, 0, 0,
(PBYTE)&proxyConfig, dwSize);

if(FAILED(hr)) {
OutputDebugString(TEXT(“Could not get the proxy
information”));
return FALSE;
}

[ Team LiB ]
[ Team LiB ]

Scheduled Connections
The Connection Manager also enables you to configure an event (at a specific time) that will cause the device to wake up (if not already on), establish a connection to a network, and run an application. This can be particularly useful if you want a network operation to do something when the user is not around his or her device. Note that a scheduled event will remain registered until it has run or is deleted. In addition, an event remains scheduled across device reboots.

To set up a scheduled connection, you can use the ConnMgrRegisterScheduledConnection() function, which is defined as follows:

HRESULT WINAPI ConnMgrRegisterScheduledConnection(
SCHEDULEDCONNECTIONINFO *pSCI);

The only parameter that is needed is a pointer to a SCHEDULEDCONNECTIONINFO structure:

typedef struct _SCHEDULEDCONNECTIONINFO {
GUID guidDest;
UINT64 uiStartTime;
UINT64 uiEndTime;
UINT64 uiPeriod;
TCHAR szAppName[MAX_PATH];
TCHAR szCmdLine[MAX_PATH];
TCHAR szToken[32];
BOOL bPiggyback;
} SCHEDULEDCONNECTIONINFO;

The guidDest member specifies the network identifier with which you want to create a connection. The next two members are used to set the start and end times for the connection. These should be set in the same format as the FILETIME structure, which specifies the amount of 100-nanosecond intervals since January 1, 1601.

The uiPeriod member is the amount of time (in 100-nanosecond units) between each connection attempt. If you set this to 0, the device will not wake up to make your connection.

The szAppName and szCmdLine members should point to the name of the application to run when the connection is made, and the command line that you want passed to the application, respectively.

The szToken member is a unique identifier that you can use to later delete the connection request.

Finally, the bPiggypack flag determines how the device should wake up for the event. If bPiggyback is set to TRUE, then the application specified by the szAppName parameter will execute as soon as the network connection to guidDest has been established. If it is set to FALSE, then the device will wake up only when another application or scheduled event connects to the same network.

The following code shows how you could schedule an application to run, 15 seconds from now. The scheduler will continue to attempt a connection every five minutes for the next hour:

// Get the network information where we want to establish a
// connection
GUID guidNetworkObject;
DWORD dwIndex = 0;
TCHAR tchRemoteUrl[256] = TEXT(“”);
wsprintf(tchRemoteUrl, TEXT(“http://www.furrygoat.com/index.html”));

if(ConnMgrMapURL(tchRemoteUrl, &guidNetworkObject, &dwIndex)
== E_FAIL) {
OutputDebugString(TEXT(“Could not map the request to a
network identifier”));
return FALSE;
}

// Get the time to launch
SYSTEMTIME sysTime;
FILETIME ftCurrent;
ULARGE_INTEGER ulCurrentTime;

GetLocalTime(&sysTime);
SystemTimeToFileTime(&sysTime, &ftCurrent);

ulCurrentTime.LowPart = ftCurrent.dwLowDateTime;
ulCurrentTime.HighPart = ftCurrent.dwHighDateTime;

// Set up the schedule times
// In 15 seconds, let’s try every 5 minutes for an hour
DWORD dwSecStart = 15;
DWORD dwSecDuration = 3600;
DWORD dwSecPeriod = 300;

// Schedule a connection
SCHEDULEDCONNECTIONINFO sci;

memset(&sci, 0, sizeof(SCHEDULEDCONNECTIONINFO));
sci.uiStartTime =
ulCurrentTime.QuadPart+(UINT64)(10*1000*1000)*dwSecStart;
sci.uiEndTime = ulCurrentTime.QuadPart+(UINT64)(10*1000*1000)*
(dwSecStart+dwSecDuration);
sci.uiPeriod = (UINT64)(10*1000*1000)*(dwSecPeriod);
sci.guidDest = guidNetworkObject;
sci.bPiggyback = TRUE;

wsprintf(sci.szAppName, TEXT(“\\Windows\\someapp.exe”));
wsprintf(sci.szCmdLine, TEXT(“\\Windows\\someapp.exe”));
wsprintf(sci.szToken, TEXT(“schdToken”));

HRESULT hr = ConnMgrRegisterScheduledConnection(&sci);

if(FAILED(hr)) {
OutputDebugString(TEXT(“Could not schedule the connection
event”));
return FALSE;
}

To delete a scheduled connection, you can call the following function:

HRESULT WINAPI ConnMgrUnregisterScheduledConnection(LPCTSTR
pwszToken);

The only parameter that you need to send is the unique token that identifies the scheduled connection, as shown in the following example:

if(SUCCEEDED(ConnMgrUnregisterScheduledConnection(TEXT
(“schdToken”)))) {
OutputDebugString(TEXT(“Scheduled event has been
cancelled.”));
}

[ Team LiB ]

11
Nov
09

Belajar Animasi

Kuliah Umum IlmuKomputer.Com
Copyright © 2004 IlmuKomputer.Com
Demo Membuat Animasi
Teori dan Praktek
Eko Purwanto
epurwanto@webmediacenter.com

http://www.webmediacenter.com

Abstrak:
Perkembangan teknologi komputer demikian pesatnya, yang memiliki fungsi awal sebagai alat bantu
dalam menyelesaikan persoalan dan masalah dalam segala bidang kemudian memasuki fungsi sebagai
penghibur. Hal ini ditandai dengan banyak produk-produk yang berbasis komputer dalam dunia
hiburan. Salah satu dunia hiburan yang banyak diminati adalah kartun.
Penggunaan komputer untuk menghasilkan kartun yang professional sudah dilakukan diawali dengan
kartun-kartun yang dibuat Hollywood Amerika Serikat yang menggunakan komputer. Di Indonesia
sendiri bermunculan forum-forum yang membahas tentang animasi kartun ini dan beberapa perusahaanperusahaan
yang memfokuskan diri di bidang animasi kartun.
Pembuatan animasi kartun ini jika ditekuni akan dapat menciptakan peluang-peluang kerja baru di
Indonesia. Dalam skripsi ini akan digambarkan cara membuat animasi kartun dengan menggunakan
Macromedia Flash MX.
18
Lisensi Dokumen:
Copyright © 2004 IlmuKomputer.Com
Seluruh dokumen di IlmuKomputer.Com dapat digunakan, dimodifikasi dan disebarkan secara
bebas untuk tujuan bukan komersial (nonprofit), dengan syarat tidak menghapus atau merubah
atribut penulis dan pernyataan copyright yang disertakan dalam setiap dokumen. Tidak
diperbolehkan melakukan penulisan ulang, kecuali mendapatkan ijin terlebih dahulu dari
IlmuKomputer.Com.
Kuliah Umum IlmuKomputer.Com
Copyright © 2004 IlmuKomputer.Com
1. Pendahuluan
Pada bab ini akan diuraikan cara mendesain kartun dengan menjabarkan proses produksi, pembangunan
cerita, merencanakan animasi, mendesain karakter, membuat model, membuat layout, membuat
animasi, dan memasukkan suara
a. Mendesain Kebutuhan Animasi Kartun
Animasi kartun yang akan didesain ini akan ditampilkan dalam bentuk web atau komputer. Pemilihan
media tampilnya kartun akan mempengaruhi dari bentuk desain kartun yang akan dibuat. Terdapat dua
media yang saat ini berpengaruh besar yakni media televisi dan komputer.
Pada media televisi, kendala yang dihadapi adalah setiap negara memiliki sistem televisi yang berbeda,
dan tidak ada standar umum yang ditetapkan bersama. Kondisi ini menyebabkan media video yang
dihasilkan oleh setiap negara susah untuk ditransfer. Contohnya video tape yang dibuat Amerika tidak
dapat diputar di Korea ataupun Inggris. Ketidaknyamanan ini disebabkan kondisi politik yang ada dalam
negara tersebut, yang bertujuan untuk menghindari pertukaran informasi dengan cepat yang akan
mempengaruhi pandangan, ide maupun gagasan baru dari setiap negara. Tetapi kondisi ini mulai
berubah pada saat internet sudah dapat menjangkau negara di seluruh dunia.
Digital video tidak memiliki batasan, yang didesain dengan kualitas dan ukuran yang mampu
menghantarkan informasi ke hadapan penggunanya. Format digital video ini dapat saja disimpan dalam
bentuk CD-ROM, DVD, ataupun dalam bentuk file yang dapat di download dari internet.
Beberapa sistem televisi yang digunakan umum di seluruh negara adalah:
a. NTSC System
NTSC (National Television System Committee) merupakan sistem milik Amerika Serikat
dengan lebar layar 525 baris, 30 fps, digunakan di negara Kanada, Greenland, Mexico, Kuba,
Jepang, Philipina, Puerto Rico dan beberapa negara di Amerika Selatan.
b. PAL dan SECAM System
Banyak negara yang menggunakan kedua sistem ini yakni PAL (Phase Alternating Line) atau
SECAM (Sequential Color and Memory). Kedua sistem ini memiliki lebar layar 625 baris,
dengan penggunaan 25 fps.
c. HDTV
HDTV (High Definition Television) adalah standar internasional baru untuk dunia televisi.
HDTV dapat digunakan dalam 1.125 baris.
b. Sinopsis
Animasi kartun yang dibuat ini berjudul “Wanita Jagoan Cun Lee” menceritakan aksi dari seorang
pendekar wanita yang menunjukkan kehebatan ilmu beladirinya. Pada aksi pertama Cun Lee (nama
tokoh kartunnya) melakukan tendangan maut, dan kemudian secara beruntun dia mengeluarkan ilmu
tenaga dalamnya menggunakan tangan kirinya disertai dengan efek suara ilmu yang telah
dikeluarkannya.
c. Membuat Storyboard
Storyboard adalah rancangan dasar dalam menciptakan suatu animasi kartun. Bentuknya menyerupai
halaman komik. Halaman yang dibangun dalam storyboard ini akan memandu kartunis dan animator
dalam membuat gambar dan animasinya. Pada animasi kartun yang dibuat ini gambar yang dihasilkan
merupakan hasil scanning dari buku komik. Storyboard kartun ini:
19
Kuliah Umum IlmuKomputer.Com
Copyright © 2004 IlmuKomputer.Com
Gambar 1. Storyboard
d. Membuat Latar Belakang
Penggunaan latar belakang dalam animasi kartun merupakan bagian penting dalam keberhasilan animasi
kartun itu sendiri yang memperkuat kesan yang ingin ditonjolkan. Pemilihan latar belakang harus tepat
pada tujuannya dan sesuai dengan waktunya (suasana yang ingin diciptakan). Latar belakang ini juga
jangan bersifat kaku yang selalu menampilkan latar belakang seperti kota, gunung, hutan dan lainnya,
tetapi juga perlu ditambahkan efek-efek khusus yang memperkuat tokoh utama.
Pada animasi kartun yang akan dibuat ini, latar belakang yang ditampilkan nanti adalah wajah tokoh
yakni Cun Lee, yang ditampilkan dengan ukuran besar. Tujuannya adalah untuk memperkuat tokoh
utama karena animasi kartun ini berdurasi singkat.
20
Pose
Inbetween
Pose
Kuliah Umum IlmuKomputer.Com
Copyright © 2004 IlmuKomputer.Com
2. Prinsip Dasar Animasi Karakter
(sumber: animatorforum.org)
Animasi karakter adalah teknik yang dibuat untuk menghidupkan peran-peran, menjadi suatu karakter
hidup dan manusiawi. Untuk menjadi karakter animator yang baik diperlukan perpaduan berbagai
keahlian. Untuk menjadi seorang animator, diperlukan penguasaan keahlian di bidang acting,
sinematography, dan pemahaman mengenai proses pembuatan film. Seorang animator juga harus
mengerti mengenai proses penceritaan yang baik, akan menarik perhatian penonton sehingga
memancing reaksi penonton yang menyaksikan, baik tertawa, sedih maupun gembira. Dengan kata lain,
seorang animator harus bisa mengekpresikan emosi tertentu kepada penonton, bukan mempertontonkan
serangkaian gerak yang tidak berarti.
Untuk mampu menghasilkan karya yang baik diperlukan penguasaan terhadap 12 prinsip dasar animasi.
Prinsip yang berlaku pada animasi 2D maupun 3D (termasuk paper dan clay animation) adalah
rangkuman sifat-sifat gerak di alam, terutama gerak manusia. 10 Prinsip pertama dikenalkan pertama
kali oleh Frank Thomas & Ollie Johnston dalam bukunya, Illusion of Life, tahun 1981. Lebih jauh lagi
John Lasseter, yang dikenal sebagai sutradara film Toys Story, menambahkan menjadi 12 dalam
makalahnya di SIGGRAPH 1987, yang berjudul “Principles of Traditional Animation Applied To 3D
Computer Animation”. Pemahaman kedua belas prinsip tersebut adalah :
1. Pose dan gerakan antara (Pose-To-Pose Action and Inbetween)
Pada animasi yang didesain di atas akan sulit jika langsung meng-copy semua gerakan pada tiap
frame. Agar mudah, animator membagi sekuens gerakan dalam 2 bagian, yaitu pose dan gerakan
antara (Pose-to-pose and Inbetween). Pose adalah gerakan paling ekstrim dari tiap gerakan yang ada
dan inbetween adalah gerakan antara suatu pose ke pose lainnya. Pada animasi 2D key animator
akan menggambar key pose. Lalu inbetweener melanjutkan dengan membuat gerakan antara satu
pose ke pose yang lainnya. Animator 3D biasanya melakukan setup karakter dan mengatur pose.
Inbetween dilakukan oleh komputer secara otomatis.
Gambar 2. Pose dan Inbetween
Hasil dari animasi di atas:
21
Kuliah Umum IlmuKomputer.Com
Copyright © 2004 IlmuKomputer.Com
Pose yang ada adalah :
1. Kaki kiri berdiri bersiap melakukan tendangan
2. Kaki kiri melakukan tendangan keatas
Inbetween-nya adalah : Gerakan kaki kiri pada saat melakukan gerakan tendangan sampai melakukan
tendangan ke atas.
2. Pengaturan waktu (Timing)
Pengaturan waktu merupakan “jiwa” dari suatu animasi. Dengan mengatur durasi gerakan, suatu
karakter bisa terlihat berbeda dari karakter yang lain. Meskipun posenya sama, tetapi dengan durasi
gerak berbeda, karakter bisa terlihat berjalan santai (jarak antara key pose cukup jauh), berjalan
biasa, atau terlihat tergesa-gesa berlari (jarak antara key pose lebih dekat).
Pada animasi kaki tendangan di atas di desain untuk tendangan kaki kiri, pada saat kaki kiri
menendang ke atas dibuat pengaturan waktu sebanyak 120 frame, dan kaki kiri turun kembali
sebanyak 120 frame lagi.
3. Gerakan sekunder (Secondary Action)
Gerakan sekunder adalah gerakan yang terjadi akibat gerakan yang lain. Gerakan itu merupakan
gerakan masih suatu kesatuan sistem yang tidak terpisahkan dari gerakan utama. Pada desain
animasi di atas, dirancang pada saat melakukan tendangan, tangan tangan kiri juga melakukan
penyeimbangan dengan melakukan gerakan, pinggang tokoh juga akan ikut berputar dan badan akan
ikut condong ke belakang mengeikuti gerakan tendangan. Gerakan ini terjadi akibat gerakan utama,
yaitu tendangan kaki, yang terjadi akibat reaksi alamiah tubuh untuk tetap seimbang. Contoh lainnya
jika anjing yang sedang berlari dan tiba-tiba berhenti. Pada saat berhenti, telinganya yang panjang
tidak langsung berhenti, melainkan bergerak ke depan dan baru kemudian berhenti. Gerakan telinga
anjing tadi terjadi karena gerakan berhenti. Contoh lain bisa dilihat pada ekor binatang pada saat
berjalan, ekor tersebut tidak tinggal diam , melainkan juga bergerak seirama dengan gerakan badan
binatang tersebut.Untuk menciptakan gerakan sekunder menambah kesan gerak alami, gerakan ini
tidak boleh melebihi gerakan utama.
4. Akselerasi gerak (Ease In and Out)
Prinsip ini diilhami dari hukum Newton yaitu setiap benda diam cenderung tetap diam, dan setiap
benda bergerak akan tetap bergerak, kecuali mengalami percepatan atau akselerasi. Dari suatu pose
yang diam ke sebuah gerakan akan terjadi percepatan, dan dari gerakan ke sebuah pose akan terjadi
perlambatan. Gerakan semua benda mirip dengan laju mobil. Saat bergerak mobil akan berakselerasi
terlebih dahulu, lalu mobil itu bergerak dengan kecepatan tetap. Sebelum berhenti ia akan
mengalami perlambatan atau akselerasi negatif dan akhirnya berhenti di satu titik. Contoh lainnya
adalah bola yang ditembakkan dengan kanon. Pada saat ditembakkan, ia melaju dengan kecepatan
tertinggi, lalu gaya gravitasi akan memperlambatnya dan ia akan berhenti pada ketinggian tertentu.
Gaya gravitasi akan menariknya kembali dan ia akan bergerak dengan akselerasi tertentu ke arah
bumi. Akhirnya bola itu akan mencapai titik terendah pada kecepatan tertinggi. Prinsip yang sama
berlaku pada animasi karakter. Pada gerakan menggelengkan kepala, animator akan menambahkan
“percepatan” pada awal gerak dan “perlambatan” pada akhir gerak.
5. Antisipasi (anticipation)
Pada dasarnya semua gerakan akan terjadi dalam 3 bagian, bagian awal yang disebut antisipasi,
gerakan itu sendiri, dan gerakan akhir yang disebut gerakan penutup (follow through). Pada saat
meloncat biasanya makhluk hidup akan menekuk ke dua kaki, membungkukkan badan dan menarik
ke dua tangan ke bawah, barulah meloncat. Gerakan pendahuluan inilah yang disebut antisipasi.
Demikian juga waktu duduk dan bangkit dari tempat duduk. Sebelumnya membungkukkan badan,
22
Kuliah Umum IlmuKomputer.Com
Copyright © 2004 IlmuKomputer.Com
menekan beban seluruh tubuh pada telapak kaki, dan melenting ke atas untuk bangkit. Gerakan
antisipasi ini juga berlaku untuk semua gerakan. Pada film animasi 2D atau film karton, misalnya
Road runner, tokoh kartun tersebut hilang dari layar dengan meninggalkan segumpal asap tebal.
Biasanya sebelum lari mereka memasang pose persiapan. Kaki di tarik menjauh dari arah lari, dan
tangan merentang bersiap-siap lari hilang. Antisipasi mengantarkan pikiran untuk menyambut
gerakan berikutnya. Biasanya semakin cepat suatu gerakan, semakin lama waktu antisipasinya.
6. Gerakan penutup dan perbedaan waktu gerak (Follow Through and Overlapping Action)
Prinsip ini didasari hukum kelembaman Newton yaitu setiap benda yang bergerak cenderung tetap
bergerak, bahkan setelah mendapat gaya yang menghentikannya. Jika sebuah mobil y ngebut dan
tiba-tiba berhenti, sebelum berhenti ia akan melaju melebihi titik hentinya dahulu, baru setelah itu
kembali ke titik semula. Sama juga jika berlari dan tiba-tiba berhenti. Badan akan sedikit
“terlempar” ke depan, sebelum akhirnya kembali ke titik seimbang. Demikian pula pada saat tangan
memukul sesuatu. Tiba-tiba berhenti, dan tangan akan bergetar sedikit pada titik yang paling ektrim.
Ini yang disebut gerakan penutup (follow through). Tidak semua gerakan terjadi atau berhenti pada
saat yang bersamaan. Selalu ada perbedaan waktu antara langkah kaki dan ayunan tangan. Sering
gerakan-gerakan tersebut terasa bertindihan. Prinsip ini yang dikenal sebagai overlapping action.
Pada saat melompat turun ke bawah, pada saat kedua kaki menginjak tanah dan tidak mungkin
kedua kaki turun bersamaan. Kedua tanganpun tidak akan langsung berhenti berayun pada saat
bersamaan, melainkan cenderung terus berayun ke depan untuk mengimbangi tubuh agar kembali
stabil. Kedua lengan pun tetap tidak akan berhenti secara bersamaan. Setiap gerakan yang ada akan
terjadi pada waktu yang berbeda-beda. Biasanya gerakan sekunder akan mengalami perbedaan
waktu gerak (Overlapping action). Jika seekor binatang bergerak, ekornya akan ikut bergerak, tetapi
gerakan ekor tidak berhenti bersamaan dengan gerakan binatang, melainkan berhenti beberapa saat
lebih panjang. Inilah penerapan prinsip overlapping action.
Pada animasi kartun yang dibuat setelah Cun Lee berhasil melakukan tendangan tangan kanannya
otomatis juga akan bergerak, begitu juga pada saat Cun Lee sudah mengeluarkan ilmu tenaga
dalamnya. Pada saat gerakan terakhir penutup celana Cun Lee ikut bergerak setelah Cun Lee
melakukan semua kegiatannya. Gerakan ini yang disebut dengan gerakan lanjutan (followthrough)
.
Tidak semua gerakan terjadi secara bersamaan. Gerak alami terjadi secara susul menyusul (overlap).
Pada desain animasi Cun Lee gerakan tendangan akan diikuti dengan gerakan tangan yang
melakukan pukulan tenaga dalam yang menujukkan gerakan yang terjadi susul menyusul antara
gerakan satu dengan lainnya.
23
Kuliah Umum IlmuKomputer.Com
Copyright © 2004 IlmuKomputer.Com
7. Gerak melengkung (Arcs)
Pada film Stefen Seagel selalu dapat dilihat keindahan gerak aksi perkelahian. Keindahan ini
berasala dari bela diri Aikido. Aikido menyatakan bahwa semua gerakan di alam bersifat melingkar
atau melengkung. Perputaran planet yang berbentuk elips. Keindahan gerakan tari, atau pun gerakan
manusia dan hewan. Prinsip inilah yang diterapkan pada animasi. Contoh orang yang sedang
menggelengkan kepala . Pada saat kepala menggeleng dari kiri kanan, ia akan membuat gerakan
sedikit melengkung ke arah atas atau bawah yang membentuk lingkaran. Dengan menerapkan
prinsip gerakan melengkung sebuah animasi tidak akan terlihat kaku seperti robot.
Gambar 3. Gerakan melengkung
7. Dramatisasi gerakan (Exaggeration)
Dramatisasi gerakan adalah tindakan mempertegas apa yang sedang dilakukan. Para pemain aktor
teater akan mendramatisasi atau melebih-lebihkan aksi mereka agar terlihat jelas oleh para
penonton, apalagi penonton selalu melihat pertunjukan dari jarak jauh (long shot). Saat marah , sang
aktor berkacak pinggang, menggerakkan seluruh badannya, dan menuding-nuding lawannya.
Demikian pula saat tertawa, ia berkacak pinggang, menarik bagian atas tubuhnya ke belakang,
mengangkat kepalanya ke atas, membuka mulut selebar-lebarnya dan akhirnya mengeluarkan suara
tawa demikian kerasnya.
8. Elastisitas (Squash and Stretch)
Prinsip elastisitas dapat dilihat dalam kartun Coyote dalam animasi “Road Runner” yang senang
dengan aksi kejar-kejaran. Tetapi Coyote selalu gagal dan terjatuh ke jurang. Sebelum jatuh ia
memandang kamera, sementara kaki, badan dan lehernya memanjang (strecthing) ke bawah.
24
Gerakan
Melengkung
Kuliah Umum IlmuKomputer.Com
Copyright © 2004 IlmuKomputer.Com
Akhirnya kepalanya hilang dari layar dengan meninggalkan segumpal asap. Contoh lainnya adalah
bola karet yang dilempar ke atas, akan “penyek” (squash) dulu sebelum memantul kembali ke atas.
Kelenturan menunjukkan tingkah rigiditas suatu objek. Bola karet akan mempunyai derajat
kelenturan yang berbeda dengan bola bowling. Pada objek realistis, prinsip ini terlihat pada
kontraksi otot. Tekuk kedua lengan dan kencangkan otot, otot akan mengalami pembesaran. Hal
penting yang harus dilakukan adalah setiap benda yang mengalami pelenturan tetap akan
mempertahankan volumenya. Jika sebuah karakter berubah volumenya, realitas yang ada akan
hilang. Pada animasi prinsip ini tidak diberlakukan, melainkan pada bagian tertentu dari suatu
benda. Otot biceps misalnya mengalami pelenturan yang lebih besar pada bagian tengahnya
dibandingkan bagian tendon atau tepinya. Meskipun benda rigid atau benda realistis (seperti
manusia) tampak tidak mengalami pelenturan, prinsip ini tetap saja digunakan. Pada saat melompat
ke bawah badan akan tertekuk sedikit, gerakan ini yang merupakan gerakan sekunder mirip dengan
peristiwa “penyek” yang terjadi pada bola karet yang dilempar ke lantai.
9. Penempatan di bidang gambar (Staging)
Selain animasi cara menempatkan karakter dihadapan kamera mutlak diperlukan. Dengan
menempatkan kamera atau karakter secara tepat, konsep yang diinginkan dapat terbaca dengan
mudah oleh penonton. Prinsip yang paling penting adalah prinsip sinematography dan prinsip
silluet. Dengan penempatan kamera yang rendah, sebuah karakter akan terlihat besar dan
menakutkan. Demikian juga dengan penempatan kamera yang tinggi, karakter akan terlihat kecil
atau terlihat bingung. Penempatan kamera dengan arah miring (rolling) akan membuat gerakan
terlihat dinamis. Penempatan secara simetris akan membuat karakter terlihat formal dan berwibawa,
penempatan arah gerak secara diagonal juga akan membuat adegan terlihat dinamis. Melihat Siluet
karakter (hanya pada bagian foreground vs background) juga memberikan ketegasan pose sebuah
karakter. Jika siluet karakter terlihat ambigu alias tidak jelas. maka akan sulit bagi penonton untuk
mencerna aksi yang dilakukan karakter. Dengan kata lain, seorang animator juga membutuhkan
kemahiran dari berbagai bidang. Sinematography, penyutradaraan, akting, editing dan juga
compositing sangat penting untuk membantu seorang animator menyelesaikan karyanya.
10. Daya tarik karakter (appeal)
Setiap karakter dalam animasi haruslah mempunyai daya tarik yang unik, yang membedakannya
dengan karakter yang lain. Bisa saja suatu karakter terlihat unik dari design, atau dari caranya
menunjukkan ekpresi pribadinya, seperti yang dimiliki oleh Donal Bebek dan Tazmanian Devil. Jim
Carey misalnya, mempunyai daya tarik yang berbeda dengan Harrison Ford. Daya tarik Jim Carrey
adalah tingkah lakunya yang demikian hiperbolik. Sean Connery mempunyai daya tarik dalam
kedewasaan kepribadiannya. Daya tarik karakter bukan saja terlihat pada penampilannya (rupa
karakter, desain pakaiannya, atau penampilan aksesorinya) melainkan terefleksikan pada seluruh
gerak-gerik, tingkah laku dan sikapnya. Daya tarik memungkinkan penonton untuk menaruh
perhatian khusus kepada karakter yang ditampilkan.
11. Penjiwaan peran (personality)
Kemampuan akting adalah satu hal yang harus dimiliki setiap karakter animator. Akting
memungkinkan animator menterjemahkan tingkah laku dan daya tarik karakter secara tepat,
sehingga penonton merasakan apa yang dimaui oleh sang animator, bahkan tanpa dialog sekalipun.
Cara paling mudah menghayati suatu peran adalah dengan membayangkan karakter sebagai seorang
aktor. Animator yang baik adalah animator yang mampu menggerakkan seluruh anggota tubuhnya
dan menterjemahkannya ke dalam suatu karya animasi.
25
Kuliah Umum IlmuKomputer.Com
Copyright © 2004 IlmuKomputer.Com
Tanpa penjiwaan sebuah karakter akan terlihat datar, kaku dan tidak manusiawi. Penjiwaan peran
ini adalah “roh” dari setiap karakter. Dengan penjiwaan setiap karakter akan terlihat berbeda dari
lainnya, tampak lebih hidup dan lebih “berjiwa”. Dibutuhkan pengetahuan mengenai latar belakang
dari setiap karakter, tingkah laku, caranya berkomunikasi dan bereaksi terhadap lingkungannya.
Cara paling mudah menghayati karakter adalah dengan menghayalkan aktor tertentu dan
menterjemahkan sifat aktor tersebut ke dalam karakter animasi yang dibuat.
3. Mempersiapkan Animasi Kartun
a. Kebutuhan Software
Dalam mendesain animasi kartun ini diperlukan beberapa software yang harus tersedia di komputer,
yaitu:
1. Sistem Operasi yang digunakan dapat salah satu yaitu Windows 98, Windows NT, Windows 2000
ataupun Windows XP.
2. Software menscanner gambar biasanya disertakan pada saat pembelian scanner seperti Adobe
Photoshop, Photostudio dan lainnya.
3. Software mengolah animasi kartun yaitu dengan Macromedia Flash MX.
4. Untuk merekam suara dapat digunakan software yang telah disediakan Windows yakni “Sound
Recorder”.
b. Proses Memperoleh Objek Gambar
Berdasarkan storyboard yang telah dibuat, selanjutnya membuat gambar kartun untuk dibuat animasi
yang diinginkan. Dalam tulisan ini sumber gambar diambil dari buku,”How to Draw & Create Manga”
karya Tatsu Maki, pada halaman 106. Gambar yang sudah ada di scanner dan didapat hasil sebagai
berikut:
26
Kuliah Umum IlmuKomputer.Com
Copyright © 2004 IlmuKomputer.Com
Gambar 4. Hasil Scanner Gambar Cun Lee dari buku “How to Draw & Create Manga”
c. Penggunaan Macromedia Flash MX
Macromedia Flash MX adalah program grafis animasi standar professional untuk menghasilkan halaman
web yang menarik. Movie Flash terdiri atas grafik, teks, animasi dan aplikasi, yang mengutamakan
grafik berbasis vektor. Flash memiliki akses lebih cepat dan akan terlihat halus pada skala resolusi layar
besar atau kecil, selain itu juga mempunyai kemampuan untuk mengimpor video, gambar dan suara dan
aplikasi.
Macromedia Flash MX juga bisa memasukkan unsur interaktif dalam movienya menggunakan
Actionscript (suatu bahasa pemrograman berorientasi objek), yang pengguna bisa berinteraksi dengan
movie, menggunakan keyboard atau mouse untuk berpindah ke bagian-bagian yang berbeda dari sebuah
movie, mengontrol movie, memindahkan objek-objek, memasukkan informasi melalui form dan operasioperasi
lainnya.
Area Kerja Flash MX
Area gambar di Flash MX terdiri atas enam bagian, yaitu Menu, Stage, Timeline, Toolbox, Panels, dan
Properties.
• Menu, berisi kumpulan instruksi atau perintah-perintah yang digunakan dalam Flash. Misalnya,
klik menu File, Save berfungsi untuk menyimpan dokumen.
• Stage adalah dokumen atau layar yang akan digunakan untuk meletakkan objek-objek dalam Flash.
• Timeline berisi frame-frame yang berfungsi untuk mengkontrol objek yang akan dianimasikan.
• Toolbox, berisi tool-tool yang berfungsi untuk membuat, menggambar, memilih dan memanipulasi
objek atau isi yang terdapat di layar (stage) dan timeline.
Toolbox dibagi menjadi empat bagian, yaitu Tools, View, Colors dan Options.
Beberapa tool mempunyai option-option. Misalnya, klik Arrow tool, akan muncul pada bagian
27
Gambar 5. Area Kerja Flash MX
Kuliah Umum IlmuKomputer.Com
Copyright © 2004 IlmuKomputer.Com
Options: Snap to Object, smooth dan straighten.
• Panels, berisi kontrol fungsi yang dipakai dalam Flash, yang berfungsi untuk mengganti dan
memodifikasi berbagai atribut dan objek atau animasi secara cepat dan mudah.
• Properties, fungsinya sama dengan Panels, hanya saja Properties merupakan penggabungan atau
penyederhanaan dari panel. Jadi, dapat lebih mempercepat dalam mengganti dan memodifikasi
berbagai atribut dan objek, animasi, frame dan komponen secara langsung.
4. Proses Pembuatan Animasi Kartun
a. Membuat Gambar Utama
Gambar Cun Lee yang sudah dibuat akan dimasukkan ke dalam Flash MX, kemudian dilakukan
pemisahan terhadap bagian-bagian tubuh yang akan melakukan pergerakan-pergerakan yaitu pada
bagian kepala, badan, tangan, kaki dan bagian lainnya. Untuk membuat pemisahan di atas, dilakukan
dengan memilih menu menu symbol.
1. Buat symbol di Flash MX, Insert >New Symbol
Gambar 6. Menu Insert Symbol
2. Copykan hasil scanner ke dalam scene, lalu lakukan Break Apart 2 kali (Modify > break a part).
Lakukan pemisahan bagian-bagian tubuh.
Gambar 7. Pemisahan gambar untuk animasi
28
Kepala
Paha kiri
Lutut kiri
Tangan
Badan
Paha
kanan
Lutut
kanan
Penutup kain
Kuliah Umum IlmuKomputer.Com
Copyright © 2004 IlmuKomputer.Com
Kemudian dilakukan juga pemisahan kepala, untuk membuat efek berbicara dipisahkan juga bibir atas
dan bibir bawah dari gambar wajah Cun Lee.
Gambar 8. Pemisahan bagian kepala
Setelah selesai memisahkan bagian-bagian tubuh lakukan penyatuan kembali pada setiap layer dengan
memilih Modify > Group (Ctrl+G).
b. Membuat Animasi pada Key Frame
Untuk membuat animasi pada bagian-bagian tubuh yang sudah dipisahkan menggunakan perintah
“Create Motion Tween” pada keyframe 30.
- Key Frame 1 – 30
Semua bagian tubuh diatur sehingga menyerupai gambar di bawah ini:
Gambar 9. Animasi Cun Lee pada keyframe1 Gambar 10. Animasi pada keyframe 30
29
Bibir atas
Bibir bawah
Kuliah Umum IlmuKomputer.Com
Copyright © 2004 IlmuKomputer.Com
- Keyframe 60
Cun Lee bersiap melakukan tendangan dengan mengambil ancang-ancang dengan memiringkan badan
dan menaikkan kaki kirinya.
Gambar 11. Keyframe 60 Cun Lee bersiap melakukan tendangan
- Key Frame 61
Cun Lee mengeluarkan suara sambil melakukan tendangan.
- Key Frame 62-64
Lutut dan telapak kaki bergerak bersama melakukan tendangan. Pada keyframe 62 lutut naik keatas dan
keyframe 64 lutut kembali lagi kebawah. Dan dibarengi dengan suara (gerakan mulut).
- Key Frame 69 – 142
Mengerakkan mulut hingga kelihatan dia berbicara “ Halo nama saya Cun Lee Saya adalah pendekar
kebenaran dan keadilan senang berjumpa dengan kamu “.
- Key Frame 59-71
Pada key frame ini gerakan tangan maju.
- Key Frame 71-75
Gerakan tangan miring ke bawah.
- Key frame 75 –80
Gerakan tangan miring ke atas.
- Key frame 80-100
Gerakan tangan mundur.
- Key Frame 100-105
Gerakan tangan maju.
Menggerakan tangan seperti gambar dibawah ini:
30
Kuliah Umum IlmuKomputer.Com
Copyright © 2004 IlmuKomputer.Com
Gambar 12. Gerakan tangan
- Key frame 120
Pada key frame ini semua layer diberikan key.
- Keyframe 163
Semua bagian tubuh diatur membentuk animasi sehingga menyerupai gambar di bawah ini:
Gambar 13. Gerakan dari 120-163.
31
Kuliah Umum IlmuKomputer.Com
Copyright © 2004 IlmuKomputer.Com
- Key Frame 190
Pada key frame ini Cun Lee menurunkan kaki, seperti gambar dibawah ini.
Gambar 14. Key Frame 163 Gambar 15. Key Frame 190
- Key Frame 190 – 230
Pada key frame ini Cun Lee mengeluarkan suara dan seolah-olah berkata “ Hai kalian semua jangan
coba-coba mengganggu aku ya”
c. Efek Tendangan
Pada saat Cun Lee melakukan tendangan, ada efek tendangan berupa gambar pergerakan udara akibat
tenaga yang dikeluarkan oleh tendangan. Untuk membuat efek ini dibuat sebuah symbol baru yaitu
Movie klip berupa garis setengah lingkaran.
Gambar 16. Efek Tendangan
Pada symbol yang baru di frame 25 diberikan efek “Create Motion Tween” pada masing-masing key
frame klik key frame 25 perbesar gambar efek, kemudian warna efek tendangan diubah warnanya (menu
Properties menjadi Alpha 0 %).
Untuk membuat efek bekerja pada gambar utama, masuk ke simbol kartun dan membuat layer baru dan
meletakannya paling atas, dan beri nama “efek tendangan”, pada frame 61 dibuatkan keyframe. Buka
panel library kemudian seret simbol efek tendangan, letakan efek tendangan tersebut tepat pada ujung
telapak kaki.
32
Kuliah Umum IlmuKomputer.Com
Copyright © 2004 IlmuKomputer.Com
Gambar 17. Efek tendangan
e. Efek Ilmu
Efek ilmu akan ditampilkan ketika Cun Lee selesai melakukan tendangan, dan Cun Lee mengeluarkan
ilmunya. Caranya dengan membuat Simbol baru (New Simbol Movie klip ) dan gambar dari efek ilmu
seperti di bawah ini.
Gambar 18. Efek ilmu
Untuk membuat efek ilmu ini bekerja pada key frame pada frame 10 dan 20 buat “Create Motion
Tween”. Pada key frame 10 perbesar gambar efek ilmu untuk membuat kesan efek ilmu terus membesar.
Untuk memasukkan ke dalam gambar utama, dibuat sebuah layer baru di atas layer efek tendangan dan
memberi nama “efek ilmu”. Pada layer efek ilmu buat keyframe pada frame 80 dan seret simbol “efek
ilmu” melalui panel Library. Kemudian pada frame 80 buat “Create Motion Tween”, lalu dibuat
33
Kuliah Umum IlmuKomputer.Com
Copyright © 2004 IlmuKomputer.Com
keyframe pada frame 95, 105, dan 142. Pada frame 105 perbesaar “efek ilmu” Modify > Transform >
Scale and Rotate (Ctrl + Alt + S) ubah menjadi 200 %. Klik key frame 142 perbesar efek ilmu menjadi
400 %, dan seret hingga keluar dari Scene.
f. Memasukkan Suara
Dalam sebuah animasi kartun unsur penting lainnya adalah suara. Suara memberi pengaruh yang sangat
besar terhadap desain kartun yang dibuat, yang mewakili karakter dan suasana. Cara memperoleh suara
dapat dilakukan dengan cara merekam suara atau mencari suara-suara latar belakang.
Untuk menyimpan, mengedit suara diperlukan beberapa komponen hardware tambahan yakni:
1. Mikropon : untuk memasukkan suara.
2. Mic Pre-amplifier : Untuk memperhalus suara yang akan disimpan.
3. Speaker : untuk menghasilkan/mengeluarkan suara dari komputer.
4. Kartu Suara : untuk mengubah signal analog ke signal digital.
Gambar 19. Kebutuhan perangkat tambahan untuk merekam suara
Untuk animasi kartun Cun Lee, dalam symbol utama (kartun) dibuat sebuah layer baru di atas layer
“efek ilmu” dan diberi nama “suara”. Pada frame 60, 80 dibuat key frame, masuk ke menu Window >
Common Libraries > Sound dan dimasukkan suara yang cocok dengan efek tendangan dan masukkan
ke dalam stage. Pada key frame 80 lakukan impor suara dengan melakukan file > Import > dan dipilih
suara yang cocok dengan efek ilmu tersebut.
Gambar 4.17 Efek suara pada frame
34
Komputer
Kuliah Umum IlmuKomputer.Com
Copyright © 2004 IlmuKomputer.Com
5. Mempublish Animasi Kartun
Flash memiliki program publishing yang diberi nama “Flash Player” yang dapat langsung diaktifkan
dengan menekan “Ctrl+Enter”. File flash disimpan dalam bentuk file berekstensi FLA dan hasil dari
publishingnya file akan berekstensi SWF.
Proses publishing di dalam Flash akan menghasilkan berbagai bentuk file yang dapat dimainkan atau
dijalankan oleh beberapa program aplikasi. Beberapa jenis file yang dapat dihasilkan dengan publish
adalah:
1. Flash Movie.
2. Format image seperti GIF, JPG dan PNG.
3. Quick time.
4. HTML.
5. File EXE.
Untuk mempublishnya digunakan langkah sebagai berikut:
1. Mengatur setting publish dengan klik File > Publish Setting.
2. Setelah dilakukan pengaturan pilihan klik File > Publish.
35

11
Nov
09

Lirik Lagu

Jason Mraz
( I’m Yours )

Well you done done me and you bet I felt it
I tried to be chill but you’re so hot that I melted
I fell right through the cracks
Now I’m trying to get back
Before the cool done run out
I’ll be giving it my bestest
And nothing’s gonna to stop me but divine intervention
I reckon it’s again my turn to win some or learn some

But I won’t hesitate no more, no more
It cannot wait, I’m yours

Well open up your mind and see like me
Open up your plans and damn you’re free
Look into your heart and you’ll find love love love love
Listen to the music of the moment, maybe sing with me
All – ah peaceful melody
And it’s our God-forsaken right to be loved love loved love loved

So I won’t hesitate no more, no more
It cannot wait I’m sure
There’s no need to complicate
Our time is short
This is our fate, I’m yours

Scooch on closer dear

And I will nibble your ear

I’ve been spending way too long checking my tongue in the mirror
And bending over backwards just to try to see it clearer
But my breath fogged up the glass
And so I drew a new face and laughed
I guess what I’m be saying is there ain’t no better reason
To rid yourself of vanity and just go with the seasons
It’s what we aim to do
Our name is our virtue

I won’t hesitate no more, no more
It cannot wait I’m sure
There’s no need to complicate
Our time is short
This is our fate, I’m yours

Well no no, well open up your mind and see like me
Open up your plans and damn you’re free
Look into your heart and you’ll find that the sky is yours
Please don’t, please don’t, please don’t
There’s no need to complicate
Cause our time is short
This is out fate, I’m yours


Wake Me Up When September Ends – Green day

Summer has come and passed
The innocent can never last
Wake me up when September ends

Like my fathers come to pass
Seven years has gone so fast
Wake me up when September ends

Here comes the rain again
Falling from the stars
Drenched in my pain again
Becoming who we are

As my memory rests
But never forgets what I lost
Wake me up when September ends

Summer has come and passed
The innocent can never last
Wake me up when September ends

Ring out the bells again
Like we did when spring began
Wake me up when September ends

Here comes the rain again
Falling from the stars
Drenched in my pain again
Becoming who we are

As my memory rests
But never forgets what I lost
Wake me up when September ends

Summer has come and passed
The innocent can never last
Wake me up when September ends

Like my father’s come to pass
Twenty years has gone so fast
Wake me up when September ends
Wake me up when September ends
Wake me up when September ends


What I’ve Done – Linkin Park

In this farewell
There’s no blood
There’s no alibi
Cause I’ve drawn regret
From the truth
Of a thousand lies

So let mercy come
And wash away

What I’ve done
I’ll face myself
To cross out what I’ve become
Erase myself
And let go of what I’ve done

Put to rest
What you thought of me
While I clean this slate
With the hands
Of uncertainty

So let mercy come
And wash away

What I’ve done
I’ll face myself
To cross out what I’ve become
Erase myself
And let go of what I’ve done

For what I’ve done
I start again
And whatever pain may come
Today this ends
I’m forgiving what I’ve done

I’ll face myself
To cross out what I’ve become
Erase myself
And let go of what I’ve done

What I’ve done
Forgiving what I’ve done

10
Nov
09

Sumpah Pemuda

Salah satu peristiwa paling bersejarah di indonesia adalah sumpah pemuda (28 Oktober 1928). Rumusan / teks sumpah pemuda ditulis oleh Moehammad Yamin. tentang Sumpah ini awalnya dicabakan oleh Soegondo walau akhirnya dijelaskan secara rinci oleh Yamin.

Tentang isi teks dari Sumpah pemuda adalah sebagai berikut :

  • PERTAMA. Kami Poetera dan Poeteri Indonesia, Mengakoe Bertoempah Darah Jang Satoe, Tanah Indonesia.
  • KEDOEA. Kami Poetera dan Poeteri Indonesia, Mengakoe Berbangsa Jang Satoe, Bangsa Indonesia.
  • KETIGA. Kami Poetera dan Poeteri Indonesia, Mendjoendjoeng Bahasa Persatoean, Bahasa Indonesia.

Gagasan tentang penyelenggaraan Kongres Pemuda II (momen pembacaan teks sumpah pemuda)adalah dari Perhimpunan Pelajar Pelajar Indonesia (PPPI). Saat kongres ini ditudup diperdengarkan lagu Indonesia raya karya Wage Rudolf Supratman. Yang akhirnya juga ditutup dengan mengumumkan rumusan hasil kongres. Oleh para pemuda saat itu, rumusan itu diucapkan sebagai Sumpah Setia.

Para peserta dari kongres sumpah pemuda ini adalah dari berbagai organisasi pemuda seperti Jong Java, Jong Ambon, Jong Celebes, Jong Batak, Jong Sumatranen Bond, Jong Islamieten Bond, PPPI, Pemuda Kaum Betawi bahkan ada juga keturunan Tionghoa yang bertindak sebagai pengamat.

Dari teks tentang artikel sejarah yang bintang dapat, gedung tempat pemakaian dari acara ini adalah Bangunan di Jalan Kramat Raya 106,. Sebuah bangunan tempat pemondokan bagi pelajar maupun mahasiswa. Sekarang gedung ini dikenal dengan Gedung Sumpah Pemuda

 

10
Nov
09

Hari Pahlawan

bendraHari ini adalah tanggal 10 November yang selalu kita peringati sebagai hari pahlawan. Ini karena pada tanggal 10 November 1945 terjadi pertempuran yang sangat hebat di kota Surabaya, yang sekarang terkenal dengan kota Pahlawan karena peristiwa ini. Pertempuran tersebut berlangsung sangat sengit dan sangat hebat dahsyat antara pasukan agresor Belanda yang bersenjata canggih pada masa itu melawan arek-arek Suroboyo yang hanya bersenjatakan bambu runcing dan senjata-senjata tradisional lainnya. Surabaya dibombardir dari segala sisi, udara, laut, dan darat. Surabaya hancur berantakan sehingga menewaskan lebih dari 20000 penduduk Surabaya. Kerusakan terjadi dimana-mana. Mayat-mayat bersimbah darah bergeletakan saling bertindih di jalan, di kolong-kolong jembatan.

Meskipun demikian, para pejuang mampu dan berhasil memukul mundur pasukan Belanda bahkan salah satu pemimpin mereka yang bernama Mallaby tewas dalam pertempuran ini. Sungguh sebuah mukjizat yang turun dari langit. Belanda yang turun dengan pasukan bersenjatakan senjata modern kalah melawan pejuang-pejuang kita yang turun dengan peralatan perang sederhana. Ini sepatutnya mampu menjadikan gambaran bahwa dengan semangat yang tinggi, apapun bisa kita capai seberapapun beratnya halangan dan rintangan yang menghadang.

Masihkah kita meneladani apa arti perjuangan itu sendiri sekarang ini. Pastinya kita terlena dengan kenikmatan yang kita rasakan setelah berpuluh-puluh tahun merdeka tanpa pernah sadar bahwa kemerdekaan ini diraih dengan keringat, darah dan bahkan nyawa dari para pahlawan. Seandainya para pahlawan-pahlawan tersebut hidup lagi saat sekarang ini, mungkin mereka akan menangis melihat bumi dan tanah air yang dulu mereka pertahankan dan hingga merdeka kini telah mengalami kerusakan di berbagai bidang, baik fisik maupun nonfisik. Korupsi Kolusi dan Nepotisme menjamur di segala pelosok negeri, bak cendawan di musim hujan. Pembunuhan, perampokan, kejahatan hampir setiap saat terjadi dimana-mana. Konflik antar etnis, konflik bernuansa SARA acap kali mewarnai derap langkah pembangunan bangsa ini. Dimana semangat yang dulu pernah membara saat Sumpah Pemuda dideklarasikan.

Surabaya sekarang ini sudah bukan lagi cocok dengan sebutan kota Pahlawan karena hanya ttinggal sedikit peninggalan masa lampau. Dan dari yang sedikit itu pula hampir jarang dirawat keberadaannya. Malah pusat-pusat perbelanjaan modern yang bermunculan, yang dibangun. Perumahan elit bergaya dan berarsitektur Eropa dan apa saja yang mengandung unsur Barat berkembang pesat.

10
Nov
09

Perjuangan Bikin Blog

Saya ingat betul saat pertamakali bikin blog adalah pada akhir bulan oktober 2009, ketika itu komputer saya sedang rusak dan belum sempat di perbaiiki dan belum langganan internet. Bikinnya di warnet, saat ada tugas dari dosen. Lama kelamaan saya jadi lebih familiar dengan dunia per’blog’an. Saya jadi lebih lancar dalam mendandani blog meski tetap saja masih terlihat awut-awutan. Setidaknya dibanding pertamakali bikin blog, saya kira perkembangan desain dan konten nya lumayan menggembirakan. Tapi saya masih malu untuk berpromosi atau mensosialisasikan blog ini. Kalo harus ber’promosi’ saya kira hanya untuk tujuan minta kritik dan saran.




Tanggalan Hijriah

Tanggalan

April 2014
M T W T F S S
« Nov    
 123456
78910111213
14151617181920
21222324252627
282930  

Kategory

Beranda Top

Yahoo Mesangger

Jail

kimyong seo

123


Follow

Get every new post delivered to your Inbox.