Tumgik
#vogon
melded-galaxy · 5 months
Text
Battle of the dickheads
20 notes · View notes
Photo
Tumblr media
Vogon Poetry by Johnathan Burton and Douglas Adams
87 notes · View notes
mr-craig · 2 months
Text
Tumblr media
Oh freddled gruntbuggly…
8 notes · View notes
tap-tap-tap-im-in · 5 months
Text
Vogon Media Server v0.43a
So I decided I did want to deal with the PDF problem.
I didn't resolve the large memory footprint problem yet, but I think today's work puts me closer to a solution. I've written a new custom PDF reader on top of the PDF.js library from Mozilla. This reader is much more simple than the full one built into Firefox browsers, but it utilizes the same underlying rendering libraries so it should be relatively accurate (for desktop users). The big benefit this brings is that it's a match for the existing CBZ reader controls and behavior, unifying the application and bringing in additional convenience features like history tracking and auto link to next issue/book when you reach the end of the current one.
The history tracking on the PDFs is a big win, in my opinion, as I have a lot of comics in PDF form that I can now throw into series and read.
Word of warning. PDFs bigger than a few MB can completely overload mobile browsers, resulting in poor rendering with completely missing elements, or a full browser crash. I'm betting the limit has a lot to do with your device's RAM, but I don't have enough familiarity to know for sure. These limitations are almost the same as the limits for the Mozilla written reader, so I think it has more to do with storing that much binary data in a browser session than how I am navigating around their APIs.
As far as addressing that problem, I suspect that if I can get TCPDF to read the meta data (i.e. the number of pages), I can use the library to write single page PDF files to memory and serve those instead of the full file. I'm already serving the PDF as a base64 encoded binary glob rather than from the file system directly. It doesn't solve the problem of in-document links, but since I provide the full Mozilla reader as a backup (accessible by clicking the new "Switch Reader" button), you can always swap readers if you need that.
As noted earlier today, the install script is still not working correctly so unless you have a working install already you'll have to wait until I get my VMs set up to be able to test and fix that. Good news on that front, the new media server builds much much faster than the old PI, so fast iteration should be very doable.
But, if you want to look at the code: https://github.com/stephentkennedy/vogon_media_server
6 notes · View notes
nerds-yearbook · 1 year
Text
After a successful radio series, then book series, The Hitchhiker's Guide to the Galaxy made the jump to television on January 5th, 1981. Most of the principle cast of the radio series kept their same roles - Simon Jones (Arthur Dent), Peter Jones (the Book), Mark Wing-Davey (Zaphod Beeblebrox), and Stephen Moore (Marven the Paranoid Android) - but Ford Prefect was recast to David Dixon as the producer didn't consider Geoffery McGivern weird enough looking and Trillian was recast to Sandra Dickenson due to Susan Sheridan being unavailable. The show also kept the same theme, but with a new arangement. The first episode followed the introduction of both the radio series and book series, with Arthur Dent trying to prevent his house from being knocked down only to find out his friend was an alien and the Earth was about to be destroyed to make a Galatic Bypass. ("Episode 1", The Hitchhiker's Guide to the Galaxy, TV, Event)
Tumblr media
39 notes · View notes
rieindiegames · 8 months
Text
Tumblr media
8 notes · View notes
solosergiohd · 10 months
Text
Aliens in 2005
Tumblr media
12 notes · View notes
Tumblr media
4 notes · View notes
lord-myk · 1 year
Photo
Tumblr media Tumblr media Tumblr media Tumblr media Tumblr media Tumblr media Tumblr media Tumblr media Tumblr media Tumblr media
Batch #4. 41. Unicorn 42. Vogon (From The Hitchhiker's Guide to the Galaxy) 43. Kobold 44. Alien 45. Rodan 46. Dopey lake monster 47. Kirby 48. Dragon Quest Slime 49. Purson (from the Ars Goetia) 50. Perverto (from many comics I have done, most recently this one)                                
2 notes · View notes
berenixium · 1 year
Text
Tumblr media
AI & Human Collab Art: "Vogon"
2 notes · View notes
Text
Tumblr media
Vogon poetry in German.
2 notes · View notes
djinnhatescold · 1 year
Text
Amaurot is Vogon, but
Fashion
0 notes
mikropenisz · 1 year
Text
Oh zerfrettelter Grunzwanzling dein Harngedränge ist für mich Wie Schnatterfleck auf Bienenstich. Grupp, ich beschwöre dich mein punzig Turteldrom.
Und drängel reifig mich mit krinklen Bindelwördeln Denn sonst werd ich dich rändern in deine Gobberwarzen Mit meinem Börgelkranze, wart's nur ab!
0 notes
shadowblade8192 · 7 months
Text
Tumblr media
107 notes · View notes
tap-tap-tap-im-in · 1 year
Text
I've been thinking about it lately so I wanted to blog about how Vogon handles requests.
If you have no interest in web frameworks feel free to skip this one.
Vogon as a core framework is basically nothing. It's a few functions, some starter classes, and a codified file structure. The main idea was for it to be hugely flexible without getting in the way of whatever project it was applied to.
This means that it has no static routes. By design there are no specific php URIs built into the code. And I don't mean that in the WordPress way where there are no static routes, except for the login url (and some other items). There are no static routes. If the framework is used as intended, the only PHP file your request is routed to is the main index.php file of the vogon folder structure.
What that means is that when you enter a url for a vogon instance you'll enter in something like this:
localhost/vogon/ebooks/view/53066?file=/upload/ebooks/user/hack2e_03.book/hack2e_03.book - user.pdf
If you know your URL structure we can go ahead and break this request down a little
[protocol] - http:// (implied because no protocol is specified) [hostname] - localhost (this is an alias for the local ip which is usually 127.0.0.1, or you are requesting something running on your own computer) [uri] - /vogon/ebooks/view/53066 [GET Variables] - ?file=/upload/ebooks/user/hack2e_03.book/hack2e_03.book - user.pdf
When vogon is installed, it analyzes the URI of the request that accessed the installer (though this is user overridable), this allows the framework to be aware of when it is in a subdirectory rather than an exclusive url. That is the case with this request, so we can break our URI into two sections:
[Vogon Root URI] - /vogon [Vogon Route] - /ebooks/view/53066
Before we break things down further we should talk about what's happening in the framework itself. The protocol, hostname, and Vogon Root URI tell the web server to send a request to Vogon application. The web server is then configured to route that request to the index.php file inside the web root. The exception for this is direct access to static files. This enables us to load static assets like JavaScript or CSS files. It does also mean that standalone PHP files can be accessed, but Vogon controller model and view files are all dependant on being loaded through their helper functions and will only error, if anything at all, if loaded directly. An optional security file can be prepended to ensure no unauthorized php execution occurs, but that involves some intensive configuration by the user, and sometimes results in false positives.
Getting back on topic. The request is routed to the index.php file. The index then looks for a new install flag file in the main directory. If this file exists then the install process has not been completed and the installer is loaded.
However, if that file does not exist, the system will load the bootstrap.php file from the /main/ directory, which is where 99% of the Vogon code lives.
The bootstrap loads any classes in the /main/class/autoload/ folder, establishes a database connection if one is configured, and loads our functions from the /main/functions.php file. If user sessions are enabled by the user extension, the bootstrap will attempt to establish an existing user session, if it can't a login screen is shown.
This login screen will be shown to any request, this is useful because unlike other systems with a static login route, you post your login to the same uri you requested originally, so no complicated redirects have to be done.
So far we haven't done any route parsing, and everything done by the system is the same for every request. But now we must calculate what other files need to be loaded, so we load /main/router.php
I think I'd actually like to move this to an extension so it's borders are a little better defined and it can be replaced/configured a little more easily (and so the system can include additional routers to choose from).
The media server version of Vogon is the most mature, so let's discuss that router.
In this router, the router only handles the first step of the process, the endpoint. In our example url that would be '/ebooks'. The router takes the endpoint it's been given and compares that against a database `routes` table. The routes table links controllers to endpoints. These controllers can live in the /main/controller/ folder or in a /main/ext/[ext-name]/controller/ folder. The system will attempt to load the defined controller, if no controller is found it will load the default 404 controller (404 is the http status code for "Not Found").
Then the controller is able to take over routing however it would like. This route is currently configured to use the /main/ext/ebooks extension, and loads controller.main.php from within that extension.
Vogon has a built in function called get_slug_part(); that allows parts of the URI to be accessed as if they were an array. The router uses slug[0] to determine the endpoint, so most controllers look first at slug[1] to determine what action to take. Remember, we are looking at this part of the URI /view/53066
The ebooks controller.main.php uses a switch case based on slug[1]. In this case slug[1] (view), tells the controller that we are viewing an ebook. The ebooks extension then loads controller.comic_book_reader.php.
controller.comic_book_reader.php gets slug[2], checks to ensure that it is numeric (and thus presumably a database ID), and then it attempts to look up that document by database ID. It compares the type of that document (if anything successfully comes back) against a subset of types it knows how to handle, and if it can it loads that document into a view and you are served what you requested.
In this particular instance, that view is the JS PDF library developed by Mozilla, that has been configured to read the filename of the PDF to load from the "file" GET variable.
That's it. That's a full request handled by Vogon. This is the point where output is actually returned to the user (if they have a user session).
Here's the full url again: localhost/vogon/ebooks/view/53066?file=/upload/ebooks/user/hack2e_03.book/hack2e_03.book - user.pdf
And here's a flow of documents (this is not complete and does not include classes, inline includes, ect.):
/index.php -> /main/bootstrap.php -> /main/router.php -> /main/ext/ebooks/controller/controller.main.php -> /main/ext/ebooks/controller/controller.comic_book_reader.php -> /main/ext/ebooks/view/view.js_pdf_viewer.php
4 notes · View notes
rieindiegames · 1 year
Text
Tumblr media
10 notes · View notes