| 2013-06 | 12,990 / 21,346 est. | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| 2013-05 | 30,314 | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| 2013-04 | 23,924 | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| 2013-03 | 18,805 | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| 2013-02 | 17,657 | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| 2013-01 | 18,186 | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| 2012-12 | 15,401 | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| 2012-11 | 16,015 | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| 2012-10 | 15,172 | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| 2012-09 | 13,304 | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| 2012-08 | 18,738 | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| 2012-07 | 12,757 | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| 2012-06 | 9,563 | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| 2012-05 | 13,813 | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| 2012-04 | 16,421 | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| 2012-03 | 6,953 | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| 2012-02 | 5,038 | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
2013-06-16: (Neal)
Had fun today with CSS and JavaScript. The status page now has tabs. I've also opened the usage graph to people other than admins. Finally, I found out how to embed a Twitter search.
Odd problem: Firefox displays the usage graph correctly. Chrome and Safari don't hide white lines. No idea why... (If you know how to fix it, please let me know!)
2013-06-11: (Neal)
Implemented file locking so two web requests don't try to generate the same analysis image at the same time.
2013-06-04: (Neal)
Just fixed some very rare corner-case errors. These errors only happen with corrupted files that would never display. (Even if your picture is corrupted, my code should not crash.)
2013-05-26: (Neal)
Just found and fixed a bad recursive HTTP 301 redirect. When I taint-check URLs, I was hitting a loop where %20 became a space became %20. Thanks to the banana people for your upload that made me notice this.
I have added a section to the FAQ for people who repeatedly state that this site identifies 'fake' pictures. This site only performs analysis and shows results. It does not interpret the results. Any conclusion, such as 'real' or 'fake', are interpretations of results, and not the actual results from this site. Unfortunately, I keep seeing people on Twitter, Reddit, and even in the media use the word 'fake' rather than 'altered', 'enhanced', 'modified', 'unmodified', etc.
To put this clearly: if you say a picture is 'fake', then people will debate the definition of fake. If you say an image is 'enhanced' or 'digitally altered', then the definition is better defined. I rarely use the word 'fake'.
I have also updated the ELA tutorial so it is clearer that rainbowing is not exclusive to Adobe products. The tutorial has always said that, but since it was only two sentences, people seemed to miss it. I've added more descriptive text to emphasize this point. Adobe products are a primary cause of rainbowing, but it is not the exclusive cause.
2013-05-16: (Neal)
Just fixed URL's that have uri-encoding so they decode and work. Looking over the error log, this seems to be a growing problem. URI encoding is where you see things like "id%3Dfe25..." rather than "id=fe25..." (the %3D encodes an equal sign). It usually comes from someone who posts a link to a forum or pastes a link into email.
There are inherent security risks to servers that blindly decode and use content. For this solution, I use HTTP redirects to send the users to the correct URL. This prevents server-side exploitation from hostile uri encoding.
Behind the scenes, I've gotten much closer to enabling the auto-ban porn filter. :-)
Well, that was exciting. Even though ELA is a pretty lightweight algorithm, Reddit is currently swamping the server. The system load reached 149.71 before I managed to get things under control. (On a normal day, the load hovers around 0.40 and 3.0 is a high load.)
With the way the server is configured, uploads are expensive due to the initial analysis, while serving pictures is generally low-impact. I have added in code to disable uploads whenever the system load becomes too high. In general, this should only happen during Slashdot events and Reddit storms.
Finally got tired of the really dark background, flat logo, and right-angle edges. Still tweaking the color scheme -- at least it is less dark. But this already looks better on mobile devices. (Feedback and suggestions are welcome!)
2013-03-22: (Neal)
Added javascript code to track when users leave a page. This discloses when you left, but not where you went. It is used for page-view metrics (how long did a user spend on a page).
Cool! Someone uploaded an Apple iPhone PNG. Apple uses a proprietary and incompatible PNG format. Standard web browsers won't view it, libpng doesn't recognize it as a valid PNG, and my own PNG library just rendered an empty image with the proper dimensions. I've modified this system to properly parse and render this PNG variant.
2013-02-27: (Neal)
Lots of minor changes that had been queuing up. Many of them are behind-the-scenes tweaks. The most overt change is the hover-text over the analysis options is back! (Looks great on Firefox, good enough on Chrome. Does IE even support it?)
2013-02-16: (Neal)
Revised the Firefox plugin so it works with Firefox 18.x and later. Thanks Kyle!
Fixed inverted problem with some CMYK images. Fixed rare problem with JPEG exclusion.
Fixed a bug that prevented the JPEG library from processing some JPEG images. This bug was introduced on 2013-01-30 when more corner case corrections were implemented. It only impacted JPEGs that fail to adhere to the JPEG Standard regarding the order of component definitions (a very small percentage of images).
Changed how the analyzer selections display (from radio buttons to a listbox). The problem was that some browser dimensions would make the text wrap -- separating the choice from the radio button. The new solution uses a listbox, which does not wrap.
Added comments to the generated PNG files. They now say that the image was created by FotoForensics and they include the image ID number. I've had too many instances of people asking where an analysis image came from. By including the ID in the picture, I'm effectively telling myself "it came from here". These comments are only added to images generated by FotoForensics and are not added to the original uploaded picture.
Changed JPEG loader to handle more corner-case corruptions. More pictures with APP corruptions should load properly.
Updated the image processor to better
recognize and intelligently handle corrupt images. Previously, corrupt
images would either partially display or outright fail. Now more of them
will partially display and all get logged.
The scheduled maintenance had one small hiccup (network configuration problem), but otherwise went painlessly. Everything is up and running now and those small drops in connectivity should be gone.
In order to improve the server's performance, we are changing hosting providers. This means physically unplugging the computer and moving it to a new hosting service before getting everything back up and running.
The current plan is to move the server on December 28. If things go well, the server will be offline for less than an hour. If not, then it might be down for a few hours.
When it comes back up, it will have all the same data, the same look, and the same hostname. Only the network address (IP address) will be different.
As we get closer to the moving date, I'll update this entry and let everyone know the expected times when this service will be going offline.
Update: We're going to take the server down in the morning. The admins believe it will take 2-4 hours to move the equipment and get everything up and running again. Expect it to go offline around 9 or 10am MST (that's 11am EST and 4pm GMT).
2012-11-24: (Neal)
ISP was getting 7% packet loss yesterday, with some periods of higher loss. This morning it is getting 1% packet loss. Grrrr....
Modified Auto-Ban to prompt the user. This lets them know that they are about to get banned. "Are you sure you want to continue?" If they continue, then they are immediately banned. (Who would be stupid enough to continue? Believe me -- some people really want to see their porn.)
ISP network problems (out of my control) today. The network was slow in the morning, then got better. It went down for about 20 minutes this evening. Hopefully they have things under control again.
Following another instance of 4chan users repeatedly uploading porn to this site, I have enabled auto-ban. If users upload known-prohibited content, then they will be automatically banned. For the majority of users who access this site, there will be no noticeable change. Only people who ignore the terms of service and upload pornography, nudity, or sexually explicit content will notice that they are now instantly banned.
Changing JavaScript so it no longer pre-caches analysis results. This reduces the load on the server and greatly simplifies the JavaScript, but does introduce a small delay when first loading results in the browser.
Fixed race condition where file was partially written when a second thread tried to retrieve it.
2012-10-10: (Neal)
Updated the FAQ: Fixed a few spelling and grammar issues and added a contact for reporting server problems.
2012-10-09: (Neal)
Word-smithing the FAQ and tutorials, working on formatting, lots of behind-the-scenes updates and maintenance.
FotoForensics had the 100,000th unique upload today. I released the "JPEG %" analyzer and tutorial for estimating the JPEG quality from the last save.
2012-09-24: (Neal)
Found another inverted image corner case. Fixed.
2012-09-23: (Neal)
Finally got around to making the color scheme adjustable. (Gray on gray was getting on my nerves.)
Rearranged the FAQ so all of the ELA stuff is in one area.
Made a quick script to copy changes from the testbed to the production system. This way, I can screw things up very quickly I can easily move updates to production.
GoDaddy was unavailable for about 6 hours today. Millions of sites that use GoDaddy for hosting, email, or DNS were impacted. This site uses GoDaddy for DNS, so many people were unable to access the site. (The server was still running, but some people could not resolve the domain to the network address, so the server could not be found.)
I added more meta data to the output and updated the meta tutorial for the "File" meta data block. (Technically, I finally found out how to make ExifTool not display system information such as the file's name on this server, the directory, or file permissions -- since they are unrelated to the file's contents.)
Major server software upgrade to "version 1.0". Not much changed on the front-end (user side), but significant changes to the back-end. User accounts, administrator access, more security checks, and the ability to dynamically enable/disable/modify settings without editing PHP code. (And administrators have a WYSIWYG for editing this status info!)
From the user side ("visitor" since there is no login):