Technical Notes

My online notepad

  • Social


  • Support

    Donate towards my web hosting bill!

Archive for July, 2013

Cisco ASA: “Not enough space on device” error fixed

Posted by Anton Khitrenovich on July 11, 2013

Cisco Logo Several hours ago I took the ASA device in my lab to the routine software upgrade. I started with the fresh ASDM image upload, but it failed with the error message “Not enough space on device”. The reason sounds obvious, but it is not so trivial – how can you clean up some space on the physical appliance?

It appears that ASA does not clean up old software packages after their installation via ASDM. After several upgrades the flash memory of the device will be full of unused files, with no room to upload new ones. This is the time for manual cleanup. Read the rest of this entry »

Posted in HOWTO, Troubleshooting | Tagged: | 2 Comments »

Spring MVC: return view or send error from the same handler

Posted by Anton Khitrenovich on July 4, 2013

There are many Spring MVC primers on the web that explains Spring MVC basics to some extent. Example of request handler that creates some model data and returns view name is definitely one of the basics and appears in almost each and every primer. Many of those primers also mention HttpServletResponse.sendError() call as a way to produce custom HTTP error codes. However, I did not find any comprehensive example that combines the two and demonstrates the typical REST flow – respond with data object in some cases and send “204 No Content” in others.

So, here comes the example:

	@RequestMapping( value = "/get/{name}", method = RequestMethod.GET )
	public ModelAndView get( @PathVariable( "name" ) String name, HttpServletResponse resp ) throws IOException
	{
		// Check if we have value
		Object value = map.get( name );
		if ( value == null )
		{
			resp.sendError( HttpServletResponse.SC_NO_CONTENT );
			return null; // no further processing needed
		}
		
		// Continue to the view
		ModelAndView mv = new ModelAndView( "show-value" );
		mv.addObject( "value", value );
		return mv;
	}

Note that it is OK to return null in line 9 – at this point there is enough data in the response object to generate valid output.

Posted in HOWTO | Tagged: , , , | Leave a Comment »

How to compare PDF documents (for free)

Posted by Anton Khitrenovich on July 3, 2013

Yesterday I found myself trying to compare multipage PDF documents with code samples. You can imagine how painful and frustrating it was, so I went googling to check what can help me in this task. It appears that there are free alternatives to obvious, but really expensive solution of purchasing Adobe Acrobat license.

My favorite solution for now is WinMerge (yes, it can compare files), accompanied with the xdocdiff plugin that enhances WinMerge with the understanding of the “inner works” of several popular document types.

Here is the installation and configuration procedure:

  1. Download and install WinMerge according to the instructions. Start WinMerge to make sure it is installed correctly.
  2. Download xdocdiff plugin and extract it to some local folder.
  3. Move extracted files according to the instructions in the xdocdiff README file. Ignore the line that says to enable “Automatic Unpacking” – it is still disabled.
  4. Go to “Plugins” → “List…” and select “Enable plugins” checkbox, then click “OK”.
  5. Now you can choose “Plugins” → “Automatic Unpacking” (it is already enabled).

For those who are not familiar with WinMerge – go to “File” → “Open…” and select to files to compare.

Hat tip to this SuperUser answer, that helped me to figure out the correct installation procedure.

Posted in HOWTO | Tagged: | 1 Comment »