Pictures are now sent via FTP in binary mode.

This commit is contained in:
Erik C. Thauvin 2004-08-26 20:41:44 +00:00
parent 0c2a043ca1
commit 96154a06c8
6 changed files with 147 additions and 138 deletions

View file

@ -124,6 +124,29 @@
<option name="IS_EMACS_ERRORS_MODE" value="true" />
<option name="ADDITIONAL_OPTIONS_STRING" value="" />
</component>
<component name="PEExternalization">
<option name="IGNORE_METHOD_NAMES" value="" />
<option name="IGNORE_METHOD_NAMES_ENABLED" value="false" />
<option name="IGNORE_CLASS_CONSTRUCTORS">
<value>
<option class="Exception" includeInheritors="true" />
</value>
</option>
<option name="IGNORE_CLASS_CONSTRUCTOR_NAMES_ENABLED" value="true" />
<option name="IGNORE_CLASS_METHODS_ENABLED" value="true" />
<option name="IGNORE_STRINGS_CONTAINS_ONLY_ENABLED" value="true" />
<option name="IGNORE_STRINGS_CONTAINS_ONLY_WHITESPACES" value="true" />
<option name="IGNORE_STRINGS_CONTAINS_ONLY_PUNCTUATIONS" value="true" />
<option name="IGNORE_STRINGS_CONTAINS_ONLY_SPECIFIED_ENABLED" value="true" />
<option name="IGNORE_STRINGS_CONTAINS_ONLY_SPECIFIED" value="" />
<option name="IGNORE_CLASS_METHODS">
<value>
<option class="Exception" includeInheritors="false" />
<option class="java.util.ResourceBundle" includeInheritors="true" />
</value>
</option>
<option name="IGNORE_CONSTANTS_DECLARATIONS" value="true" />
</component>
<component name="Palette2">
<group name="Swing">
<item class="com.intellij.uiDesigner.HSpacer" tooltip-text="Horizontal Spacer" icon="/com/intellij/uiDesigner/icons/hspacer.png" removable="false">
@ -241,6 +264,8 @@
<option name="pos4" value="444" />
<option name="pos5" value="162" />
<option name="autoUpdate" value="true" />
<option name="referenceOn" value="false" />
<option name="referencePos" value="0" />
</component>
<component name="RmicSettings">
<option name="IS_EANABLED" value="false" />

View file

@ -71,7 +71,7 @@
<option name="PUT_FOCUS_INTO_COMMENT" value="true" />
<option name="SHOW_CHECKIN_OPTIONS" value="true" />
<option name="FORCE_NON_EMPTY_COMMENT" value="false" />
<option name="LAST_COMMIT_MESSAGE" value="Changed default from FTP to MetaWeblog.&#10;Changed post action to publish." />
<option name="LAST_COMMIT_MESSAGE" value="Updated docs." />
<option name="SAVE_LAST_COMMIT_MESSAGE" value="true" />
<option name="CHECKIN_DIALOG_SPLITTER_PROPORTION" value="0.8" />
<option name="OPTIMIZE_IMPORTS_BEFORE_PROJECT_COMMIT" value="false" />
@ -112,17 +112,10 @@
<option name="HIDE_WARNINGS" value="false" />
</component>
<component name="FileEditorManager" split-orientation="vertical" split-proportion="0.5">
<first-group selected-file="file://$PROJECT_DIR$/licenses/License.txt">
<entry file="file://$PROJECT_DIR$/src/net/thauvin/lifeblogger/Base64.java" pinned="false">
<first-group selected-file="file://$PROJECT_DIR$/src/net/thauvin/lifeblogger/LifeFTP.java">
<entry file="file://$PROJECT_DIR$/src/net/thauvin/lifeblogger/LifeFTP.java" pinned="false">
<provider selected="true" editor-type-id="text-editor">
<state line="47" column="13" selection-start="2322" selection-end="2322" vertical-scroll-proportion="1.466055">
<folding />
</state>
</provider>
</entry>
<entry file="file://$PROJECT_DIR$/src/net/thauvin/lifeblogger/LifeAction.java" pinned="false">
<provider selected="true" editor-type-id="text-editor">
<state line="52" column="22" selection-start="2054" selection-end="2054" vertical-scroll-proportion="1.6220183">
<state line="57" column="13" selection-start="2224" selection-end="2224" vertical-scroll-proportion="-2.0806916">
<folding>
<element signature="imports" expanded="true" />
</folding>
@ -131,7 +124,7 @@
</entry>
<entry file="file://$PROJECT_DIR$/src/net/thauvin/lifeblogger/LifeBlog.java" pinned="false">
<provider selected="true" editor-type-id="text-editor">
<state line="52" column="22" selection-start="2126" selection-end="2126" vertical-scroll-proportion="0.36697248">
<state line="57" column="23" selection-start="2216" selection-end="2216" vertical-scroll-proportion="0.048991356">
<folding>
<element signature="imports" expanded="true" />
</folding>
@ -140,20 +133,13 @@
</entry>
<entry file="file://$PROJECT_DIR$/src/net/thauvin/lifeblogger/LifeBlogger.java" pinned="false">
<provider selected="true" editor-type-id="text-editor">
<state line="67" column="13" selection-start="2309" selection-end="2309" vertical-scroll-proportion="1.5706422">
<state line="402" column="25" selection-start="9606" selection-end="9613" vertical-scroll-proportion="11.0951">
<folding>
<element signature="imports" expanded="true" />
</folding>
</state>
</provider>
</entry>
<entry file="file://$PROJECT_DIR$/src/net/thauvin/lifeblogger/LifeFTP.java" pinned="false">
<provider selected="true" editor-type-id="text-editor">
<state line="56" column="13" selection-start="2185" selection-end="2185" vertical-scroll-proportion="0.33211008">
<folding />
</state>
</provider>
</entry>
<entry file="file://$PROJECT_DIR$/licenses/License.txt" pinned="false">
<provider selected="true" editor-type-id="text-editor">
<state line="0" column="0" selection-start="0" selection-end="0" vertical-scroll-proportion="0.0">
@ -163,30 +149,7 @@
</entry>
<entry file="file://$PROJECT_DIR$/src/net/thauvin/lifeblogger/LifeMediaObject.java" pinned="false">
<provider selected="true" editor-type-id="text-editor">
<state line="53" column="13" selection-start="2109" selection-end="2109" vertical-scroll-proportion="0.33211008">
<folding>
<element signature="imports" expanded="true" />
</folding>
</state>
</provider>
</entry>
<entry file="file://$PROJECT_DIR$/src/net/thauvin/lifeblogger/ReleaseInfo.java" pinned="false">
<provider selected="true" editor-type-id="text-editor">
<state line="11" column="13" selection-start="308" selection-end="308" vertical-scroll-proportion="0.3119266">
<folding />
</state>
</provider>
</entry>
<entry file="file://$PROJECT_DIR$/src/net/thauvin/lifeblogger/LifePost.java" pinned="false">
<provider selected="true" editor-type-id="text-editor">
<state line="54" column="13" selection-start="2136" selection-end="2136" vertical-scroll-proportion="0.33211008">
<folding />
</state>
</provider>
</entry>
<entry file="file://$PROJECT_DIR$/src/net/thauvin/lifeblogger/LifeRPCResponse.java" pinned="false">
<provider selected="true" editor-type-id="text-editor">
<state line="53" column="13" selection-start="2103" selection-end="2103" vertical-scroll-proportion="0.33211008">
<state line="53" column="13" selection-start="2109" selection-end="2109" vertical-scroll-proportion="0.8818444">
<folding>
<element signature="imports" expanded="true" />
</folding>
@ -209,18 +172,17 @@
<component name="J2EEProjectPane" />
<component name="NamedScopeManager" />
<component name="PackagesPane">
<expanded_node url="" module="LifeBlogger" type="module" />
<expanded_node url="net.thauvin.lifeblogger" module="LifeBlogger" type="package" />
<expanded_node url="net.thauvin" module="LifeBlogger" type="package" />
<expanded_node url="net" module="LifeBlogger" type="package" />
<expanded_node url="net.thauvin.lifeblogger" module="LifeBlogger" type="package" />
<expanded_node url="" module="LifeBlogger" type="module" />
</component>
<component name="ProjectPane">
<expanded_node url="file://$PROJECT_DIR$" module="LifeBlogger" type="directory" />
<expanded_node url="file://$PROJECT_DIR$/licenses" module="LifeBlogger" type="directory" />
<expanded_node url="" module="LifeBlogger" type="module" />
</component>
<component name="ProjectView">
<navigator currentView="ProjectPane" splitterProportion="0.5">
<navigator currentView="PackagesPane" splitterProportion="0.5">
<flattenPackages />
<showMembers />
<showModules />
@ -244,6 +206,13 @@
</component>
<component name="RunManager">
<activeType name="Application" />
<configuration selected="false" default="true" type="Application" factoryName="Application">
<option name="MAIN_CLASS_NAME" />
<option name="VM_PARAMETERS" />
<option name="PROGRAM_PARAMETERS" />
<option name="WORKING_DIRECTORY" value="$PROJECT_DIR$" />
<module name="" />
</configuration>
<configuration selected="false" default="true" type="JUnit" factoryName="JUnit">
<module name="" />
<option name="PACKAGE_NAME" />
@ -258,23 +227,6 @@
<value defaultName="wholeProject" />
</option>
</configuration>
<configuration selected="false" default="true" type="Application" factoryName="Application">
<option name="MAIN_CLASS_NAME" />
<option name="VM_PARAMETERS" />
<option name="PROGRAM_PARAMETERS" />
<option name="WORKING_DIRECTORY" value="$PROJECT_DIR$" />
<module name="" />
</configuration>
<configuration selected="false" default="true" type="Applet" factoryName="Applet">
<module name="" />
<option name="MAIN_CLASS_NAME" />
<option name="HTML_FILE_NAME" />
<option name="HTML_USED" value="false" />
<option name="WIDTH" value="400" />
<option name="HEIGHT" value="300" />
<option name="POLICY_FILE" value="C:/IntelliJ-IDEA/bin/appletviewer.policy" />
<option name="VM_PARAMETERS" />
</configuration>
<configuration selected="false" default="true" type="Remote" factoryName="Remote">
<option name="USE_SOCKET_TRANSPORT" value="true" />
<option name="SERVER_MODE" value="false" />
@ -296,6 +248,16 @@
<option name="SERVER_NAME" value="myserver" />
<option name="DOMAIN_NAME" value="mydomain" />
</configuration>
<configuration selected="false" default="true" type="Applet" factoryName="Applet">
<module name="" />
<option name="MAIN_CLASS_NAME" />
<option name="HTML_FILE_NAME" />
<option name="HTML_USED" value="false" />
<option name="WIDTH" value="400" />
<option name="HEIGHT" value="300" />
<option name="POLICY_FILE" value="C:/IntelliJ-IDEA/bin/appletviewer.policy" />
<option name="VM_PARAMETERS" />
</configuration>
<configuration selected="true" default="false" name="LifeBlogger" type="Application" factoryName="Application">
<option name="MAIN_CLASS_NAME" value="net.thauvin.lifeblogger.LifeBlogger" />
<option name="VM_PARAMETERS" value="-Djava.library.path=D:\projects\java\LifeBlogger\libexec" />
@ -365,13 +327,13 @@
<window_info id="CVS" active="false" anchor="bottom" auto_hide="false" internal_type="docked" type="docked" visible="false" weight="0.33024693" order="8" />
<window_info id="Regex" active="false" anchor="bottom" auto_hide="false" internal_type="docked" type="docked" visible="false" weight="0.33024693" order="9" />
<window_info id="TODO" active="false" anchor="bottom" auto_hide="false" internal_type="docked" type="docked" visible="false" weight="0.33" order="7" />
<window_info id="Project" active="true" anchor="left" auto_hide="false" internal_type="docked" type="docked" visible="true" weight="0.25816327" order="0" />
<window_info id="Project" active="false" anchor="left" auto_hide="false" internal_type="docked" type="docked" visible="true" weight="0.27142859" order="0" />
<window_info id="Find" active="false" anchor="bottom" auto_hide="false" internal_type="docked" type="docked" visible="false" weight="0.33024693" order="1" />
<window_info id="Structure" active="false" anchor="left" auto_hide="false" internal_type="docked" type="docked" visible="false" weight="0.25" order="1" />
<window_info id="Messages" active="false" anchor="bottom" auto_hide="false" internal_type="docked" type="docked" visible="false" weight="0.33024693" order="10" />
<window_info id="Messages" active="true" anchor="bottom" auto_hide="false" internal_type="docked" type="docked" visible="true" weight="0.33024693" order="10" />
<window_info id="Inspection" active="false" anchor="bottom" auto_hide="false" internal_type="docked" type="docked" visible="false" weight="0.69135803" order="6" x="66" y="104" width="924" height="583" />
<window_info id="Dependency Viewer" active="false" anchor="bottom" auto_hide="false" internal_type="docked" type="docked" visible="false" weight="0.33" order="11" />
<window_info id="Ant Build" active="false" anchor="right" auto_hide="false" internal_type="docked" type="docked" visible="true" weight="0.115306124" order="1" />
<window_info id="Ant Build" active="false" anchor="right" auto_hide="false" internal_type="docked" type="docked" visible="true" weight="0.11020408" order="1" />
<window_info id="Run" active="false" anchor="bottom" auto_hide="false" internal_type="docked" type="docked" visible="false" weight="0.33796296" order="2" />
<window_info id="Hierarchy" active="false" anchor="right" auto_hide="false" internal_type="docked" type="docked" visible="false" weight="0.25" order="2" />
<window_info id="CVS File View" active="false" anchor="right" auto_hide="false" internal_type="docked" type="docked" visible="false" weight="0.33" order="3" />
@ -480,34 +442,6 @@
</buildFile>
</component>
<component name="editorHistoryManager">
<entry file="file://$PROJECT_DIR$/src/net/thauvin/lifeblogger/transfer.xml">
<provider selected="true" editor-type-id="text-editor">
<state line="0" column="0" selection-start="0" selection-end="0" vertical-scroll-proportion="0.0">
<folding />
</state>
</provider>
</entry>
<entry file="file://$PROJECT_DIR$/src/net/thauvin/lifeblogger/ftp.xml">
<provider selected="true" editor-type-id="text-editor">
<state line="11" column="88" selection-start="728" selection-end="728" vertical-scroll-proportion="0.34311926">
<folding />
</state>
</provider>
</entry>
<entry file="file://$PROJECT_DIR$/src/net/thauvin/lifeblogger/post.xml">
<provider selected="true" editor-type-id="text-editor">
<state line="13" column="78" selection-start="927" selection-end="927" vertical-scroll-proportion="0.36052203">
<folding />
</state>
</provider>
</entry>
<entry file="file://$PROJECT_DIR$/src/net/thauvin/lifeblogger/main.xml">
<provider selected="true" editor-type-id="text-editor">
<state line="18" column="36" selection-start="882" selection-end="882" vertical-scroll-proportion="0.5387324">
<folding />
</state>
</provider>
</entry>
<entry file="file://$PROJECT_DIR$/webstart.xml">
<provider selected="true" editor-type-id="text-editor">
<state line="50" column="78" selection-start="1751" selection-end="1751" vertical-scroll-proportion="0.27706423">
@ -517,21 +451,72 @@
</entry>
<entry file="file://$PROJECT_DIR$/src/net/thauvin/lifeblogger/Base64.java">
<provider selected="true" editor-type-id="text-editor">
<state line="47" column="13" selection-start="2322" selection-end="2322" vertical-scroll-proportion="1.466055">
<state line="47" column="13" selection-start="2322" selection-end="2322" vertical-scroll-proportion="0.9445351">
<folding />
</state>
</provider>
</entry>
<entry file="file://$PROJECT_DIR$/src/net/thauvin/lifeblogger/LifeAction.java">
<provider selected="true" editor-type-id="text-editor">
<state line="52" column="22" selection-start="2054" selection-end="2054" vertical-scroll-proportion="0.47145188">
<folding>
<element signature="imports" expanded="true" />
</folding>
</state>
</provider>
</entry>
<entry file="file://$PROJECT_DIR$/src/net/thauvin/lifeblogger/ReleaseInfo.java">
<provider selected="true" editor-type-id="text-editor">
<state line="11" column="13" selection-start="308" selection-end="308" vertical-scroll-proportion="0.3119266">
<state line="11" column="13" selection-start="308" selection-end="308" vertical-scroll-proportion="0.28099173">
<folding />
</state>
</provider>
</entry>
<entry file="file://$PROJECT_DIR$/buildnum.properties">
<provider selected="true" editor-type-id="properties">
<state line="2" column="0" selection-start="81" selection-end="81" vertical-scroll-offset="0" key-parts-delimiter="'.'">
<NAVIGATION_TREE>
<expanded path="build" />
<expanded path="build.num" />
<expanded path="" />
</NAVIGATION_TREE>
</state>
</provider>
</entry>
<entry file="file://$PROJECT_DIR$/ftp.properties">
<provider selected="true" editor-type-id="properties">
<state line="0" column="0" selection-start="0" selection-end="0" vertical-scroll-offset="0" key-parts-delimiter="'.'">
<NAVIGATION_TREE>
<expanded path="ftp" />
<expanded path="" />
</NAVIGATION_TREE>
</state>
</provider>
</entry>
<entry file="file://$PROJECT_DIR$/keystore.properties">
<provider selected="true" editor-type-id="properties">
<state line="0" column="0" selection-start="0" selection-end="0" vertical-scroll-offset="0" key-parts-delimiter="'.'">
<NAVIGATION_TREE>
<expanded path="keystore" />
<expanded path="" />
</NAVIGATION_TREE>
</state>
</provider>
</entry>
<entry file="file://$PROJECT_DIR$/webstart.properties">
<provider selected="true" editor-type-id="properties">
<state line="0" column="0" selection-start="0" selection-end="0" vertical-scroll-offset="0" key-parts-delimiter="'.'">
<NAVIGATION_TREE>
<expanded path="path.dist" />
<expanded path="path" />
<expanded path="" />
</NAVIGATION_TREE>
</state>
</provider>
</entry>
<entry file="file://$PROJECT_DIR$/src/net/thauvin/lifeblogger/LifeRPCResponse.java">
<provider selected="true" editor-type-id="text-editor">
<state line="53" column="13" selection-start="2103" selection-end="2103" vertical-scroll-proportion="0.33211008">
<state line="53" column="13" selection-start="2103" selection-end="2103" vertical-scroll-proportion="0.5387324">
<folding>
<element signature="imports" expanded="true" />
</folding>
@ -540,41 +525,14 @@
</entry>
<entry file="file://$PROJECT_DIR$/src/net/thauvin/lifeblogger/LifePost.java">
<provider selected="true" editor-type-id="text-editor">
<state line="54" column="13" selection-start="2136" selection-end="2136" vertical-scroll-proportion="0.33211008">
<state line="46" column="21" selection-start="1851" selection-end="1851" vertical-scroll-proportion="0.028764805">
<folding />
</state>
</provider>
</entry>
<entry file="file://$PROJECT_DIR$/src/net/thauvin/lifeblogger/LifeMediaObject.java">
<provider selected="true" editor-type-id="text-editor">
<state line="53" column="13" selection-start="2109" selection-end="2109" vertical-scroll-proportion="0.33211008">
<folding>
<element signature="imports" expanded="true" />
</folding>
</state>
</provider>
</entry>
<entry file="file://$PROJECT_DIR$/src/net/thauvin/lifeblogger/LifeAction.java">
<provider selected="true" editor-type-id="text-editor">
<state line="52" column="22" selection-start="2054" selection-end="2054" vertical-scroll-proportion="1.6220183">
<folding>
<element signature="imports" expanded="true" />
</folding>
</state>
</provider>
</entry>
<entry file="file://$PROJECT_DIR$/src/net/thauvin/lifeblogger/LifeBlog.java">
<provider selected="true" editor-type-id="text-editor">
<state line="52" column="22" selection-start="2126" selection-end="2126" vertical-scroll-proportion="0.36697248">
<folding>
<element signature="imports" expanded="true" />
</folding>
</state>
</provider>
</entry>
<entry file="file://$PROJECT_DIR$/src/net/thauvin/lifeblogger/LifeBlogger.java">
<provider selected="true" editor-type-id="text-editor">
<state line="67" column="13" selection-start="2309" selection-end="2309" vertical-scroll-proportion="1.5706422">
<state line="57" column="23" selection-start="2216" selection-end="2216" vertical-scroll-proportion="0.048991356">
<folding>
<element signature="imports" expanded="true" />
</folding>
@ -588,10 +546,30 @@
</state>
</provider>
</entry>
<entry file="file://$PROJECT_DIR$/src/net/thauvin/lifeblogger/LifeMediaObject.java">
<provider selected="true" editor-type-id="text-editor">
<state line="53" column="13" selection-start="2109" selection-end="2109" vertical-scroll-proportion="0.8818444">
<folding>
<element signature="imports" expanded="true" />
</folding>
</state>
</provider>
</entry>
<entry file="file://$PROJECT_DIR$/src/net/thauvin/lifeblogger/LifeBlogger.java">
<provider selected="true" editor-type-id="text-editor">
<state line="402" column="25" selection-start="9606" selection-end="9613" vertical-scroll-proportion="11.0951">
<folding>
<element signature="imports" expanded="true" />
</folding>
</state>
</provider>
</entry>
<entry file="file://$PROJECT_DIR$/src/net/thauvin/lifeblogger/LifeFTP.java">
<provider selected="true" editor-type-id="text-editor">
<state line="56" column="13" selection-start="2185" selection-end="2185" vertical-scroll-proportion="0.33211008">
<folding />
<state line="57" column="13" selection-start="2224" selection-end="2224" vertical-scroll-proportion="-2.0806916">
<folding>
<element signature="imports" expanded="true" />
</folding>
</state>
</provider>
</entry>

View file

@ -80,7 +80,7 @@ public class LifeBlogger extends Thinlet
/**
* Creates a new LifeBlogger object.
*
* @throws IOException DOCUMENT ME!
* @throws IOException If an error occurs while creating the object.
*/
private LifeBlogger()
throws IOException

View file

@ -38,6 +38,7 @@ package net.thauvin.lifeblogger;
import org.apache.commons.net.ftp.FTPClient;
import org.apache.commons.net.ftp.FTPReply;
import org.apache.commons.net.ftp.FTP;
import java.io.BufferedInputStream;
import java.io.File;
@ -117,6 +118,11 @@ public class LifeFTP extends LifeBlog
{
final BufferedInputStream bis = new BufferedInputStream(new FileInputStream(getFile()));
if (!getFilename().endsWith(".txt"))
{
ftp.setFileTransferMode(FTP.BINARY_FILE_TYPE);
}
ftp.storeFile(getFilename(), bis);
bis.close();

View file

@ -1,5 +1,5 @@
/* Created by JReleaseInfo AntTask from Open Source Competence Group */
/* Creation date Thu Jul 29 10:28:53 PDT 2004 */
/* Creation date Thu Aug 26 13:35:50 PDT 2004 */
package net.thauvin.lifeblogger;
import java.util.Date;
@ -12,21 +12,21 @@ import java.util.Date;
public class ReleaseInfo {
/** buildDate (set during build process to 1091122133468L). */
private static Date buildDate = new Date(1091122133468L);
/** buildDate (set during build process to 1093552550453L). */
private static Date buildDate = new Date(1093552550453L);
/**
* Get buildDate (set during build process to Thu Jul 29 10:28:53 PDT 2004).
* Get buildDate (set during build process to Thu Aug 26 13:35:50 PDT 2004).
* @return Date buildDate
*/
public static final Date getBuildDate() { return buildDate; }
/**
* Get buildNumber (set during build process to 113).
* Get buildNumber (set during build process to 118).
* @return int buildNumber
*/
public static final int getBuildNumber() { return 113; }
public static final int getBuildNumber() { return 118; }
/** version (set during build process to "0.1.0"). */

View file

@ -68,7 +68,7 @@ End If
</tr>
<tr>
<td valign="top" width="219"><p>LifeBlogger allows you to post your <a href="http://www.nokia.com/lifeblog/">Nokia Lifeblog</a> favorites to your blog.</p>
<p>Your images, text notes and videos can now be effortlessly posted to your blog using FTP (<a href="http://www.blogger.com/">Blogger</a>, etc.) or via the MetaWeblog API (<a href="http://www.movabletype.org/">Movable Type</a>, <a href="http://radio.userland.com/">Radio UserLand</a>, etc.).</p>
<p>Your images, text notes and videos can now be effortlessly posted to your blog using FTP <span class="Grey10px">(<a href="http://www.blogger.com/">Blogger</a>, etc.)</span> or via the MetaWeblog API <span class="Grey10px">(<a href="http://www.movabletype.org/">Movable Type</a>, <a href="http://radio.userland.com/">Radio UserLand</a>, etc.)</span> <a href="http://www.russellbeattie.com/notebook/1007954.html" class="Grey10px">[More...]</a></p>
<p>LifeBlogger makes extensive use of various <strong>open source libraries</strong>, including:</p>
<ul>
<li><a href="http://www.thinlet.com/">Thinlet</a></li>