Communications Ministry Concept

The Great Commission instructs the disciples of Jesus to spread His teachings to all the nations of the world (Matthew 28:18–20). Therefore, at its core, the Church is missionary and its primary mission is to communicate the Gospel. Moreover, how we communicate the Gospel is a fundamental part in the overall strategy of the Church and should be integrated into its culture.

Just as Jesus came to serve others (Mark 10:45), a communications ministry should be a service ministry to all other ministries of the Church.  It should help other ministries put their faith in action more effectively. This is done not just by utilizing communication instruments, but also by embracing and integrating the current culture of communication in the surrounding environment. As a result, this will lead to Church leaders becoming communication experts thereby helping to solidify Church ministries and ensuring all are sharing the Gospel properly.

Expert communicators can help make communications adaptable to a diverse audience. For example, during Israel’s exodus from Egypt, God communicated with Israel directly (Psalm 78). However, Jesus, the Perfect Communicator, used parables when delivering the truth (Matthew 13).  This strategy shows the need for us to embrace the fact that everyone does not see and hear the same, thus, there exists opportunities for the Church to generate new forms of self-expression. Nevertheless, presenting the Word of God should be  a natural, sensitive, sharable experience, guided by the Holy Spirit.

How to make Timely’s All-in-One Event Calendar navigation load a new page

A particular web host running IIS 6 did not support the MIME type application/json.  This support was needed because Timely’s All-in-One Event Calendar plugin uses AJAX to perform server requests and returns data in the JSON format.  After frustratingly working with the web host to unsuccessfully apply the MIME type to their server, I decided to change the calendar code to perform a page load rather than use AJAX to load the data.  Here is what I did (This assumes you already have the Standard Calendar version 1.10.9 plugin installed in WordPress version 3.7.1.  I have not tried this with other versions.):

  1. Deactivate the plugin.
  2. Navigate to [Wordpress directory]/wp-content/plugins/all-in-one-event-calendar/app/view/admin/js/scripts.
  3. Rename calendar.js to calendar_ORIGINAL.js.  Just in case you have to revert back.
  4. Open the calendar.js file in your favorite editor.
  5. Copy the obfuscated code, not the comments.
  6. Open a web browser and go to jsbeautifier.org.
  7. Paste the code in the window clearing any existing code first.
  8. Press ctrl-enter to deobfuscate the code.
  9. Copy the code.
  10. Create a new calendar.js file in the [Wordpress directory]/wp-content/plugins/all-in-one-event-calendar/app/view/admin/js/scripts directory.
  11. Paste the code in the new calendar.js file.
  12. Comment out lines 2270 – 2288.  This is where the ajax is called to get the new data.
  13. Add the following code after the commented area: window.location.reload();
  14. Comment out line 2303.  This will allow the default action of the anchors in the calendar to be triggered (in this case navigate to a new page).
  15. Save the file.
  16. Activate the plugin and test the calendar.  When you click a control in the calendar the browser should perform a page load.

How to define variables in Apache configuration files on Mac OS X Mavericks (10.9)

In Apache HTTP Server 2.4 it is possible to define variables in the configuration.  This allows a clearer representation if the same value is used at many places in the configuration.  Unfortunately, my Mac OS X Mavericks (10.9) Apache HTTP Server version is 2.2.24 where this functionality is not available.  After some searching I found an Apache2 module named mod-define that would give me this capability.  Here is the process I went through to install this module.

1.  Stop the Apache server.  (You will need to be an admin user when using sudo)

 sudo apachectl -k graceful-stop

2.  Download mod_define.c module from http://code.google.com/p/mod-define/.

3.  Compile the module.  (You will need to be an admin user to install Apache modules)

sudo apxs -c -i -a mod_define.c

Apxs compiles and installs Apache modules. The -c tells apxs to compile the module; the -i tells apxs to install the module; and the -a tells apxs to put a line for the module into Apache’s configuration file.

– I got this error:


env: /Applications/Xcode.app/Contents/Developer/Toolchains/OSX10.9.xctoolchain/usr/bin/cc: No such file or directory

– So I created a symlink to the Xcode toolchain:

cd /Applications/Xcode.app/Contents/Developer/Toolchains/
sudo ln -s XcodeDefault.xctoolchain OSX10.9.xctoolchain

This problem is caused by an incorrect Apache build configuration that Apple has shipped. This issue has supposedly been reported to Apple, but they haven’t done anything about it.

– I tried to compile the module again and got this error:

mod_define.c:49:10: fatal error: 'httpd.h' file not found

– So I updated/installed xcode command line tools.

xcode-select --install

Run xcode-select –install from the command line to reinstall the command line tools.  I already had Xcode installed but not the command line tools.

– I tried to compile the module again and it finally installed successfully!

4.  Test the new module.

sudo apachectl configtest

– It responded:

Syntax OK

5.  Restart the web server.

sudo apachectl -k graceful

– Sample Code:

# global defines - define only once!
Define global::root /srv/www

# local defines - define per vhost file
Define host test
Define domain example.com
Define root ${global::root}/$host
Define docroot $root/html

# http vhost
<VirtualHost *:80>
ServerAdmin     admin@$domain
ServerName      $host.$domain

DocumentRoot    $docroot
LogLevel        warn
ErrorLog        $root/log/error.log
TransferLog     $root/log/access.log
Redirect 301 / https://$host.$domain/
</VirtualHost>

# https vhost
<IfModule mod_ssl.c>
<VirtualHost *:443>
ServerAdmin admin@$domain
ServerName $host.$domain

DocumentRoot $docroot
LogLevel        warn
ErrorLog        $root/log/error.log
TransferLog     $root/log/access.log

SSLEngine               on
SSLCertificateFile      $root/keys/www.https.pem
SSLCertificateKeyFile   $root/keys/www.https.key
BrowserMatch "MSIE [2-6]" nokeepalive ssl-unclean-shutdown downgrade-1.0 force-response-1.0
BrowserMatch "MSIE [17-9]" ssl-unclean-shutdown

<Directory />
Options None
AllowOverride None
order allow,deny
deny from all
</Directory>

<Directory $docroot>
Options Indexes MultiViews
Order allow,deny
allow from all
</Directory>
</VirtualHost>
</IfModule>

JavaScript Array Map and Reduce Methods

The map() method creates a new array with the results of calling a provided function on every element in this array.

Array.prototype.map = function (fn) {
  var l = this.length;
  var a = [];
  for (var i = 0; i < l; i++) {
    a.push(fn(this[i]));  
  }
  return a;
};

Download this code snippet at GitHubGist JavaScriptArray#map. More info at  MDN Array#map.


The reduce() method applies a function against an accumulator and each value of the array has to reduce it to a single value.

Array.prototype.reduce = function (fn, init) {  
  var s = init;
  var l = this.length;
  for (var i = 0; i < l; i++) {		
    s = fn(s, this[i]);
  }
  return s;
};

Download this code snippet at GitHubGist JavaScriptArray#reduce.  More info at  MDN Array#reduce.

Journey to Better Coding

Writing better code whether as a team or individually involves three concepts:  Harnessing Paradigms, Incorporating Communication and Thorough Testing.

Harnessing Paradigms

I have heard of people say they work with companies that are exclusively a Java shop or .NET shop, preferring only to use certain languages and adhering to certain paradigms. Strictly using one language or paradigm over another because of tradition does not bode well for better coding. We should let the problem we are trying to solve dictate the tool we use. A carpenter that only uses a hammer will not be effective on jobs that require a screw driver.  As a result, their capacity to expand is severely limited.

Incorporating Communication

Communication between all stake holders is key, including conversations with yourself.  We should keep these communication channels open to ensure expectations are being managed properly.  Over-promising and under-delivering is not good. The same is true of the opposite.  It is a waste of valuable resources, namely time and money.

Thorough Testing

Yes we should test the functionality of the application and unit test the code wherever possible.  In addition, we should test the user experience from the intended audience’s perspective. All of these are absolutely valid, however, I propose we also test our level of satisfaction after completing each task. We should ask questions that can gage if we are still satisfied doing this type of work. This will help make our journey a little easier and ensure our future coding is indeed better.

Issues with Database-Backed Web Applications

The Internet has changed and shifted the dynamics of the way people communicate. It is the most used network in the world and has allowed people to exchange ideas and information more than ever before, from anywhere around the world. From 2000 to 2007, Internet use grew 244.7 percent (Internet World Stats, 2007). The United States alone accounts for 19 percent of the world’s Internet users. The Internet has also caught the attention of the business world. Companies of every size are using the Internet to speed up business processes. Modern organizations are using the World Wide Web (often abbreviated “WWW” or called “the Web”) to communicate with their partners and customers, to connect with their back-end databases, and to conduct transactions. The integration of traditional information technology with the Internet creates a more nimble business, prepared for the trials and tribulations of conducting business in the 21st century (Mullins, 2002).

Businesses that are online never close. People expect the Web site to be fully functional regardless of the time they log on. And since the Web is worldwide, what is considered off-peak hours for one country can be prime time somewhere else. An online business must be available 24 hours a day, seven days a week, and 365 days a year. Failure to do so could result in lost business. With the competition only being a mouse click away, managing an online business calls for extra adeptness, more proaction, and plenty of vigilance.

When the Web is coupled with traditional applications and databases, a complex infrastructure is the result.When navigating this complex, heterogeneous infrastructure, several issues that can impact Web application development must be addressed. These issues include (Mullins, 2002):

  •  24/7 data availability
  •  New technologies such as Java and XML
  •  Web connectivity
  •  Integration of legacy data with Web-based applications
  •  Database and application architecture
  •  Web-based administration
  • Performance engineering for the Internet
  •  Unpredictable workload

As a Web developer, it is important to be aware of these issues as well as how to handle them.

If you know of more issues with database-backed web applications, please share.


References:

Internet World Stats (2007). Internet usage statistics. Retrieved December 14, 2007, from
http://www.internetworldstats.com/stats.htm

Mullins, C. S., (2002). Database administration: The complete guide to practices and procedures. Boston: Addison-Wesley.

You are still using IE6?

I recently ran into the issue of having to find a machine that was still using Internet Explorer (IE) 6. Keep in mind that IE 8 is currently in beta. This problem arose after going through a remote troubleshooting session with a client for which I designed a Website. They were seeing errors in the site’s layout that I did not see. While I diligently tested the site in most of the major browsers (IE 7, Chrome, Firefox, Safari), I neglected to test it in IE 6 because I did not have it anywhere around. Plus it is old and I did not think it was still used. But much to my chagrin, there are some companies still using it.

The problem I had with IE 6 is that it does not render padding and margins very well.

So I had two choices; either tell the client to upgrade their browser to IE 7 or find a machine with IE 6. In this case telling the client to upgrade was inappropriate. Therefore, I had to find a way to install IE 6 on a PC that already had IE 7 installed. So I browsed the Web looking for some help when I came upon a rather datedMSDN blog that discussed my dilemma. It stated that virtualization via Microsoft’s Virtual PC 2004 was the best way to go.  Virtual PC lets you create separate virtual machines on your Windows desktop, each of which virtualizes the hardware of a complete physical computer. This would allow me to install Windows XP with IE 6 on an XP machine without having to uninstall IE 7.

So I installed Virtual PC 2004 with IE 6 and was finally able to see what the customer was seeing.  Next I had to fix the layout issues. I needed to create two different styles (one for IE 6 and one for all other browsers) for the same element. To accomplish this I had to hack the CSS. I created one set of styles using an underscore to start the padding and margin style names. These coexisted with the standard styles because while IE 6 does not ignore the underscore, all other standard compliant browser do. This worked and now the layout is cross browser consistent, but hopefully the customer will upgrade soon.

Before:


 .test {
 padding: 60px 0px;
 margin: 20px 0px;
 }

After:


.test {
padding:60px 0px;
_padding:40px 0px; /*IE 6 hack */
margin:20px 0px;
_margin:10px 0px; /*IE 6 hack */
}

Documenting Your Code Base

Plain and simple, good documentation costs money. Either you have to find someone to write documentation full-time or have your developers spend their time (and your money) writing it.  I have never been a part of a situation where writing a tome that exists outside of the code base works. Most developers would not have the time or patience to read it let alone write it. But in a situation where the proper programming language along with its best practices are used, the code’s methods should be self-explanatory.  Then code documentation would only have to be done to explain special cases or addenda.

If your project is especially complex, comprehensive test suites can be used to explain its behaviors and outline its goals. These suites can be executed by a dedicated software tester or by the developer. One way to prevent bad code from clogging the development cycle is to have the developer run a specific set of tests that finds bugs in the code and also performs a functionality smoke test. Then have a dedicated tester run specific tests that ensure the code does what it is intended to do.

The bottom line is you want your people doing what they do best. Developers write code, not documentation. So if your find yourself spending extensive time training new developers on the intricacies of your code, make sure your are following the best practices of the programming language being used, document special cases or addenda, and use comprehensive test suites to cover the rest.

Rating the 2008 Presidential Candidates’ Websites

Co-author: Kevin Armstrong

We the people of the United States are faced with economic hardships, a climate crisis, catastrophic natural disasters, wars, rumors of wars, a failing education system, plus many more public and private issues. At this point in our nation’s history, the 44th President has the enormous task of redirecting the people in a more positive direction. At the forefront of any change initiative is communication. The President must be able to clearly relay his or her vision in order to bring the people around a shared sense of purpose.

With the Internet being a major component of communication, we took the liberty of rating each candidate’s website.

The criteria used for the rankings represent areas from both the Web developer/designer and user point of view:

  • Scope – We chose to narrow the scope to the homepage since it is the launching point for the entire site.
  • JavaScript and CSS – We looked behind the scenes (with the help of Firebug for FireFox) at how effectively JavaScript and CSS are being used: are they used unobtrusively; are JavaScript libraries used.
  • Usability – We looked at the overall usability of the homepage: is the navigation obvious; is the page too noisy; are errors handled gracefully.

Each area was rated on a scale from 1 to 5 with 1 being terribly awful, 5 being extremely outstanding, and 2.5 being good.

So without further ado, here are the results:

JavaScript

johnmccain.com barackobama.com
Use of libraries From what we can tell, there are no known libraries being used.     This is not necessarily a bad thing unless you are reinventing the wheel. The jquery JavaScript is used. This increases cross browser functionality.
Unobtrusive JavaScript We did discover some instances of inline JavaScript being used (body onload).     For cleaner code and easier maintenance, HTML events should be handled in a separate JavaScript file. There is no obvious obtrusive use of JavaScript
Score 2 5

 

CSS

johnmccain.com barackobama.com
HTML Layout The use of tables for page layout is in use.  Unless you are rendering data, tables should not be used for layout purposes. There is great use of CSS in the layout of this homepage.
Unobtrusive CSS Inline styles are used. This decreases code readability and maintenance. Inline styles are used. This decreases code readability and maintenance.
Score 2 3.5

 

Usability

johnmccain.com barackobama.com
Obvious Navigation Some navigational aspects are not self-evident. Trying to figure which image or text is actually a button requires too much thought. All buttons are shaped the same and have a clear action label. All text links change colors making them easier to identify.
Page noise The randomness of the sub-sections creates confusion thereby making it harder to focus on a particular area. The location of the title, content, and button for each sub-section are similar thereby making them easily identifiable.
Graceful Degradation There is a section on the homepage that does not display anything. This can happen for a number of reasons, but subjecting the user to visual errors should not happen. Graceful degradation seems to be done effectively.
Score 1 5

 

So with a score of 13.5 to 5 barackobama.com‘s homepage crushes johnmccain.com‘s homepage.  This is by no means the end all to be all with regards to who’s the better communicator, but it is a strong indicator.

This rating is not fully comprehensive so feel free to add more areas that we may have missed.  And as with most discussions, this rating is up for debate.