You need to be logged in to post in the forums. If you do not have an account, please sign up first.
History+
This is my entry to the UserJS contest...History+
The future of history
History+ is an Opera UserJS that allows users to visualize the history of visited pages as a directed graph.
This allows for more efficient visual browsing of pages in history that are related to the current page.
The visited page data is stored through a custom lightweight Java HTTP server / persistent storage system (into an SQLite database).
The history graph is visualized with SVG using the JUNG graph library.
Download: http://files.myopera.com/d4n3/HistoryPlus/HistoryPlus.zip
History+ in action:

Please try it out and leave feedback

◇◇ UserJavascript "zz-spoof-id"! ◇◇◇ [Thanks for Finally Considering this Petition!] Composing Emails in the HTML Format in Opera
But in principle, any number of layouts could be used... I was thinking about some sort of tree layout but that has a problem with cycles and multiple parent edges...
Also an interesting concept would be to visually sort the pages by visit time, making it more like regular history, with all the benefits of a graph structure.
There could also be a UI to pick the layout etc.
So, basically there is still a lot potential in doing the graph layout, but there simply wasn't enough time
21. July 2008, 09:57:20 (edited)
History+ is not tied to a single tab, but infact also works across pages opened in new tabs. This was infact the main motivation for creating it, as I was finding open tabs that I couldn't remember why and what page I opened them from. The graph view will display all pages that were visited at any time and are connected between each other by clicked links. You can then click on any node to visit the page.
http://localhost:1337/install
The requested URL could not be retrieved
The following situations are possible causing this:
1. Cannot serve requests pointed to the proxy itself. 2. Using Browser Auto-configuration feature without enable this feature in proxy. 3. Using Browser Auto-configuration feature without download auto-configuration file onto proxy.
I have "Enable Referrer Information" checked. What should I do now?
thanks for help.
T.
Could it be that I dont have the admin rights (as I am in a company environment..?)
thanks a lot anyway..
Can you run the server from the command line and see what the output says?
java -jar HistoryPlusServer.jar
Or if you're on windows, just make a file called run.bat in the same directory the History+ server is in and put these lines in it:
java -jar HistoryPlusServer.jar pause
Then run the batch file and see what the output says...
Note to self: Add server log files to the next version
2008-07-24_152233.png
And then when I tried to access the History+ page but same error appeared.
Did Windows' firewall notification pop up at any time? You should click "Allow" if it has...
Can you access Control panel->Windows firewall? In that case, under "Exceptions", click "Add Port"->Name: "History+", Port: 1337, TCP then click "change scope" and select "My network (subnet only)". Click ok,ok,ok. Try running the server now.
Originally posted by eestlane:
atm not very practical when actually visited a lot of pages (with long titles)
Agreed. I am working on fixing that in the next version
Stay tuned, you can subscribe to this thread...Originally posted by edvakf:
I tried with "from 1337 to 1337" and "from 1337 to 80", but I still don't see History+ screen from Opera (9.52 beta).
Do you know from which port to which I should allow?
If you run the jar file from the command line, what output do you get?
In the command line, go to the dir that the HistoryPlusServer.jar is in and type: java -jar HistoryPlusServer.jar
I'll try to test this on a Mac (I know someone who has one), since I was testing this on Windows only and I can only give you "blind" advice...
But in most cases I visit Russian-language pages(one of my native language), who's title contains Cyrillic characters(windows1251, koi8-r,koi8-u, iso-8859-5, cp866 encodings). So when I decided to view history graph I saw that titles over the nodes are shown as not converted strings(I recognized utf-8 subset for Cyrillic characters). historyp.png
Can you tell how correct this situation? I tried to change page encoding. I tried to re-encode HistoryPlus.js into utf-8 and Cyrillic encodings but it no resolves problem. What to do?
PS: Sorry for my awful English.
30. July 2008, 14:44:00 (edited)

There are multiple points where the data could have gotten mangled (javascript, http request, database, http response) and i am trying to figure out where.
Oh, and can you supply some links for testing?
1. Is there exists correct way to unload your server? For administrative purposes I need periodically shutdown as much processes as possible. I failed to found something about unloading in documentation and script sources. Feature to unload server is very important for me(one of reason see question #2). It will be pretty if request like http://localhsot:1337/shutdown forces history-server to unload correctly(internal initialized shutdown process is better than external one, possible unwanted)
2. I need your advice about using your enchantment on Linux systems:
When is better to start your history-server: during system start-up or during loading XWindow system? I have doubts because of question #1.
3. How I can point where history-server must store history-database(due security reasons)?
First of all, in my defence, this was put together in two weeks

1. If you're running the server from the console, you can press any key to cancel it, otherwise you have to kill the java process
I know this is inconvenient and I am working on a full web UI for administration like you mentioned...
2. I can't give you very specific advice about this since I don't use linux much. The server basically is a java app that opens a TCP socket listener. So if you can run a Java app and open a socket listener at system start-up, you can probably start the server there.
3. The database name is hardcoded in the Java code. So for now the only option is to edit the source code and recompile. I'll add this on the todo list for the web UI.
Originally posted by d4n3:
I already deleted it.For now, you could just delete links.db in the HistoryPlus folder periodically...

Originally posted by d4n3:
TY.I'll be adding an option to limit to the depth of the graph from a starting node and auto-deleting of older links...
congrats on your userJS win

when you shared your idea with me, I thought it was going to be a huge undertaking
and you were concerned that there wasn't enought time to complete it
but you proved you could do it
hope this is only the beginning of more great scripts to come from you in the future
Originally posted by skye11:
hope this is only the beginning of more great scripts to come from you in the future
Absolutely
The sky is the limit 
PS: I'm actually working on a couple of cool new features for History+ right now (top secret for now
), so stay tuned (or subscribed
) to this forum topic... I'm aiming to get another release out before september (when exams start
)28. August 2008, 22:59:26 (edited)
Originally posted by d4n3:
I'm aiming to get another release out before september (when exams start)
Sooooo.... September's almost here and i'm about 75% done with the new version.... So it seems a proper release will have to wait until after my exams....
In the mean time, if anyone would be interested in beta-testing the development version, PM me... The new version has quite a few improvements in speed and usability (there's a whole new way of visualizing history now
), and it would probably be useful to get some feedback before the release...A new patent filed by Apple hints at user browser interface changes that could arrive with an upcoming version of the company’s Safari application. Apple aims to improve the common list view in a browsing history and suggests a graphical tree view that shows visited sites and their relationships
Looks like this script
that's exactly what i'm doing...
check it out for yourself:

History Plus Beta 2
What do i do now? I came by this idea by myself, does this mean i'll be breaking their patent?
I wouldn't worry though – Apple haven't done anything with it yet and patent owners like Apple will only go after organisations with big pockets[1]. It's the companies that only exist to file patents that you have to watch out for; but even then they too are unlikely to go after a target that's not selling their product.
Here's the full text of the patent – you'll need to register (or use BugMeNot) to get a PDF with the images (one of which shows a view of the history more like the original version of History+ than beta 2) that come attached to the patent though.
[1] Those companies in turn keep their own extensive patent portfolios so that should Apple actually try any legal action they risk retaliatory action – the software equivalent of mutual assured destruction.
MyOpera Community Optimizations — by fearphage
Scribit improved posting tools for the MyOpera Community — by xErath
Improve Weeklies Blog — by MisterE & fearphage
Before I say anything, though: this is totally awesome! There is a shit-ton of potential for fun so I hope you keep developing it.
OK, first I wanted to know - is this useful without having referrers enabled all the time? It should be possible to pass the URL of the current page to the localhost address without needing the referrer - but does the history browser thingy need it on all the time to be able to figure out where you're coming from & going, etc? (The minimum I was sort of expecting to see was a page count, but it's "undefined" atm most of the time.)
How about bouncing people to their next page via the local server? Just redirect and record the previous + next URLs. Might be a bit tricky with forms using post, and SSL, hm. How about something like, opening a tab in the background as well as continuing to process the user's request at the same time? I'm not 100% sure of the what might be possible - I should stop guessing now.
Also, I was wondering if you had any plans to have some sort of global history analysis or overview, either by reading Opera's history file directly or in conjunction. Perhaps at least some lovely juicy stats? Heh. One stat that might be interesting is length of time spent on a page... Wouldn't be accurate in a lot of places (unless you could figure out a way to only count time spent with the page actually open in the browser - now that would be an interesting trick), but it might be interesting.
Lastly, is there any way to get the button to update, maybe with like, uh, a page count or something? That would be neat. I'm a little bit afraid I'm going to add the button to a toolbar and then forget about it, I do that too often unfortunately.
Anyway. Kudos once again on such a cool toy. 10 points!
30. September 2008, 12:50:20 (edited)
Originally posted by d4n3:
holy crap!
![]()
that's exactly what i'm doing...
you got screwed (like many other innovators throughout history)
and like other creative Opera innovations, the credit will go to the copycats & plagiarizers
who would've thought it would be necessary to patent this concept - apparently they did
don't let them get away with it - why not file a complaint and a motion to contest their claim/patent
at least you have this public forum as evidence and proof of production & timestamp
30. September 2008, 14:48:01 (edited)
An HTML-version of the patent is below, a PDF-file (720KB! - with images) is there too...
US007373614.html
US007373614.pdf
Another advice would be however, to file a patent on your own -- after having thoroughly studied Apples's stuff --
circumventing Apple's claims, there are possibilities to file patents W/O any attorney at the USPTO...

The idea for such an enhanced history alone is NOT patentable, there has to be more detail for an implementation.
◇◇ UserJavascript "zz-spoof-id"! ◇◇◇ [Thanks for Finally Considering this Petition!] Composing Emails in the HTML Format in Opera
17. October 2008, 20:18:20 (edited)
Originally posted by d4n3:
What do i do now? I came by this idea by myself, does this mean i'll be breaking their patent?
You're not along in trying to re-invent the wheel. Unless you start high profiting from it without obtaining a patent, you're good.
There is always a way to amend ANY earlier patent's Claims. Preliminary Patent Draft submission is free in many countries - use it. Later however, depending on your patent attorney's experience and your own inventiveness, the added Claims may not be enough to profit from it, after royalties payed to Apple for the rest of Claims, if someone ever licenses it. Be sure, other browser vendors will try to differ their implementation as well, and you're not in a position to sue Apple or Microsoft. Your History Beta 2 looks great, and can be freely distributed to end users. Posting it here says you didn't intend to patent it - check with your country Patent Office, if its patentable after a public disclosure. But again, it's all about CLAIMS wording, details never prior disclosed. Keep working on History +, as patent concerns are all mute, web browsers commonly copy features. Don't expect a licensing crowd - companies always try to get around patents, and file own patents mostly for protection from being sued. I don't know if Opera ever files for patents, its against Open Web concept, they just keep their code closed, but keep posting Opera Lab's test browser releases, and production alphas and betas for debugging.
Opera Software is hiring now. Look at this opportunity first - based on your profile, it looks to be the goal anyway. Figure out, how upgrading Opera History to your spec will add long term to their cash flow, if you want it be implemented. Study, why they continuously upgraded History & Search features - it's unusual for Opera, there is money in it for sure. Look at small size server independent solution. Your work is good proof of your abilities, but don't drag with job application, you can finish it later. Vacant sits are sold out fast - you could get out of lack tomorrow.
If they ever threaten you in any way, just do like the piratebay guy, which is basically ignoring them.
http://my.opera.com/xErath/blog/
17. October 2008, 13:55:27 (edited)
Originally posted by arnyq:
Apple may ask Opera Software to stop distributing from their website the infringing script which enchances their browser
They can't ask that. That's the same as asking ISPs from blocking access to my.opera.com to download the script.
http://my.opera.com/xErath/blog/
17. October 2008, 20:24:47 (edited)
You can write your own Cease-and-Desist Letter to Apple using this Template.
Originally posted by d4n3:
What do i do now?
May I suggest you to consider the following script improvements:
- adding Thumbs to each History Record. The Thumbs should enlarge when hovering over, or pop-up when Shift-Hovering a link, or show up in the right window;
- adding Number of Visits stats (total and for a selected from dropdown menu time period). It would help in updating Most Visited Speed Dial page, linked to History +.
- non-Java based version to run on older PCs and small devices. You can think about cross-platform implementation after it's perfected for a most used platform;
- Parallel Products & Unification (set your own standard - quite a popular move with Opera
): History usage is limited to 2-to-3 day period and non-frequent. Bookmarks are often used months or years. Can you think of a similar approach to Bookmark Manager + ? Based on Java Script, SQLite, similar visual UI, filters, Thumbs, link visit stats, with one of sorting options being Sort by Booking History Sequence (as opposed to Sort by Created Date within each filter)? You'll help Opera with this a lot, as updating Bookmark Manager for them is much less profitable than porting browser to new devices.
Congrats! You have a Wish List growing, meaning your product is getting known and popular.

About the patent issue, I'm now pretty sure that Apple can't do much about History+ since it's a different implementation...
And I don't think I'll go around making patents of my own since I never meant to commercialize this...
As for the other questions...
Originally posted by pgl:
No, since this is the way clicked links are stored, on the target page of the link... (So it actually works even if you open a page in new tab etc.)is this useful without having referrers enabled all the time?
But, I was planning on storing clicks made on the source page of the link, so I could also grab the context of the link - the text on and surrounding the link (so you could see the context you were reading when you clicked it)
Originally posted by pgl:
Page count isn't yet implemented, but it's on TODO...(The minimum I was sort of expecting to see was a page count, but it's "undefined" atm most of the time.)
Originally posted by pgl:
hmmm... interesting idea... sort of a replacement for the forward and back button... ill look into it...How about bouncing people to their next page via the local server?
Originally posted by pgl:
Also, I was wondering if you had any plans to have some sort of global history analysis or overview, either by reading Opera's history file directly or in conjunction. Perhaps at least some lovely juicy stats?
Yes!
I have some big plans on that 
Originally posted by pgl:
Lastly, is there any way to get the button to update, maybe with like, uh, a page count or something?
Sadly, no. There is no way to programatically change Opera's UI. That's what all the fuss about giving us an API is about...
Originally posted by arnyq:
adding Thumbs to each History Record. The Thumbs should enlarge when hovering over
I thought about thumbnails, but it's a bit of a problem technically. As far as i see there are only three ways of doing this, none of which i like very much...
1. Draw the thumbnail in javascript, on a canvas, and export to db (quite complex performance and programming wise, since i'd basically have to recreate each page element programatically on a canvas)
2. Use a internet service like webshots (privacy issues, won't work on private sites, password protected sites etc.)
3. Generate the image on the Java backend server (very complex and intensive, even more so than from javascript, since i'd have to parse and render the HTML + won't work for password protected sites etc. because the server can't access opera's cookies)
Originally posted by arnyq:
The only other platform I can think of is python, which i don't know very well.
- non-Java based version to run on older PCs and small devices. You can think about cross-platform implementation after it's perfected for a most used platform;
The whole java-backend is a workaround anyway, since i originally wanted to do this with google gears (but I apparently misunderstod the current level of support in opera, which is zero), and actually reproduces some functionality that gears offers...
So the moment Opera starts supporting Google Gears, I'll port the whole thing to a single UserJS file... and problem solved

Originally posted by arnyq:
Can you think of a similar approach to Bookmark Manager + ?
Yes, ideally i'd like to have the firefox bookmarking system (opera's really sucks IMO), but i don't think i can afford to start another big pet project right now... I'll certainly keep it in mind

PS:
I'll have to put History+ on the sidetrack until the end of Opera's X-Widgets contest...
I just got a killer idea for a widget that I think could be useful to a lot of people, so I'll probably be devoting most of my time to build widgets this month
23. October 2008, 13:24:20 (edited)
Originally posted by d4n3:
Opera already makes a Thumb of every open Tab, shown when howering Tabs and in Speed Dial. I wonder, if they are stored temporarely in a file? Is there a way to capture those to your DB? And then use Opera Zoom function to show enlarged Thumbs when hovering over. Actually, I might think, Opera converts all raster images to SVG Basic upon load using fast low quality converter, which then allow to implement better page Zoom. So, grab these SVGs, if you can, they are just small text files and could be added to a Link html record, similar to Comments.I thought about thumbnails, but it's a bit of a problem technically.
Originally posted by d4n3:
There are simple examples.Draw the thumbnail in javascript, on a canvas, and export to db (quite complex...)
Originally posted by d4n3:
Opera already implemented some HTML5 functionality. Is there something similar to Gears functions you can use? Shout e-mails to these article authors for advice, referencing this thread.i originally wanted to do this with google gears
Originally posted by d4n3:
Just make sure, the browser performance isn't hurt.I'll port the whole thing to a single UserJS file
Originally posted by d4n3:
I'm wondering if its possible to develop a PGP/GnuPG text encryption kind of Widget to work with M2?I'll probably be devoting most of my time to build widgets this month
Originally posted by arnyq:
I tried snooping around the opera profile files but the only thumbnails i found on disk were the speed dial thumbnails, so that doesn't help much...I wonder, if they are stored temporarely in a file? Is there a way to capture those to your DB?
The page thumbnails, I think, are created in memory, since they change a lot anyway...
Originally posted by arnyq:
I'm pretty sure opera uses some sort of bitmap resizing algorithm (bicubic, trilinear etc.) to zoom images / make thumbnails, not SVG.... Actually, I might think, Opera converts all raster images to SVG Basic upon load using fast low quality converter, which then allow to implement better page Zoom. So, grab these SVGs, if you can, they are just small text files and could be added to a Link html record, similar to Comments.
But if they were on disk, I could read them directly from Java...
Originally posted by arnyq:
Yes, using canvas itself is simple, it's duplicating all HTML style effects and drawing the page elements to scale that i'm more concerned about... I think at best, you could only get a rough approximation of the site in the thumbnail... Maybe I'll explore this a little...There are simple examples.
Originally posted by arnyq:
Just make sure, the browser performance isn't hurt.
Opera's JS performance is pretty good and heavy processing can be ofloaded to Google Gears, so it can run in the background.
Also, convenience and usability (you only have to copy a single UserJS file) far outweigh the possible performance hit with javascript.
Originally posted by arnyq:
The HTML5 stuff is only for presentation and can't help me... Specifically what I need from Google gears is persistent storage (a local database accessible from javascript) and possibly background processing (ofload heavy processing to google gears). This is what I implemented with my java backend.Opera already implemented some HTML5 functionality. Is there something similar to Gears functions you can use?
Originally posted by arnyq:
I guess it would be possible to make some sort of widget with an input form where you could paste your text in to have it encrypted (I don't know how complex the actual PGP algorithm is or if there's already a JS library for it)... But total integration with M2 is pretty much impossible without an open API...I'm wondering if its possible to develop a PGP/GnuPG text encryption kind of Widget to work with M2?
23. October 2008, 22:57:33 (edited)
Originally posted by d4n3:
I wonder if File I/O functions in Opera can help a bit giving unforeseen lack of extra "Gears"? Not processing wise though. Gears probably incorporate Chrome's superfast JS processor, but has higher than Opera system reqs, and might not provide 'parallel' speed benefit on older systems.What I need from Google Gears is persistent storage
Originally posted by d4n3:
Can XMLHttpRequest Object be of use in retreaving Link Records and site bitmap Thumbs from your DB (say to show in Tooltip upon link mouse hover, or in your History+ right pan)? Can you think of using Server-Sent Events to update your History Graph as new sites are added?The HTML5 stuff is only for presentation
Originally posted by d4n3:
HaneWIN OpenPGP Encryption would be an example, with interesting browser based JS Encryption Service. Some pages on this Opera site estimate, PGP encryption integration with M2 is a high complexity task. So, Widget contest wise, it may be a good idea.I don't know how complex the actual PGP algorithm is or if there's already a JS library for it
How about adapting History+ to that?
I'd like it, especially because I don't like using Java ...
blog (en/de) | opera:gpu | houmpäidsch (de) | Extension: cleanPages (en)