\documentclass{article}
\usepackage{ulem}
\pagestyle{headings}
\begin{document}
\tableofcontents

HippoBugsSourcePeopleDescriptionChanges from Klutz for comics driverAs a source of feedsResourcesUI IdeasYQL - super data sourceSemantic data sourcesFeed sourcesConverting partial feeds to full feedsTerm extractionOPML parsing (merge into Horde\_Feed)TypographyPDF generationPodcast fetchingNYTimes data sourceVideo sourcesVanity feeds

\part{Hippo}
Hippo will be a new Horde 4, PHP 5 application that aggregates content. It will initially be written to aggregate feeds, both internal from Jonah natively, and external (through Horde\_Feed). Hippo will work with Horde\_Content types and have Input and Output classes. Input classes will allow reading a content type, such as Horde\_Feed feeds, Jonah internal feeds, comics, etc. Output classes will allow outputting a "remixed" feed from one or more inputs (such as combining an RSS feed with a few comics into a daily feed).

\section{Bugs}
Horde\_Feed improvements to suport Hippo:

\begin{itemize}
\item{http://bugs.horde.org/ticket/6877\footnote{http://bugs.horde.org/ticket/6877}}
\item{http://bugs.horde.org/ticket/6876\footnote{http://bugs.horde.org/ticket/6876}}
\item{\sout{ http://bugs.horde.org/ticket/6879\footnote{http://bugs.horde.org/ticket/6879} }}
\item{\sout{ http://bugs.horde.org/ticket/6880\footnote{http://bugs.horde.org/ticket/6880} }}
\end{itemize}
\section{Source}
Hippo is being developed in the Horde hatchery\footnote{http://horde.org/source/git.php}

\section{People}
ChuckHagenbuch\footnote{http://example.com/index.php?page=ChuckHagenbuch} is working on Hippo. MikeNaberezny\footnote{http://example.com/index.php?page=MikeNaberezny} may be interested in Hippo.

\section{Description}
\begin{itemize}
\item{Horde\_Cache will be used to cache content that isn't stored directly}
\item{Some content types such as comics might include code to fetch and store themselves locally; we might decide that Horde\_Feed external feeds should be fetched into a local content table also}
\item{This application should be able to provide the backend for Planet Horde (http://planet.horde.org/\footnote{http://planet.horde.org/})}
\item{Fields to aggregate for feeds: title, url, uid, summary, content if any, content-type for content, date}
\item{During Hippo runs, Horde\_Log will be used for logging}
\item{There will be the ability to run filters on Hippo\_Input plugins. For instance, if a certain feed has the same junk in every entry, a filter could be attached to the Hippo\_Input for that feed that would strip it out. Generic (regex-type) filters should be configurable via the UI; it should be possible to configure any kind of filter in a config file or separate input plugin class.}
\item{This application should eventually be able to replace Klutz}
\item{Additional possible content types include podcasts, content from other Horde applications (iCalendar data from Kronolith), "friend information (http://hasin.wordpress.com/2008/05/31/building-friendfeed-using-php-part-1/\footnote{http://hasin.wordpress.com/2008/05/31/building-friendfeed-using-php-part-1/}, http://hasin.wordpress.com/2008/06/03/building-services-like-friendfeed-using-php-part2/\footnote{http://hasin.wordpress.com/2008/06/03/building-services-like-friendfeed-using-php-part2/}), etc.}
\item{Hippo will be able to provide read/write "data folders" to IMP 5 (or other folder-browsing applications). This will allow feed reading from within IMP. Other possible data folder providers are Nag and Whups.}
\item{Must support PubSubHubbub (http://code.google.com/p/pubsubhubbub/\footnote{http://code.google.com/p/pubsubhubbub/}, http://adsenseforfeeds.blogspot.com/2009/07/whats-all-hubbub-about-pubsubhubbub.html\footnote{http://adsenseforfeeds.blogspot.com/2009/07/whats-all-hubbub-about-pubsubhubbub.html})}
\end{itemize}
GUID detection:

\begin{verbatim}

if (isset($item['guid'])) {
    $guid = $item['guid'];
} elseif (isset($item['id'])) {
    $guid = $item['id'];
    $item['guid'] = $item['id'];
} else {
    $guid = $item['link'];
    $item['guid'] = $item['link'];
}
\end{verbatim}

Stats to keep:

\begin{itemize}
\item{stats for when a feed was last updated}
\item{when you last read something from it}
\item{when you last flagged something from it}
\end{itemize}
\subsection{Changes from Klutz for comics driver}
"try to fetch this comic" gives a blank page, though it works\newline
- make "try to fetch this comic" links inline ajax calls

\textbf{UI updates}

default to the previous day's comics if today's haven't fetched yet

have a back-fill mode for fetch? http://example.org/horde/klutz/index.php?actionID=day\&date=1217995200\footnote{http://example.org/horde/klutz/index.php?actionID=day\&date=1217995200}\newline
- have the capability, just need to have it in the command-line script

- put the various fetch, rebuild sums, cleanup tasks into API calls.\newline
- use those api calls in backend.php and rename backend.php to some more reasonable admin script\newline
- better error reporting throughout the drivers and backend.php code\newline
- feeds of specified comic sets\newline
- tags? so, political cartoons, sometimes funny, always funny..

Keyboard nav:

\begin{itemize}
\item{http://parand.com/say/index.php/2008/09/15/readerscroll-google-reader-style-image-navigation-with-j-k-keys-bookmarklet/\footnote{http://parand.com/say/index.php/2008/09/15/readerscroll-google-reader-style-image-navigation-with-j-k-keys-bookmarklet/}}
\item{http://blogs.newsgator.com/newsgator\_widget\_blog/2008/10/five-things-you.html\footnote{http://blogs.newsgator.com/newsgator\_widget\_blog/2008/10/five-things-you.html}}
\end{itemize}
\section{As a source of feeds}
Dave Winer has some ideas on loosely-coupled publishing tools that are interesting and may match with some of the Hydra/Hippo/Hound set of apps:

\begin{itemize}
\item{http://scripting.com/stories/2011/01/05/upcomingTheMinimalBlogging.html\footnote{http://scripting.com/stories/2011/01/05/upcomingTheMinimalBlogging.html}}
\item{http://scripting.com/stories/2011/01/03/rebootingRssRevisited.html\footnote{http://scripting.com/stories/2011/01/03/rebootingRssRevisited.html}}
\item{http://scripting.com/stories/2010/10/08/ideasForAnAcademicHackatho.html\footnote{http://scripting.com/stories/2010/10/08/ideasForAnAcademicHackatho.html}}
\item{http://scripting.com/stories/2010/10/08/4MoreFreeProjectIdeasForYo.html\footnote{http://scripting.com/stories/2010/10/08/4MoreFreeProjectIdeasForYo.html}}
\end{itemize}
\section{Resources}
\begin{itemize}
\item{http://www.25hoursaday.com/weblog/2010/01/04/BrizzlySeesmicWebAndTheFutureOfRSS.aspx\footnote{http://www.25hoursaday.com/weblog/2010/01/04/BrizzlySeesmicWebAndTheFutureOfRSS.aspx} (good argument for a stream (twitter-like) UI instead of an email-like UI, and also for exposing hippo content through the twitter api)}
\item{http://www.readwriteweb.com/archives/top\_rss\_syndication\_technologies\_of\_2009.php\footnote{http://www.readwriteweb.com/archives/top\_rss\_syndication\_technologies\_of\_2009.php}}
\item{http://activitystrea.ms/\footnote{http://activitystrea.ms/}}
\item{http://www.25hoursaday.com/weblog/2009/08/26/TheTop5ReasonsRSSReadersWentWrong.aspx\footnote{http://www.25hoursaday.com/weblog/2009/08/26/TheTop5ReasonsRSSReadersWentWrong.aspx}}
\item{http://www.readwriteweb.com/archives/shyftr\_intros\_new\_filtered\_feed\_service.php\footnote{http://www.readwriteweb.com/archives/shyftr\_intros\_new\_filtered\_feed\_service.php}}
\item{http://www.readwriteweb.com/archives/feedly\_integrates\_with\_ubiquity.php\footnote{http://www.readwriteweb.com/archives/feedly\_integrates\_with\_ubiquity.php}}
\item{http://www.newsgator.com/Individuals/NewsGatorInbox/Default.aspx\footnote{http://www.newsgator.com/Individuals/NewsGatorInbox/Default.aspx}}
\item{http://www.newsgator.com/Individuals/NewsGatorOnline/Default.aspx\footnote{http://www.newsgator.com/Individuals/NewsGatorOnline/Default.aspx}}
\item{http://lifestreamblog.com/create/\footnote{http://lifestreamblog.com/create/}}
\item{http://www.readwriteweb.com/archives/friendfeed.php\footnote{http://www.readwriteweb.com/archives/friendfeed.php}}
\item{http://www.readwriteweb.com/archives/friendfeed\_beta\_interface.php\footnote{http://www.readwriteweb.com/archives/friendfeed\_beta\_interface.php}}
\item{http://hasin.wordpress.com/2008/05/31/building-friendfeed-using-php-part-1/\footnote{http://hasin.wordpress.com/2008/05/31/building-friendfeed-using-php-part-1/}}
\item{http://hasin.wordpress.com/2008/06/03/building-services-like-friendfeed-using-php-part2/\footnote{http://hasin.wordpress.com/2008/06/03/building-services-like-friendfeed-using-php-part2/}}
\item{http://www.dapper.net/\footnote{http://www.dapper.net/} - looks similar in concept though not open source}
\item{http://www.sweetcron.com/\footnote{http://www.sweetcron.com/} - code in beta now}
\item{http://code.google.com/p/sweetcron/wiki/Themes\footnote{http://code.google.com/p/sweetcron/wiki/Themes}}
\item{http://www.readwriteweb.com/archives/sweetcron\_lifestream\_self\_hosted.php\footnote{http://www.readwriteweb.com/archives/sweetcron\_lifestream\_self\_hosted.php}}
\item{http://www.readwriteweb.com/archives/mloovi\_translate\_any\_rss\_feed.php\footnote{http://www.readwriteweb.com/archives/mloovi\_translate\_any\_rss\_feed.php} - translate feeds}
\item{http://www.readwriteweb.com/archives/pageonce\_new\_iphone\_app.php\footnote{http://www.readwriteweb.com/archives/pageonce\_new\_iphone\_app.php} - some killer feed ideas there}
\item{http://www.25hoursaday.com/weblog/2008/06/10/TwoCardinalSinsOfRESTAPIDesignLessonsYouCanLearnFromTheNewsGatorRESTAPI.aspx\footnote{http://www.25hoursaday.com/weblog/2008/06/10/TwoCardinalSinsOfRESTAPIDesignLessonsYouCanLearnFromTheNewsGatorRESTAPI.aspx}}
\item{http://www.readwriteweb.com/archives/feedinformer\_relaunches\_its\_al.php\footnote{http://www.readwriteweb.com/archives/feedinformer\_relaunches\_its\_al.php}}
\item{http://www.readwriteweb.com/archives/friendfeed\_dupe\_detection.php\footnote{http://www.readwriteweb.com/archives/friendfeed\_dupe\_detection.php}}
\item{http://www.readwriteweb.com/archives/godaddy\_unveils\_mainstream\_social\_web\_aggregator.php\footnote{http://www.readwriteweb.com/archives/godaddy\_unveils\_mainstream\_social\_web\_aggregator.php}}
\item{http://www.readwriteweb.com/archives/npr\_now\_lets\_you\_roll\_your\_own\_podcasts.php\footnote{http://www.readwriteweb.com/archives/npr\_now\_lets\_you\_roll\_your\_own\_podcasts.php}}
\item{http://www.25hoursaday.com/weblog/2009/01/08/RepresentingRichMediaAndSocialNetworkActivitiesInRSSAtomFeeds.aspx\footnote{http://www.25hoursaday.com/weblog/2009/01/08/RepresentingRichMediaAndSocialNetworkActivitiesInRSSAtomFeeds.aspx}}
\item{http://www.25hoursaday.com/weblog/2009/01/17/SomeThoughtsOnUserInterfacesForActivityStreams.aspx\footnote{http://www.25hoursaday.com/weblog/2009/01/17/SomeThoughtsOnUserInterfacesForActivityStreams.aspx}}
\item{http://jasonpriem.com/feedvis-dev/\footnote{http://jasonpriem.com/feedvis-dev/}}
\item{http://www.readwriteweb.com/archives/suggestrss\_find\_some\_new\_feeds.php\footnote{http://www.readwriteweb.com/archives/suggestrss\_find\_some\_new\_feeds.php} (integrate for recommendations)}
\item{http://www.readwriteweb.com/archives/syndicating\_content\_copygator.php\footnote{http://www.readwriteweb.com/archives/syndicating\_content\_copygator.php}}
\item{http://www.readwriteweb.com/archives/notifixious\_superfeeder\_realtime\_web.php\footnote{http://www.readwriteweb.com/archives/notifixious\_superfeeder\_realtime\_web.php}}
\item{http://www.25hoursaday.com/weblog/2009/03/24/SharingSocialActivityStreamsAcrossTheWebHowGnipFitsIn.aspx\footnote{http://www.25hoursaday.com/weblog/2009/03/24/SharingSocialActivityStreamsAcrossTheWebHowGnipFitsIn.aspx}}
\item{http://www.sitepoint.com/blogs/2009/09/29/build-a-lifestream-with-simplepie/\footnote{http://www.sitepoint.com/blogs/2009/09/29/build-a-lifestream-with-simplepie/}}
\item{http://googlecode.blogspot.com/2010/08/google-buzz-api-adds-track-and-some.html\footnote{http://googlecode.blogspot.com/2010/08/google-buzz-api-adds-track-and-some.html}}
\item{http://cweiske.de/tagebuch/tiny-tiny-rss-feed-detection.htm\footnote{http://cweiske.de/tagebuch/tiny-tiny-rss-feed-detection.htm}}
\item{http://www.25hoursaday.com/weblog/2009/03/22/VideoStandardsForAggregatingActivityFeedsAndSocialAggregationServicesAtMIX09Conference.aspx\footnote{http://www.25hoursaday.com/weblog/2009/03/22/VideoStandardsForAggregatingActivityFeedsAndSocialAggregationServicesAtMIX09Conference.aspx}}
\item{http://webworkerdaily.com/2009/03/31/how-to-monitor-online-conversations/\footnote{http://webworkerdaily.com/2009/03/31/how-to-monitor-online-conversations/}}
\item{http://fastwonderblog.com/2008/09/08/monitoring-dashboards-why-every-company-should-have-on/\footnote{http://fastwonderblog.com/2008/09/08/monitoring-dashboards-why-every-company-should-have-on/}}
\item{http://webworkerdaily.com/2009/03/31/skimmer-eventbox-expecting-more-from-lifestreaming-apps/\footnote{http://webworkerdaily.com/2009/03/31/skimmer-eventbox-expecting-more-from-lifestreaming-apps/}}
\item{http://www.25hoursaday.com/weblog/2009/05/04/RepostRSSBanditCodenameCollossusWillBringStabilityBugFixesAndFacebookIntegration.aspx\footnote{http://www.25hoursaday.com/weblog/2009/05/04/RepostRSSBanditCodenameCollossusWillBringStabilityBugFixesAndFacebookIntegration.aspx}}
\item{http://www.25hoursaday.com/weblog/2009/05/25/PreviewOfFacebookCommentsInRSSBanditAndTheRibbon.aspx\footnote{http://www.25hoursaday.com/weblog/2009/05/25/PreviewOfFacebookCommentsInRSSBanditAndTheRibbon.aspx}}
\item{http://www.25hoursaday.com/weblog/2009/05/05/RSSReadersModeledAfterEmailClientsAreFundamentallyBroken.aspx\footnote{http://www.25hoursaday.com/weblog/2009/05/05/RSSReadersModeledAfterEmailClientsAreFundamentallyBroken.aspx}}
\item{http://www.readwriteweb.com/archives/eventbox\_review.php\footnote{http://www.readwriteweb.com/archives/eventbox\_review.php}}
\item{http://newstimeline.googlelabs.com/\footnote{http://newstimeline.googlelabs.com/}}
\item{http://www.readwriteweb.com/archives/amplifeeder\_friendfeeds\_much\_prettier\_sister.php\footnote{http://www.readwriteweb.com/archives/amplifeeder\_friendfeeds\_much\_prettier\_sister.php}}
\item{http://amplifeeder.com/\footnote{http://amplifeeder.com/}}
\item{http://hasin.wordpress.com/2009/06/20/collecting-data-from-streaming-api-in-twitter/\footnote{http://hasin.wordpress.com/2009/06/20/collecting-data-from-streaming-api-in-twitter/}}
\item{http://feedafever.com/\footnote{http://feedafever.com/}}
\item{http://blog.liip.ch/archive/2005/10/28/how-to-fetch-a-lot-of-feeds.html\footnote{http://blog.liip.ch/archive/2005/10/28/how-to-fetch-a-lot-of-feeds.html}}
\item{http://netevil.org/blog/2005/may/guru-multiplexing\footnote{http://netevil.org/blog/2005/may/guru-multiplexing}}
\item{http://www.readwriteweb.com/archives/wordpress\_just\_made\_millions\_of\_blogs\_real-time\_wi.php\footnote{http://www.readwriteweb.com/archives/wordpress\_just\_made\_millions\_of\_blogs\_real-time\_wi.php}}
\item{http://www.readwriteweb.com/archives/lazyfeed\_1st\_independent\_rss\_aggregator\_declares\_s.php\footnote{http://www.readwriteweb.com/archives/lazyfeed\_1st\_independent\_rss\_aggregator\_declares\_s.php}}
\item{http://www.readwriteweb.com/archives/netvibes\_launches\_ultimate\_news\_and\_lifestyle\_dash.php\footnote{http://www.readwriteweb.com/archives/netvibes\_launches\_ultimate\_news\_and\_lifestyle\_dash.php}}
\item{http://hasin.wordpress.com/2010/01/25/installing-storytlr-in-your-own-domain/\footnote{http://hasin.wordpress.com/2010/01/25/installing-storytlr-in-your-own-domain/}}
\item{http://blog.stuartherbert.com/php/2010/01/26/playing-with-storytlr/\footnote{http://blog.stuartherbert.com/php/2010/01/26/playing-with-storytlr/}}
\item{http://www.readwriteweb.com/archives/fliptop\_makes\_rss\_easy\_more\_configurable.php\footnote{http://www.readwriteweb.com/archives/fliptop\_makes\_rss\_easy\_more\_configurable.php}}
\end{itemize}
\subsection{UI Ideas}
Article skimmer

\begin{itemize}
\item{http://www.nytimes.com/timesskimmer/\footnote{http://www.nytimes.com/timesskimmer/}}
\item{http://www.readwriteweb.com/archives/nyt\_article\_skimmer\_sunday\_bro.php\footnote{http://www.readwriteweb.com/archives/nyt\_article\_skimmer\_sunday\_bro.php}}
\item{http://firstlook.blogs.nytimes.com/2009/02/13/sunday-browsing/\footnote{http://firstlook.blogs.nytimes.com/2009/02/13/sunday-browsing/}}
\item{http://www.readwriteweb.com/readwritestart/2009/07/guzzleit-a-personalized-news-d.php\footnote{http://www.readwriteweb.com/readwritestart/2009/07/guzzleit-a-personalized-news-d.php}}
\end{itemize}
Mobile

\begin{itemize}
\item{http://www.readwriteweb.com/archives/check\_out\_this\_awesome\_rss\_reader\_for\_windows\_phone\_7.php\footnote{http://www.readwriteweb.com/archives/check\_out\_this\_awesome\_rss\_reader\_for\_windows\_phone\_7.php}}
\end{itemize}
Other

\begin{itemize}
\item{http://ignorethecode.net/blog/2009/05/20/optimizing-short-titles/\footnote{http://ignorethecode.net/blog/2009/05/20/optimizing-short-titles/}}
\item{http://helvetireader.com/\footnote{http://helvetireader.com/}}
\item{http://www.bravenewcode.com/wptouch/\footnote{http://www.bravenewcode.com/wptouch/}}
\item{http://www.readwriteweb.com/archives/prldr\_rss\_meets\_design\_and\_everybody\_wins.php\footnote{http://www.readwriteweb.com/archives/prldr\_rss\_meets\_design\_and\_everybody\_wins.php}}
\end{itemize}
\subsection{YQL - super data source}
\begin{itemize}
\item{http://developer.yahoo.com/yql/\footnote{http://developer.yahoo.com/yql/}}
\item{http://www.wait-till-i.com/2008/12/12/yql-is-so-the-bomb-to-get-web-data-as-xml-or-json/\footnote{http://www.wait-till-i.com/2008/12/12/yql-is-so-the-bomb-to-get-web-data-as-xml-or-json/}}
\item{http://ajaxian.com/archives/yql-converting-the-web-to-json-with-mock-sql\footnote{http://ajaxian.com/archives/yql-converting-the-web-to-json-with-mock-sql}}
\end{itemize}
\subsection{Semantic data sources}
\begin{itemize}
\item{http://semanticproxy.com/\footnote{http://semanticproxy.com/}}
\item{http://www.opencalais.com/\footnote{http://www.opencalais.com/}}
\end{itemize}
\subsection{Feed sources}
\begin{itemize}
\item{http://www.guardian.co.uk/help/feeds\footnote{http://www.guardian.co.uk/help/feeds}}
\item{http://www.postrank.com/twitter\footnote{http://www.postrank.com/twitter}}
\end{itemize}
\subsection{Converting partial feeds to full feeds}
\begin{itemize}
\item{http://fivefilters.org/content-only/\footnote{http://fivefilters.org/content-only/}}
\end{itemize}
\subsection{Term extraction}
\begin{itemize}
\item{http://fivefilters.org/term-extraction/\footnote{http://fivefilters.org/term-extraction/}}
\end{itemize}
\subsection{OPML parsing (merge into Horde\_Feed)}
\begin{itemize}
\item{http://freshmeat.net/projects/opml-parser-class/\footnote{http://freshmeat.net/projects/opml-parser-class/}}
\end{itemize}
\subsection{Typography}
\begin{itemize}
\item{http://kingdesk.com/projects/php-typography/\footnote{http://kingdesk.com/projects/php-typography/}}
\end{itemize}
\subsection{PDF generation}
http://fivefilters.org/pdf-newspaper/\footnote{http://fivefilters.org/pdf-newspaper/}

\subsection{Podcast fetching}
\begin{itemize}
\item{http://ostatic.com/blog/automatically-snag-podcasts-from-the-internet-with-juice\footnote{http://ostatic.com/blog/automatically-snag-podcasts-from-the-internet-with-juice}}
\end{itemize}
\subsection{NYTimes data source}
\begin{itemize}
\item{http://open.blogs.nytimes.com/2009/02/04/announcing-the-article-search-api/\footnote{http://open.blogs.nytimes.com/2009/02/04/announcing-the-article-search-api/}}
\item{http://www.readwriteweb.com/archives/nyt\_times\_newswire\_api.php\footnote{http://www.readwriteweb.com/archives/nyt\_times\_newswire\_api.php}}
\end{itemize}
\subsection{Video sources}
\begin{itemize}
\item{http://www.hulu.com/feed\footnote{http://www.hulu.com/feed}}
\end{itemize}
\subsection{Vanity feeds}
\begin{itemize}
\item{http://search.twitter.com/\footnote{http://search.twitter.com/}}
\item{http://blogsearch.google.com/\footnote{http://blogsearch.google.com/}}
\item{http://smarterware.org/2877/twitalytic-alpha-preview-archiving-curating-and-threading-tweets\footnote{http://smarterware.org/2877/twitalytic-alpha-preview-archiving-curating-and-threading-tweets}}
\item{http://smarterware.org/4186/introducing-thinktank\footnote{http://smarterware.org/4186/introducing-thinktank}}
\end{itemize}
Allow one-step creation of de-duped searches on these and other sources


\noindent\rule{\textwidth}{1pt}
Back to the Project List\footnote{http://example.com/index.php?page=Project}

\end{document}
