This is a very easy way to force all messages to be rendered with the same font family and size in Gmail without having to install a browser extension. Perhaps you are like me and are now sick of receiving emails with text so massive you cannot read them; this should help you out.
In Google Chrome (and almost every other browser) you have the ability to define a user stylesheet that will be applied to every page by default. By adding a style that forces every element in the email to conform to the same font family and size, you will consistent looking emails in your browser without a massive overhead.
~/Library/Application Support/Google/Chrome/Default/User StyleSheets/Custom.css.C:\Users\Username\AppData\Local\Google\Chrome\User Data\Default\User StyleSheets\Custom.css..aao .nH .ii, .aao .nH .ii * {
font-size: 12px ! important;
font-family: monospace ! important;
}
Of course, the font family and size can be replaced with whatever values you prefer. I hope this helps save you some time and frustration!

UPDATE: A small snapshot of the leaked data has been attached. There has been no action from the government or the media. I hope this article can build awareness that results in better protection of citizens data.
A couple of months ago I discovered an issue on a website operated by the government of Saint Lucia. I have contact the authorities, but to date, there has been no response. For the security of the current and former residents of Saint Lucia, I think that it is necessary to draw some attention to this issue, without revealing the actual leak and exploits.
The issue exposes personally identifiable information, such as the individual’s full name, where they live, their occupation and their registration number. What is the most alarming is that registration number is also a portion of their national id card number.
Please see below for a sampling of one of the emails directed to the Saint Lucian government:
It appears that extremely minimal security exists on the electoral.gov.lc domain …By far the most obvious and gaping security hole is the exposure of what should be sensitive PDF files containing personally identifiable information. This is in violation of your own privacy policy (www.electoral.gov.lc/privacy.htm), and for commonwealth citizens living in your country, most likely CariCom and Commonwealth information security policies. While this information is posted for a time publicly around the island (which in itself is questionable), having it freely available to world at large on the internet presents a whole new series of dangers. A small sample of these PDF files are listed below:
- http://www.electoral.gov.lc/voterslists%5C2009_supp%5CSecondHalf%5CA1-Voters%20List.pdf
- http://www.electoral.gov.lc/voterslists%5Crevised_2010%5CA1_Voters%20List.pdf
- http://www.electoral.gov.lc/voterslists%5C2009_supp%5CSecondHalf%5CA2-Voters%20List.pdf
- http://www.electoral.gov.lc/voterslists%5Crevised_2010%5CA2_Voters%20List.pdf
- http://www.electoral.gov.lc/voterslists%5C2009_supp%5CSecondHalf%5CA3-Voters%20List.pdf
- http://www.electoral.gov.lc/voterslists%5Crevised_2010%5CA3_Voters%20List.pdf
- http://www.electoral.gov.lc/voterslists%5C2009_supp%5CSecondHalf%5CB1-Voters%20List.pdf
- http://www.electoral.gov.lc/voterslists%5Crevised_2010%5CB1_Voters%20List.pdf
- http://www.electoral.gov.lc/voterslists%5C2009_supp%5CSecondHalf%5CB2-Voters%20List.pdf
- http://www.electoral.gov.lc/voterslists%5Crevised_2010%5CB2_Voters%20List.pdf
- http://www.electoral.gov.lc/voterslists%5C2009_supp%5CSecondHalf%5CB3-Voters%20List.pdf
- http://www.electoral.gov.lc/voterslists%5Crevised_2010%5CAB3_Voters%20List.pdf
…Additionally, I have used publicly exposed information to perform a basic security audit of the electoral.gov.lc domain. It appears that you are running a Windows 2000 server with IIS 5.0 web server. It has Frontpage Extensions are turned on and in use. Also, it appears that MySQL is being used as database software on this server as well, and default ports are open. I have not attempted any connections beyond using default username and password combinations, which at the very least seem to have been changed, but this configuration alone is extremely vulnerable to attack using widely publicized exploits, simply because it is out of date (IIS 5.0), using an unsupported database in Microsoft’s eyes (MySQL; they do not release patches for this configuration), and is an insecure (Frontpage Extensions) configuration. Generally this would be an issue in itself, but there does not appear to be an adequate firewall protecting sensitive ports.
Finding this information is surprisingly easy: Simply conduct this Google search.
Why would this be an issue? Well, suppose a thief wanted to steal a large sum of money. A list with every single resident of the country and their occupation would certainly help narrow down wealthy potential targets. Through the use of public phonebooks and social networks much more information could be gathered, because the individuals location and full name make them personally identifiable. Additionally, calling a bank and asking for a money transfer will generally result in security confirmation questions being asked. Many times, what do these involve? Relatives (available on the list), location (made possible by the list and the public phonebook), telephone number (made possible by the list and the public phonebook), and identification numbers (available on the list).
The servers hosting this information are also running severely outdated software. Using publicly available exploits to gain access to the server would allow free access these databases. This also presents a national security risk.
This is clearly an issue for individual Saint Lucians and the Saint Lucian government. Regarding foreign nationals who at one time lived in Saint Lucia, the Saint Lucian government could also be liable, and could possibly risk it’s compliance with CARICOM and Commonwealth information security policies.

I have noticed that more than 20% of visitors to this site do not have browser language set to English. Many of you manually cut and paste the page you are looking for into Google Translate. In order to make translation easier, I have added the Google Translator tool to the top-right of every page in this site :) I would love to know if this has been of benefit to you!
Ich habe bemerkt, dass mehr als 20% der Besucher dieser Website nicht über Browser-Sprache auf Englisch eingestellt. Viele von Ihnen manuell Ausschneiden und Einfügen der Seite Sie suchen in Google Translate. Um Übersetzung einfacher, ich habe die Google Translator Tool, um die rechts oben auf jeder Seite hat in dieser Site :) Ich würde gerne wissen, ob dies von Vorteil für Sie wurde!
J’ai remarqué que plus de 20% des visiteurs de ce site n’ont pas la langue du navigateur mis à l’anglais. Beaucoup d’entre vous manuellement copier et coller la page que vous recherchez dans Google Translate. Afin de faciliter la traduction, j’ai ajouté l’outil Google Translator à la partie supérieure droite de chaque page de ce site :) J’aimerais savoir si cela a été bénéfique pour vous!
我注意到,20%以上的遊客到這個網站沒有瀏覽器的語言設置為英語。許多您手動剪切和粘貼網頁您正在尋找到谷歌翻譯。為了使譯文更容易,我已經加入了谷歌翻譯工具右上角的每一頁在這個網站:)我很想知道這一直是你的好處!
Ho notato che oltre il 20% dei visitatori di questo sito non hanno la lingua del browser impostata su inglese. Molti di voi manualmente tagliare e incollare la pagina che stai cercando in Google Translate. Al fine di rendere la traduzione più semplice, ho aggiunto lo strumento di Google Translator in alto a destra di ogni pagina di questo sito :) Mi piacerebbe sapere se questo è stato di beneficio per voi!
One the most requested features in Google Apps for companies switching from Microsoft Exchange is the ability to provide access to public folders in Outlook. Fortunately, just about all of the features available in public folders can be made available online and in Outlook with a bit of ingenuity.
If you truly need public folders exactly the same as Microsoft Exchange, an excellent solution has been provided by CodeTwo, with their Public Folders product. Rather than requiring the purchase, configuration, and maintenance of a Microsoft Exchange server, all you need is an instance of Outlook with the CodeTwo Public Folders server installed on the local network. Everything else you need is provided by Google Apps. There are two main drawbacks to this approach: public folders are not available on the Google web interface, and CodeTwo Public Folders costs $160, plus ~$40 per user.
However, it is possible to replicate almost all of public folder’s features quiet nicely with Google Apps and a few productivity tools. Lets start by examining each feature of public folders according to Microsoft, and how it can be provided in Google Apps.
You may be aware that you can upload any type of file to Google Docs, not just documents. However, the problem with Google Docs is the rather irritating process of uploading and sharing files, especially if your clients are used to accessing these files in public folders.
There are 2 tools that make this process far easier: InSync for OS integration, and Harmon.ie for Outlook integration. If you have ever used Dropbox, InSync will be extremely familiar. It sets up a folder/drive (depending on your operating system) which give you direct access to all the files stored in Google Docs. It allows you to drag and drop files in and out of you Google Docs, and access these files in all your native applications. Harmon.ie allows a user to access all of their Google Docs from within Outlook itself and has a ton of great features that, in my opinion, add a lot more functionality that native public folders anway.
This process is extremely easy, as Google has provided the Google Apps Sync for Microsoft Outlook plug-in, which configures calendar, contact, and task sharing automatically. However, there is one minor caveat when it comes to syncing notes, tasks, and journals: the data will be stored on Google’s servers, but will not appear on the web interface. Please read the Google Apps Sync for Microsoft Outlook support page for more information.
The methods we have discussed describe how to access the information, but it doesn’t tell us how to sharestore it. There is one easy way to centralize all the information that you want to share: add a new user called public. When you configure Outlook for the first time, use Google Apps Sync to configure the user’s account first, and then configure the public account second. When configuring InSync/Harmon.ie for file sharing and access within Outlook, simply configure public account here as well. If there is an email that a user feels should be shared with the organization, they can drag a copy of it from their own mailbox into the public folder, and everyone will have access to it.
The Outlook public folders page describes this functionality:
Using the By Conversation Topic view of public folders, you can track responses to posts and the frequency of those responses. When a post becomes dated, you can archive the information using the AutoArchive feature in Microsoft Outlook.
The exact same functionality will be available both within Outlook and the Google Apps web interface. In my opinion, the Google Apps web interface is actually superior when it comes to grouping conversations. Of course, the archive feature in Google Apps web interface is also just as slick.
This approach lacks any real support for access right and permissions within the organization. If you need internal access control, one possible approach you could take is creating separate folders for each group of users: for example, you might add a user called managers, another called accounts, and another called staff, and only configure these for the relevant Outlook users.
This is another area this approach lacks any real support. That said, online discussions are poorly implemented Microsoft Exchange as well. For real online discussions, perhaps consider Google Groups, and some of Google Apps other messaging applications. Google Wave was an excellent collaboration tool, but unfortunately it is no longer available in Google apps.
For small to medium sized organizations, Google apps has the potential to save a lot of money, and removes all the headaches involved with maintaining an email server like Microsoft Exchange. In the case of this second approach, tools like Harmony can actually improve the way users work. If you need public folders, and you want to save money, then this is an excellent approach. If you have been through this process before and found your own solutions, then please let everyone know in the comments
After recently configuring a Mac OS X Server to provide VPN access, I was also asked to create an all inclusive script which would automatically configure the connection. If you have been trying to do the same, I have included some pitfalls I came across, and the complete code for a script that can do the job.
The first script I stumbled across on Google seemed like it would do the trick. The poster had attempted to configure the VPN using UI automation, which didn’t seem to be working. The proposed solution used the command line networksetup tool instead, which seems like a far more elegant solution. It stated that by calling “networksetup -createnetworkservice networkservicename hardwareport” along with a few other related commands, the VPN could easily be configured. However, in practice this just creates a standard network service which had to be bound to a physical interface, rather than a VPN service. After much research, it became clear that there was no available hardware port that would magically configure a VPN, and even if there was, there seems to be no way to access VPN specific settings.
From what I can gather, the UI automation route seems to be the easiest way to go. I couldn’t find any existing solutions using UI automation that would be acceptable to send to clients. So, below are instructions for creating, customizing, and compiling a script to take care of this. It references UI elements by id and number, and uses names as little as possible. This should make it easy to internationalize if the need arises. I hope this helps someone else out there!
The script will now execute, and prompt you for your VPN username and password. If you want to create a completely automated script, you can easily add two more variables at the beginning of the script and make the appropriate changes throughout.
To compile the script for deployment, simply go to the File menu, select the Save As… menu item, and you should now have a script that is ready to send to your users
set vpnname to "Server Name"
set vpnserver to "127.0.0.1"
set vpnsecret to "s3cr3t"
tell application "System Events"
if not (UI elements enabled) then
tell application "System Preferences"
activate
set current pane to pane id "com.apple.preference.universalaccess"
display dialog "This script requires access for assistive devices be enabled." & return & return & "To continue, click the OK button and enter an administrative password in the security dialog." with icon note
end tell
set UI elements enabled to true
if UI elements enabled is false then return "User Cancelled"
delay 1
end if
tell application "System Preferences"
activate
set current pane to pane id "com.apple.preference.network"
display dialog "This script will now create the Stracor VPN connection." & return & return & "Please wait as the operation is in progress, and do not click anything. This should not take longer than 30 seconds. You will be notified when the process is complete." with icon caution
set vpnusername to display dialog "Please enter your username:" default answer "" with icon note
set vpnpassword to display dialog "Please enter your password:" default answer "" with icon note with hidden answer
end tell
tell application "System Events"
tell process "System Preferences"
tell window 1
click button 5
delay 1
end tell
tell sheet 1 of window 1
click pop up button 1
click menu item "VPN" of menu 1 of pop up button 1
--click pop up button 2
--click menu item "L2TP over IPSEC" of menu 1 of pop up button 2
--click menu item "PPTP" of menu 1 of pop up button 2
--click menu item "Cisco IPSec" of menu 1 of pop up button 2
set focused of text field 1 to true
keystroke "a" using command down
keystroke vpnname
click button 1
delay 1
end tell
tell group 1 of window 1
click checkbox 1
set focused of text field 1 to true
keystroke vpnserver
keystroke tab
keystroke text returned of vpnusername
click button 2
delay 1
end tell
tell sheet 1 of window 1
set focused of text field 3 to true
keystroke text returned of vpnpassword
keystroke tab
keystroke vpnsecret
click button 2
delay 1
end tell
tell window 1
click button 1
delay 1
end tell
tell sheet 1 of window 1
click button 1
end tell
end tell
end tell
tell application "System Preferences"
quit saving yes
end tell
display alert "The VPN has been configured. Click on the \"Connect\" button to access the network." & return & return & "The connection status and various options are available through the menu bar at the top of the screen." as informational
end tell
Konductor made it into the InsideRIA Semi-Finals for Best RIA of the Year. If we come in the top 3, then we go to Adobe MAX 2009 for the final vote.
So make sure you vote for Konductor, it would mean a lot
After months of stagnation, I have a brief request to make: vote for Konductor!
After many battles with the quirks in the Dreamweaver API, code completion is now working quiet nicely. After trawling through the code hinting documentation, and getting some help from the Adobe team, it turns out that it’s actually not all that difficult to get working if you adhere closely to a prescribed structure.
One few thing to keep in mind: start off simple. Don’t add any language or file restrictions in until everything is proven to work. I learn best from examples, so here is an example that defines packages and classes, which use static properties and methods, as well as and instance properties and methods:
<codehints xmlns:MMString="http://www.adobe.com/schemes/data/string/">
<menugroup MMString:name="CodeHints_Example" id="CodeHints_Example" name="Example Code Hints" enabled="true">
<description>
<![CDATA[Example Code Hints]]>
</description>
<!--
This is how a package is defined.
- Each tier must be defined by an independant menu element
- The pattern attribute must be used
- The pattern value must be followed by a dot
-->
<menu pattern="package." casesensitive="true">
<menuitem label="firsttier" icon="shared/mm/images/hintPackage.gif" />
</menu>
<menu pattern="package.firsttier." casesensitive="true">
<menuitem label="secondtier" icon="shared/mm/images/hintPackage.gif" />
</menu>
<menu pattern="package.firsttier.secondtier." casesensitive="true">
<menuitem label="ExampleClass" icon="shared/mm/images/hintClass.gif" />
</menu>
<!--
This is how a class constructor is defined.
- The pattern attribute must be used
- The pattern value must be the absolute path to the class
- The pattern value must also contain any parameters that need to be passed to the constructor
-->
<function pattern="package.firsttier.secondtier.ExampleClass(Object parameter)" casesensitive="true" icon="shared/mm/images/hintClass.gif" />
<!--
This is how static class members are defined.
- The pattern value must be the absolute path to the class
- The pattern value must be followed by a dot
- Static properties and events must be menuitem elements that are children of the menu element
- Static methods must be menuitem elements that are children of the menu element, with a label element the ends with an opening parenthesis
- Static methods must also be function elements that are siblings of the menu element
- Static methods must also contain any parameters that need to be passed to the function
-->
<menu pattern="package.firsttier.secondtier.ExampleClass." casesensitive="true">
<menuitem label="staticProperty" icon="shared/mm/images/hintProperty.gif" />
<menuitem label="staticMethod" value="staticMethod(" icon="shared/mm/images/hintFunction.gif" />
</menu>
<function pattern="package.firsttier.secondtier.ExampleClass.staticMethod(Integer id, String value)" icon="shared/mm/images/hintFunction.gif" />
<!--
This is how instance class members are defined.
- The classpattern attribute must be used, and not the pattern attribute
- The classpattern value must be the absolute path to the class
- Instance properties must be property elements that are children of the menu element
- Instance methods must be function elements that are children of the menu element
- Instance methods must also contain any parameters that need to be passed to the function
-->
<menu classpattern="package.firsttier.secondtier.ExampleClass">
<property label="instanceProperty" icon="shared/mm/images/hintProperty.gif" />
<method pattern="append(ExampleClass childExampleClass)" icon="shared/mm/images/hintFunction.gif" />
<method pattern="remove(ExampleClass childExampleClass)" icon="shared/mm/images/hintFunction.gif" />
</menu>
</menugroup>
</codehints>
There are a few ways to get this up and running, and much of what you need to get going will be contained in the code hints tag reference.
I noticed that a lot of the traffic currently going to this post is coming from people wanting to encode and decode passwords from a *.ste file online. You can now do this using the form below:
If you have worked with the Dreamweaver Extensibility API, you may have noticed that the MMNotes.localURLToFilePath and MMNotes.filePathToLocalURL functions do not work correctly on Mac OS X.
Below is the code that I used to get around this issue:
function localURLToFilePath(localURL)
{
return (dreamweaver.isOSX()) ? localURL.replace(/^file:\/\/\/([\d\w\s\\_-]+)(.+$)/, "/Volumes/$1$2") : MMNotes.localURLToFilePath(localURL);
}
function filePathToLocalURL(filePath)
{
return (dreamweaver.isOSX()) ? "file://" + filePath : MMNotes.filePathToLocalURL(filePath);
}
Hope that saves you some time!