Google launches a new programming language
Mashable has the details on "Go" here, including an embedded Google Tech Talk video. Looks very interesting.Perforce plugin for NetBeans 6.x
Last night I installed NetBeans to explore its potential use as a PHP IDE. So far I'm impressed. The only major struggle came when I tried to get NetBeans working with Perforce this evening.
Gregg Wonderly was kind enough to develop the Perforce plugin I'm using. The plugin provides basic add/edit/submit/diff functionality, which is really all I need at the moment. It's tremendously easy to install via NetBeans' plugin architecture.
The gist of the problem is that, at least on OS X Snow Leopard, NetBeans (or the Java runtime) doesn't appear to have knowledge of environment variables. Nothing from /etc/profile or ~/.profile is visible to the Runtime.getRuntime().exec() call that the Perforce plugin performs. NetBeans also doesn't appear to have any place to specify environment variables.
The workaround that I'm currently using is to launch NetBeans from a bash prompt with:
/Applications/NetBeans/NetBeans\ 6.7.1.app/Contents/MacOS/netbeans
The plugin now works, since my path and Perforce environment variables are visible to the exec() call.
If anyone with more familiarity with Java or NetBeans has any other ideas, please share them! Barring any other solutions, I'll just use Platypus to create an app stub that automatically launches the shell and then NetBeans.
2009-09-17 UPDATE: NetBeans is a very impressive PHP IDE. Its command completion, PHPDoc and PHPUnit support, along with excellent debugging once xdebug is installed, is top notch. I highly recommend checking it out if you're in the market for a PHP development environment.
In-Memory Zip in Python
I recently noticed that there is a for-pay component available to zip files in-memory with Python. Considering this is something that should be free, I threw together the following code. It has only gone through very basic testing, so if anyone finds any errors, let me know and I'll update this.
import zipfile
import StringIO
class InMemoryZip(object):
def __init__(self):
# Create the in-memory file-like object
self.in_memory_zip = StringIO.StringIO()
def append(self, filename_in_zip, file_contents):
'''Appends a file with name filename_in_zip and contents of
file_contents to the in-memory zip.'''
# Get a handle to the in-memory zip in append mode
zf = zipfile.ZipFile(self.in_memory_zip, "a", zipfile.ZIP_DEFLATED, False)
# Write the file to the in-memory zip
zf.writestr(filename_in_zip, file_contents)
# Mark the files as having been created on Windows so that
# Unix permissions are not inferred as 0000
for zfile in zf.filelist:
zfile.create_system = 0
return self
def read(self):
'''Returns a string with the contents of the in-memory zip.'''
self.in_memory_zip.seek(0)
return self.in_memory_zip.read()
def writetofile(self, filename):
'''Writes the in-memory zip to a file.'''
f = file(filename, "w")
f.write(self.read())
f.close()
if __name__ == "__main__":
# Run a test
imz = InMemoryZip()
imz.append("test.txt", "Another test").append("test2.txt", "Still another")
imz.writetofile("test.zip")
In-Memory Zip in Python
I recently noticed that there is a for-pay component available to zip files in-memory with Python. Considering this is something that should be free, I threw together the following code. It has only gone through very basic testing, so if anyone finds any errors, let me know and I'll update this.
import zipfile
import StringIO
class InMemoryZip(object):
def __init__(self):
# Create the in-memory file-like object
self.in_memory_zip = StringIO.StringIO()
def append(self, filename_in_zip, file_contents):
'''Appends a file with name filename_in_zip and contents of
file_contents to the in-memory zip.'''
# Get a handle to the in-memory zip in append mode
zf = zipfile.ZipFile(self.in_memory_zip, "a", zipfile.ZIP_DEFLATED, False)
# Write the file to the in-memory zip
zf.writestr(filename_in_zip, file_contents)
# Mark the files as having been created on Windows so that
# Unix permissions are not inferred as 0000
for zfile in zf.filelist:
zfile.create_system = 0
return self
def read(self):
'''Returns a string with the contents of the in-memory zip.'''
self.in_memory_zip.seek(0)
return self.in_memory_zip.read()
def writetofile(self, filename):
'''Writes the in-memory zip to a file.'''
f = file(filename, "w")
f.write(self.read())
f.close()
if __name__ == "__main__":
# Run a test
imz = InMemoryZip()
imz.append("test.txt", "Another test").append("test2.txt", "Still another")
imz.writetofile("test.zip")