package test; import java.net.InetAddress; import java.net.NetworkInterface; import java.util.Enumeration; public class IPAddrUtil { public static void main(String[] args) throws Throwable { System.out.println(getLocalhostAddress()); } public static InetAddress getLocalhostAddress() throws Throwable { // NOTE: prefer the LAN address over loopback address InetAddress addr = getLocalAreaNetworkAddress(); if (addr == null) { addr = getLoopbackAddress(); } return addr; } public static InetAddress getLocalAreaNetworkAddress() throws Throwable { for (Enumeration<NetworkInterface> ifaces = NetworkInterface.getNetworkInterfaces(); ifaces.hasMoreElements();) { NetworkInterface iface = ifaces.nextElement(); if (!iface.isLoopback()) { for (Enumeration<InetAddress> addresses = iface.getInetAddresses(); addresses.hasMoreElements();) { InetAddress address = addresses.nextElement(); if (address.isSiteLocalAddress()) { return address; } } } } return null; } public static InetAddress getLoopbackAddress() throws Throwable { InetAddress v4Addr = null; InetAddress v6Addr = null; for (Enumeration<NetworkInterface> ifaces = NetworkInterface.getNetworkInterfaces(); ifaces.hasMoreElements();) { NetworkInterface iface = ifaces.nextElement(); if (iface.isLoopback()) { for (Enumeration<InetAddress> addresses = iface.getInetAddresses(); addresses.hasMoreElements();) { InetAddress address = addresses.nextElement(); if (address.isLoopbackAddress()) { String hostAddress = address.getHostAddress(); if (hostAddress.indexOf('.') >= 0) { v4Addr = address; } if (hostAddress.indexOf(':') >= 0) { v6Addr = address; } } } } } // NOTE: prefer v4 address over v6 address if (v4Addr != null) { return v4Addr; } else if (v6Addr != null) { return v6Addr; } else { return null; } } }
Search This Blog
Java 6: get localhost address reliablely
Ant in Eclipse: javac1.8 class not found
If you are running ANT in Eclipse using Java 8. The error
Class not found: javac1.8could happen. Because Apache Ant versions less than 1.9.0 - are not compatible with Java 8. The solution could be
- Option 1: Install Java 7 and set JAVA_HOME for eclipse to use Java 7.
- Option 2: Add compiler or build.compiler attribute to the javac task in your ant build.xml:
<target name="compile"> <javac srcdir="src" destdir="build/classes" source="1.6" target="1.6" compiler="javac1.7" > <classpath> <fileset dir="lib"> <include name="*.jar" /> </fileset> </classpath> </javac> </target>
see also
Mac OS X: convert binary .plist file to xml format
- convert from binary to xml format:
plutil -convert xml1 ~/.MacOSX/environment.plist
- convert from xml to binary format:
plutil -convert binary1 ~/.MacOSX/environment.plist
Mac OS X: install git without xcode
git is included in xcode. but if you just want git, you do not have to install the xcode. You can download and install git for mac.
- Download from http://git-scm.com/download/mac
- Mount the .dmg file and install the .pkg package inside the image.
- After installation you need to prepend /usr/local/git/bin to /etc/paths file and remove /etc/paths.d/git:
sudo sed -i -e '1s/^/\/usr\/local\/git\/bin\'$'\n/g' /etc/paths; rm /etc/paths.d/git
- Set PATH environment variables for non-terminal applications:
/usr/local/git/bin/setup\ git\ PATH\ for\ non-terminal\ programs.sh
Mac OS X: set PATH for non-terminal applications using User Session Environment Variables in ~/.MacOSX/environment.plist
- Read the PATH variable from ~/.MacOSX/environment.plist
defaults read ~/.MacOSX/environment.plist PATH
- Append to the PATH variable in ~/.MacOSX/environment.plist
defaults write ~/.MacOSX/environment.plist PATH $(defaults read ~/.MacOSX/environment.plist PATH):/usr/local/git/bin
see also
Mac OS X: set PATH environment variable
- To set the PATH variable for all the users, edit /etc/paths or add new file to /etc/paths.d
Note: to prepend to the paths, you have to edit /etc/paths because it is loaded first then the entries in /etc/paths.d - To set the PATH variable for a user, edit $HOME/.bash_profile and enter the line,e.g.:
export PATH=$PATH:/usr/local/git/bin
Note: to make sure some commands override others, you may need to prepend it:export PATH=/usr/local/git/bin:$PATH
see also
shell script: insert line at the beginning of a text file
On linux:
On Mac OS, the above does NOT work. You have to use the following instead:
sed -i -e '1s/^/Here is the first line.\n&/g' file.txt
On Mac OS, the above does NOT work. You have to use the following instead:
sed -i -e '1s/^/Here is the first line.\'$'\n/g' file.txt
see also
Eclipse on Mac OS X: set the Java runtime used by eclipse by editting eclipse.ini
Edit eclipse.ini:
vi /Applications/eclipse/Eclipse.app/Contents/MacOS/eclipse.iniinsert the following lines before -vmargs:
-vm /Library/Java/JavaVirtualMachines/jdk1.7.0_55.jdk/Contents/Home/bin/java -vmargs
see also
Uninstall a application installed from a package .pkg file
If you install a application from .pkg file, it will be recorded into the /Library/Receipts/InstallHistory.plist.
Open the file and search for the entry for the corresponding package, for example, I installed a package called Chef, open /Library/Receipts/InstallHistory.plist, you can find the entry:
<dict>
<key>date</key>
<date>2014-04-25T05:28:12Z</date>
<key>displayName</key>
<string>Chef</string>
<key>displayVersion</key>
<string></string>
<key>packageIdentifiers</key>
<array>
<string>com.getchef.pkg.chef</string>
</array>
<key>processName</key>
<string>installer</string>
</dict>
com.getchef.pkg.chef is the bom file name in /private/var/db/receipts/com.getchef.pkg.chef.bom, run the following command:
lsbom -fls /private/var/db/receipts/com.getchef.pkg.chef.bom
see also
uninstall chef-client
- On Ubuntu/Debian Linux:
dpkg --list | grep chef
sudo dpkg -P chef
- On RedHat/CentOS/Fedora Linux:
rpm -qa *chef*
sudo yum remove <chef-packages>
- On Mac OS X:
sudo rm -fr /opt/chef
sudo rm -f /usr/bin/chef-* /usr/bin/knife /usr/bin/ohai /usr/bin/shef
Python: Code completion in pydev
Code Completion
Type hinting with docstrings/comments
New on PyDev 2.8.0
It's possible to provide hints for code-completion with docstrings by commenting types with the Sphinx/Epydoc format.Below are some examples of how to provide type-hints.
Return type with Sphinx
class MyClass:
def method(self):
':rtype unittest.TestCase'
Parameter type with Sphinx
class MyClass:
def method(self, a):
':type a: TestCase'
#Note that just the class name is accepted, but in this case,
#it'll search for a TestCase class in the whole workspace
Parameter type with Sphinx inline
class MyClass:
def method(self, a):
':param TestCase a:'
Local variable with Sphinx
class MyClass:
def method(self, lst):
#Can be on the same line
for a in lst: #: :type a: GUITest
a.;
Local variable with Sphinx
class MyClass:
def method(self, lst):
#Or on the line before
#: :type a: GUITest
for a in lst:
a.;
Local variable with Sphinx
class MyClass:
def method(self, lst):
#If commented as a docstring must be on the
#line after
for a in lst:
': :type a: GUITest'
a.;
Return type with Epydoc
class MyClass:
def method(self):
'@rtype unittest.TestCase'
Parameter type with Epydoc
class MyClass:
def method(self, a):
'@type a: TestCase'
#Note that just the class name is accepted, but in this case,
#it'll search for a TestCase class in the whole workspace
Install Microsoft Consolas font on Mac OS X
- Download the Open XML File Format Converter for Mac.
- Double click the disk image if it wasn’t automatically mounted. You will see an Open XML File Format Converter meta package (.mpkg).
- Right click (or Control-click) the meta package and choose “Show Package Contents”.
- In the Finder window that opens, click “Contents”, then “Packages”.
- Double click “OpenXML_all_fonts.pkg”, which will run the installer.
Python: equivalent to Java toString()
In Java, overrides toString() method in the your class can change the textual representation of the object. The equivalent in Python is __str__ and __repr__. The important differences are:
- the goal of __repr__ is to be unambiguous
- the goal of __str__ is to be human-readable.
- str(object) calls the object's __str__ method
- repr(object) calls the object's __repr__ method
- by default, if __repr__ is defined and __str__ is not, calls to __str__ will be redirected to __repr__
- __repr__: representation of python object usually eval will convert it back to that object
- __str__: is whatever you think is that object in text form
- str(list) calls the list elements' _repr_ methods. Therefore, to make a list of objects human-readable, you need to override __repr__, or use list comprehension like:
[str(elem) for elem in list]
..
see also
Python: module file name conflicts with the package name
I have a python module file named xml.py, in the module
When executing the file, it raises the following error:
import xml.etree.ElementTree as ET
... ...
According the stackoverflow post, it was caused by the moudle file name xml.py, rename the xml.py to something else resolved the issue.
ImportError: No module named etree.ElementTree
Python: ElementTree XML element to string
import xml.etree.ElementTree as ET
# element is an xml.etree.ElementTree.Element object
xmlstr = ET.tostring(element, encoding='utf8', method='xml')
See also
Python: parse xml using ElementTree
- parse from a file:
import xml.etree.ElementTree as ET
tree = ET.parse('/home/wilson/my.xml')
root = tree.getroot() - parse from a string:
import xml.etree.ElementTree as ET
root = ET.fromstring('1')
see also
Python: class method vs static method
According to stackoverflow:
class A:
def object_m(self,x):
print "executing object_m(%s,%s)"%(self,x)
@classmethod
def class_m(cls,x):
print "executing class_m(%s,%s)"%(cls,x)
@staticmethod
def static_m(x):
print "executing static_m(%s)"%x
A staticmethod is a method that knows nothing about the class or instance it was called on. It just gets the arguments that were passed, no implicit first argument. It is basically useless in Python -- you can just use a module function instead of a staticmethod.
A classmethod, on the other hand, is a method that gets passed the class it was called on, or the class of the instance it was called on, as first argument. This is useful when you want the method to be a factory for the class: since it gets the actual class it was called on as first argument, you can always instantiate the right class, even when subclasses are involved.
Python: check argument type
- for objects:
def f(arg):
if isinstance(arg, ClassA):
print('A')
elif isintance(arg, ClassB):
print('B')
elif issubclass(arg, ClassC):
print('subclass of C')
else:
print("D") - for built-in types:
def f(arg):
if type(arg) is str:
print "str"
elif type(arg) is int:
print "int"
elif type(arg) is dict:
print "dict"
else:
print "unsupported"
Python: get the sub-elements of a xml element
According to Python XML ElementTree API,
- get all sub-elements(descendants):
all_descendants = list(element.iter())
- get direct sub-elements(children):
children = list(element)
Python: iterate over dictionary
for name in dict.keys():
print(name)
print(dict[name])
values = [ dict[name] for name in dict.keys() ]
Python: list comprehension
- To transform a list to another:
list2 = [ unicode(e.strip()) for e in list1 ] - To transform a list to another conditionally:
list2 = [ unicode(e.strip()) if e is not None else '' for e in list1 ]
Install and uninstall Oracle JDK 8 on CentOS 6
- Uninstall JDK 7:
- Find the installed rpm package:
sudo rpm -qa | grep jdk | grep fcs
it should return the package name, likejdk-1.7.0_51-fcs.x86_64
- Remove the package:
sudo rpm -e -1.7.0_51-fcs
- Find the installed rpm package:
- Install JDK 8:
- Download the JDK RPM package from Oracle
- Install the RPM package:
sudo rpm -Uvh jdk-8u5-linux-x64.rpm
- Set up alternatives:
sudo alternatives --install /usr/bin/java java /usr/java/latest/jre/bin/java 200000 sudo alternatives --install /usr/bin/javaws javaws /usr/java/latest/jre/bin/javaws 200000 sudo alternatives --install /usr/lib64/mozilla/plugins/libjavaplugin.so libjavaplugin.so.x86_64 /usr/java/latest/jre/lib/amd64/libnpjp2.so 200000 sudo alternatives --install /usr/bin/javac javac /usr/java/latest/bin/javac 200000 sudo alternatives --install /usr/bin/jar jar /usr/java/latest/bin/jar 200000
Install consolas font on Linux
#!/bin/bash cd /tmp # download wget http://download.microsoft.com/download/E/6/7/E675FFFC-2A6D-4AB0-B3EB-27C9F8C8F696/PowerPointViewer.exe # extract cabextract -L -F ppviewer.cab PowerPointViewer.exe; cabextract -L -F "CONSOLA*.TTF" ppviewer.cab # install sudo mkdir /usr/share/fonts/windows sudo cp /tmp/consola*.ttf /usr/share/fonts/windows/ cd /usr/share/fonts/windows sudo mkfontdir sudo mkfontscale sudo fc-cache -fv # clean up rm /tmp/consola*.ttf rm /tmp/PowerPointViewer.exe rm /tmp/ppviewer.cab
Check if your ubuntu linux is affected by openssl heart bleed bug
The heart bleed bug affects openssl 1.0.1 built before 7 April 2014.
- Check your openssl version and build time using the following command:
openssl version -a
If the version is 1.0.1 and build time is before 7 April 2014 (exclude 7 April 2014), your openssl is affected. - To patch your openssl, simply run the following commands to upgrade your openssl:
sudo apt-get update sudo apt-get install openssl libssl1.0.0
Make a bootable USB drive for OS X Mavericks installation
- Download OS X Mavericks from app store. It will be installed to
/Applications/Install OS X Mavericks.app
- Format your USB drive(You need at least 8GB capacity.) as
Mac OS Extended (Journaled)
. It will be labeled as Untitled by default. - Run the following command in Terminal to clone Mavericks to the USB drive:
sudo /Applications/Install\ OS\ X\ Mavericks.app/Contents/Resources/createinstallmedia --volume /Volumes/Untitled --applicationpath /Applications/Install\ OS\ X\ Mavericks.app --nointeraction
It will take up to 90 minutes to complete. In the Terminal window, you should see the progress information like below:Erasing Disk: 0%... 10%... 20%... 100%... Copying installer files to disk... Copy complete. Making disk bootable... Copying boot files... Copy complete. Done.
头虱的清理
上周收到儿子学校的一封信,说是班里发现有孩子长头虱(head lice)。所以让所有家长检查自己孩子。
这里是澳洲卫生部门网站关于头虱的检查和清理办法。
http://www.health.vic.gov.au/headlice/
这里是澳洲卫生部门网站关于头虱的检查和清理办法。
http://www.health.vic.gov.au/headlice/
Subscribe to:
Posts (Atom)