jueves, 8 de mayo de 2014
A simple way to determine if a String could be an integer
Method 1
public final static boolean isInteger(String in)
{
char c;
int length = in.length();
boolean ret = length > 0;
int i = ret && in.charAt(0) == '-' ? 1 : 0;
for (; ret && i < length; i++)
{
c = in.charAt(i);
ret = (c >= '0' && c <= '9');
}
return ret;
}
Method 2 (modified version of method 1)
public static boolean isInteger(String in)
{
if (in != null)
{
char c;
int i = 0;
int l = in.length();
if (l > 0 && in.charAt(0) == '-')
{
i = 1;
}
if (l > i)
{
for (; i < l; i++)
{
c = in.charAt(i);
if (c < '0' || c > '9')
return false;
}
return true;
}
}
return false;
}
Method 3
static final byte[] b = { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 };
public final static boolean isInteger(String in)
{
char c;
int length = in.length();
int i = 0;
if (length > 0 && in.charAt(0) == '-')
i = 1;
if (i >= length)
{
return false;
}
for (; i < length; i++)
{
c = in.charAt(i);
if (b[c & 0xff] == 0)
return false;
}
return true;
}
I hope this information is useful.
PS. Be aware that all of these will say that very large strings (with valid big integers) are true, so if you just try to convert them to Integers, an Exception could be thrown.
domingo, 4 de mayo de 2014
Multiple column list using HTML (ul and li)
The idea is having a multicolumn list, using ul and li tags (and just a little bit of CSS).
Let's suppose you have the following data and you want them to show as a column for every category:
id name category
--------------------------
1 Antena Exterior
2 Emblema Exterior
3 Llantas Exterior
4 Luces Exterior
5 Estéreo Interior
6 Tapetes Interior
7 Encendedor Interior
8 Gato Accesorio
9 Extintor Accesorio
10 Herramientas Accesorio
11 Claxon Cofre
12 Batería Cofre
13 Filtro aire Cofre
You want them to look like this:
Exterior Interior Accesorio Cofre
--------- ---------- ------------ -----------
Antena Estéreo Gato Claxon
Emblema Tapetes Extintor Batería
Llantas Encendedor Herramientas Filtro aire
Luces
So, the HTML code could be as easy as this:
<ul style="float:left;list-style-type: none;">Exterior<hr>
<li>Antena</li>
<li>Emblema</li>
<li>Llantas</li>
<li>Luces</li>
</ul>
<ul style="float:left;list-style-type: none;">Interior<hr>
<li>Estéreo</li>
<li>Tapetes</li>
<li>Encendedor</li>
</ul>
<ul style="float:left;list-style-type: none;">Accesorio<hr>
<li>Gato</li>
<li>Extintor</li>
<li>Herramientas</li>
</ul>
<ul style="float:left;list-style-type: none;">Cofre<hr>
<li>Claxon</li>
<li>Batería</li>
<li>Filtro aire</li>
</ul>
There you have It!.
I hope this is useful for you.
martes, 1 de abril de 2014
Signing Qt5 (5.2.0) Applications in Mac OSX Mavericks
First of all let me tell you that I just basically modified one script I found on Internet (and use another one as is) and adapted it to my needs, so you just have to edit some lines in It and that's it!
What It is important to notice is that if you want to distribute your application out of the AppStore you will need a Developer ID Application certificate (not the Mac Developer -this is just for testing).
OK, let's begin...
1) Copy, paste and save to a file the following code, or download it from https://gist.github.com/kainjow/8059407 (macdeployqt_fix_frameworks.rb). There is not need to modify it.
#!/usr/bin/env ruby
# Copies missing Info.plist files for a .app's Qt frameworks installed
# from macdeployqt. Without the plists, 'codesign' fails on 10.9 with
# "bundle format unrecognized, invalid, or unsuitable".
#
# Example usage:
# ruby macdeployqt_fix_frameworks.rb /Users/me/Qt5.2.0/5.2.0/clang_64/ MyProgram.app
#
# Links:
# https://bugreports.qt-project.org/browse/QTBUG-23268
# http://stackoverflow.com/questions/19637131/sign-a-framework-for-osx-10-9
# http://qt-project.org/forums/viewthread/35312
require 'fileutils'
qtdir = ARGV.shift
dotapp = ARGV.shift
abort "Missing args." if !qtdir || !dotapp
abort "\"#{qtdir}\" invalid" if !File.exists?(qtdir) || !File.directory?(qtdir)
abort "\"#{dotapp}\" invalid" if !File.exists?(dotapp) || !File.directory?(dotapp)
frameworksDir = File.join(dotapp, 'Contents', 'Frameworks')
Dir.foreach(frameworksDir) do |framework|
next if !framework.match(/^Qt.*.framework$/)
fullPath = File.join(frameworksDir, framework)
destPlist = File.join(fullPath, 'Resources', 'Info.plist')
next if File.exists?(destPlist)
srcPlist = File.join(qtdir, 'lib', framework, 'Contents', 'Info.plist')
abort "Source plist not found: \"#{srcPlist}\"" if !File.exists?(srcPlist)
FileUtils.cp(srcPlist, destPlist)
end
2) Create a file named macdeployqt.sh (this will call macdeployqt_fix_frameworks.rb and macdeployqt ) and copy, paste and edit the following code (posted by Sarah Jane Smith on https://bugreports.qt-project.org/browse/QTBUG-23268). Modify It according to your needs (take a look at the PATHS).
# Create a temporary copy of the app for deploy & signing
# This must not be previously signed/sandboxed
# Include the .app suffix
APP_NAME=$1
QT5_CLANG=/Users/hectorsuarez/Aplicaciones/Qt5.2.0/5.2.0/clang_64
QT5_BIN=$QT5_CLANG/bin
#EXT_SIGN_CERT="Mac Developer: Hector Suarez Barenca"
EXT_SIGN_CERT="Developer ID Application: Barenca Networks"
# This will create a temporary directory
BUILD_TMP=~/tmp
if [ -d $BUID_TMP ]
then
echo
echo "###"
echo "### Cleaning directory... $BUILD_TMP/$APP_NAME ###"
echo "###"
echo
### Borrar versión previa
rm -rf $BUILD_TMP/$APP_NAME
else
mkdir -p $BUILD_TMP
fi
echo "### Copy $APP_NAME to $BUILD_TMP"
echo
### Copy the .app to a temporary location
cp -R $APP_NAME $BUILD_TMP
TMP_APP=$BUILD_TMP/$APP_NAME
QT_FMWK_VERSION="5"
QT_FMWKS="QtCore QtGui QtPrintSupport QtWidgets QtMultimedia QtMultimediaWidgets QtNetwork QtSql QtScript QtWebKitWidgets QtOpenGL QtPositioning QtQml QtQuick QtSensors QtWebKit"
echo "### Deploying Qt ${QT_FMWK_VERSION}..."
echo
$QT5_BIN/macdeployqt $TMP_APP $VERBOSE_MACDEPLOY_QT
echo "Patching Qt frameworks..."
## Set the right PATH
~/Aplicaciones/macdeployqt_fix_frameworks.rb $QT5_CLANG $TMP_APP
for FMWK in $QT_FMWKS; do
FMWK_PATH="${TMP_APP}/Contents/Frameworks/${FMWK}.framework"
mv -v "${FMWK_PATH}/Resources" "${FMWK_PATH}/Versions/${QT_FMWK_VERSION}/."
(cd "${FMWK_PATH}" && ln -s "Versions/${QT_FMWK_VERSION}/Resources" "Resources")
(cd "${FMWK_PATH}/Versions" && ln -s "${QT_FMWK_VERSION}" "Current")
perl -pi -e "s/${FMWK}_debug/${FMWK}/" "${FMWK_PATH}/Resources/Info.plist"
done
echo "Codesigning..."
for FMWK in $QT_FMWKS; do
FMWK_PATH="${TMP_APP}/Contents/Frameworks/${FMWK}.framework"
/usr/bin/codesign --verbose \
--sign "$EXT_SIGN_CERT" \
"${FMWK_PATH}/Versions/5"
done
for PLGN in $(find $TMP_APP -name "*.dylib"); do
/usr/bin/codesign --verbose \
--sign "$EXT_SIGN_CERT" \
${PLGN}
done
echo
echo "### Trying to sign $APP_NAME"
echo
/usr/bin/codesign --verify --verbose \
--sign "$EXT_SIGN_CERT" \
$TMP_APP
echo ""
echo "### Confirming \"Registered Developer\" codesiging of app"
codesign --verify --verbose=4 $TMP_APP
echo ""
echo "### Confirming codesigning app, frameworks & plugins for GateKeeper"
spctl --verbose=4 --assess --type execute $TMP_APP
3) Execute macdeployqt.sh and enjoy It!
I hope this works for you. Best regards.
PS. I tested these scripts with Qt 5.2.0
Thanks to those that take time to help others
References:
https://gist.github.com/kainjow/8059407
https://bugreports.qt-project.org/browse/QTBUG-23268
https://developer.apple.com/library/mac/documentation/IDEs/Conceptual/AppDistributionGuide/DistributingApplicationsOutside/DistributingApplicationsOutside.html
http://stackoverflow.com/questions/19637131/sign-a-framework-for-osx-10-9
http://stackoverflow.com/questions/7697508/how-do-you-codesign-framework-bundles-for-the-mac-app-store
http://www.copyquery.com/productsigned-mac-app-not-installing-in-computers-that-are-not-mine/
sábado, 16 de febrero de 2013
How to remove iPhoto faces with a shell script
1) Open a Terminal (cmd space and then type Terminal
2) Type vi
3) Copy and paste the following code:
#!/bin/bash
mdfind 'kMDItemDisplayName == "IMG_*face*.jpg"'|awk '{print "rm -f \""$0"\""}'>rmfaces
chmod 755 rmfaces
./rmfaces
rm rmfaces
echo "It's done!"
4) Press
jueves, 3 de febrero de 2011
List to Tree (using whitespaces to indent) with Groovy
| id | name | father |
| 1 | N1 | null |
| 11 | N11 | 1 |
| 12 | N12 | 1 |
| 121 | N121 | 12 |
| 122 | N122 | 12 |
| 13 | N13 | 1 |
| 131 | N131 | 13 |
| 1311 | N1311 | 131 |
| 13111 | N13111 | 1311 |
| 14 | N14 | 1 |
| 2 | N2 | null |
public class Node {
def id
def name
def father
}
public class NodePrinter {
private void printLeftPad(def source,int pad)
{
for(int i=0;i<pad;i++) print " ";
println source;
}
public int indent(List items,int index,int pad)
{
printLeftPad("${items.get(index).name}",pad);
def current= items.get(index);
int i=index+1;
for(;i<items.size();i++)
{
if( items.get(i).father==current.id )
{
printLeftPad("{",pad);
i=indent(items,i,pad+4);
printLeftPad("}",pad);
}
else
{
if( current.father==items.get(i).father )
{
printLeftPad("${items.get(i).name}",pad);
current=items.get(i);
}
else
{
return i-1;
}
}
}
return i;
}
}
def nodes=[ new Node(id:1,name:'N1',father:null),
new Node(id:11,name:'N11',father:1),
new Node(id:12,name:'N12',father:1),
new Node(id:121,name:'N121',father:12),
new Node(id:122,name:'N122',father:12),
new Node(id:13,name:'N13',father:1),
new Node(id:131,name:'N131',father:13),
new Node(id:1311,name:'N1311',father:131),
new Node(id:13111,name:'N13111',father:1311),
new Node(id:14,name:'N14',father:1),
new Node(id:2,name:'N2',father:null)
];
def printer=new NodePrinter();
printer.indent(nodes,0,4);
This will give us the following result:
N1
{
N11
N12
{
N121
N122
}
N13
{
N131
{
N1311
{
N13111
}
}
}
N14
}
N2
Enjoy it!
martes, 20 de octubre de 2009
Source code formatter library for Java
Recently I was looking for a Java Library that could be include in an applet (with no any dependencies), after looking for awhile I could not find any library (there are a few out there but all of them have dependencies with other libraries).
I found a C++ program named Artistic Style (http://astyle.sourceforge.net/) , so I decided to migrate the source code from C++ to Java, and the jastyle project arises (http://sourceforge.net/projects/jastyle/).
There are two ways in which jastyle could be used, as a library or as a console application. See how easy is to format Java source code with jastyle.
First, go to (http://sourceforge.net/projects/jastyle/) and download the lastest jastyle.jar , then choose the Java source file that you want to give format. The options will be shown if you just type:
java -jar jastyle.jar
Now let's see how It works with an unformatted java source code:
package net.barenca.test;
import java.io.BufferedInputStream;
import java.io.FileInputStream;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.util.Date;
import java.util.Random;
import oracle.jdbc.OracleDriver;
public class OracleBlobTest{
public static void main(String[] args) throws Exception
{
String filename="/home/barenca/Documents/LDAP.pdf";
FileInputStream fis = new FileInputStream(filename);
BufferedInputStream inputStream = new BufferedInputStream(fis);
int length = inputStream.available();
DriverManager.registerDriver(new OracleDriver());
String url="jdbc:oracle:thin:@192.168.1.253:1521:devdb";
Connection conn = DriverManager.getConnection(url
, "prueba",
"prueba");
String insert = "insert into test_blob(id,content)values(?,?)";
PreparedStatement pst = conn.prepareStatement(insert);
int x = new Random(new Date().getTime()).nextInt(100000);
pst.setInt(1, x);
pst.setBinaryStream(2, inputStream, length);
pst.execute();
pst.close();
conn.close();
inputStream.close();
}}
And after java -jar jastyle.jar --style=java OracleBlobTest.java this is the result:
package net.barenca.test;
import java.io.BufferedInputStream;
import java.io.FileInputStream;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.util.Date;
import java.util.Random;
import oracle.jdbc.OracleDriver;
public class OracleBlobTest {
public static void main(String[] args) throws Exception {
String filename ="/home/barenca/Documents/LDAP.pdf";
FileInputStream fis = new FileInputStream(filename);
BufferedInputStream inputStream = new BufferedInputStream(fis);
int length = inputStream.available();
DriverManager.registerDriver(new OracleDriver());
String url ="jdbc:oracle:thin:@192.168.1.253:1521:devdb";
Connection conn = DriverManager.getConnection(url
, "prueba","prueba");
String insert = "insert into test_blob(id,content)values(?,?)";
PreparedStatement pst = conn.prepareStatement(insert);
int x = new Random(new Date().getTime()).nextInt(100000);
pst.setInt(1, x);
pst.setBinaryStream(2, inputStream, length);
pst.execute();
pst.close();
conn.close();
inputStream.close();
}
}
I think is not perfect, but It helps a lot :) .
Now, as a library :
import java.io.Reader;
import java.io.FileReader;
import java.io.BufferedReader;
import net.barenca.jastyle.ASFormatter;
import net.barenca.jastyle.FormatterHelper;
public static void main(String[] args) throws Exception
{
ASFormatter formatter = new ASFormatter();
formatter.setJavaStyle();
Reader in = new BufferedReader(new FileReader("OracleBlobTest.java"));
String formatted = FormatterHelper.format(in,formatter);
// and that's it!
}
The best thing is that this library does not need any additional jar library!!!.
I hope you enjoy it!.
Best regards.
Héctor.
jueves, 15 de octubre de 2009
Mapping Windows Key (Super) in Ubuntu
Probably one of the functions that a Windows user is accustom to is the mapping of the Windows key + E (this opens the Explorer -not the Internet Explorer), this combination of key mapping is not enabled by default in Ubuntu (I have tested it in Ubuntu 9.04, XUbuntu 8.10 and 9.04).
So, let me show you how easy is to map the windows key + E in order to have the same behavior in Ubuntu as Windows does it.
First go to option menu System -->Preferences-->Keyboard and then choose the tab "Layouts" and then "Layout options", and go to the Alt/Win key behavior subtree, open it and click on the radio button Supper key is mapped to Win keys and then click on close (or accept) and click on the another close button.
Second, go to System --> Preferences --> Keyboard Shortcuts and look for the Desktop section and click on the Home folder row, now press at the same time the two keys Windows + E (like in Windows - plus symbol should not be pressed), once you have done it, the combination of keys (the shortcut) to open Nautilus is ready!, accept the change.

Now continue mapping the keys you are accustom to. I hope this short description is useful for you.
Best regards.
