Resetting JavaScript RegExp [2010-05-25]
I tried to re-use regular expression in my script, but I couldn't find a way to reset their state. Now, I have it:
var RE = new RegExp('blah blah blah', 'gi');
for (idx in tests) {
RE.lastIndex = 0; // reset
if RE.test(tests[idx])
console.log(tests[idx]);
}
But I do some test:
n_re = 100;
var re_strs = [];
for (var i=0; i<n_re; i++)
re_strs.push("(([a-zA-Z][a-zA-Z0-9+\\-.]*):)(//((([a-zA-Z0-9\\-._~%!$&\\'()*+,;=:]+)@)?([a-zA-Z0-9\\-._~%!$&\\'()*+,;]+)(:(\\d+))?))?([/a-zA-Z0-9\\-._~%!$&\\'()*+,;=:@]*)(\\?([/a-zA-Z0-9\\-._~%!$&\\'()*+,;=:@?]*))?(#([/a-zA-Z0-9\\-._~%!$&\\'()*+,;=:@?]*))?");
console.log('Number of re:', n_re);
n_test = 100;
var test_urls = [];
for (var j=0; j<n_test; j++)
test_urls.push('http://example.com/');
console.log('Number of url:', n_test);
console.log('Number of total test:', n_re * n_test);
console.time('no precompilation');
for (var i in re_strs) {
for (var j in test_urls) {
var re = new RegExp(re_strs[i], 'gi');
re.test(test_urls[j]);
}
}
console.timeEnd('no precompilation');
console.time('precompilation');
console.time('precompilation: compilation time');
var res = [];
for (var i in re_strs)
res.push(new RegExp(re_strs[i], 'gi'));
console.timeEnd('precompilation: compilation time');
for (var i in re_strs) {
for (var j in test_urls) {
res[i].lastIndex = 0;
res[i].test(test_urls[j]);
}
}
console.timeEnd('precompilation');
Number of re: 100
Number of url: 100
Number of total test: 10000
no precompilation: 1271ms
precompilation: compilation time: 3ms
precompilation: 20ms
It's not really worth precompiling if you don't have huge amount of tests in a short time.
Google Groups Picture [2010-05-25]
The background transparency issue of group picture, I always got the picture with white background even I was sure the original image was with transparent background. I had a group picture with transparency but others (made with GIMP) are not. Then, I recalled that special one was created with Inkscape, so I imported the other's picture and exported from Inkscape, that worked.
I used identify -verbose
(from ImageMagick) to figure out what's the differences. Here is the diff:
--- logo_solid.txt 2010-05-25 01:54:14.000000000 +0800
+++ logo_trans.txt 2010-05-25 01:54:01.000000000 +0800
@@ -33,15 +33,9 @@
2400: ( 0, 0, 0,255) #000000 black
200: ( 0, 0, 0,127) #0000007F rgba(0,0,0,0.498039)
3800: (255,255,255, 0) #FFFFFF00 rgba(255,255,255,0)
- Rendering intent: Saturation
- Gamma: 0.45455
- Chromaticity:
- red primary: (0.64,0.33)
- green primary: (0.3,0.6)
- blue primary: (0.15,0.06)
- white point: (0.3127,0.329)
+ Rendering intent: Undefined
Interlace: None
- Background color: rgba(1,1,1,1)
+ Background color: white
Border color: rgba(223,223,223,1)
Matte color: grey74
Transparent color: none
After a few tries in GIMP save dialog, I found out the problem was with Save Background Color, uncheck resolved the issue. Here is the new diff:
--- logo_solid.txt 2010-05-25 01:54:14.000000000 +0800
+++ logo_solid_fix.txt 2010-05-25 02:16:28.000000000 +0800
@@ -41,7 +41,7 @@
blue primary: (0.15,0.06)
white point: (0.3127,0.329)
Interlace: None
- Background color: rgba(1,1,1,1)
+ Background color: white
Border color: rgba(223,223,223,1)
Matte color: grey74
Transparent color: none
The change was on Background color from rgba(1, 1, 1, 1)
to white
, I didn't understand how this could resolve the issue, but I am not complaining.
Emerging sys-fs/encfs [2010-05-26]
I got building error about Boost, this comment saved me. I had two Boost versions:
$ eselect boost list
Available boost versions:
[1] boost-1.35/default
[2] boost-1.41/default *
After unemerged Boost 1.35, EncFS emerged successfully. I installed it for this.
Synaptics Touchpad button only mode
My external mouse's left button has been killing me for a while, it likes to think I want to double click most of time. I don't have battery to power up another Bluetooh mouse, and wired mouse works really better. So I think why not to use the buttons on touchpad, but the problem is I can find a simple way to disable the sensing area. Finally, I came up with a trick:
synclient MaxSpeed=0
# Also need to disable all scrolls, e.g.
synclient VertTwoFingerScroll=0 HorizTwoFingerScroll=0
You can still keep those scrolling methods, they are more easier to use than mousewheel to me.