Tuesday, November 24, 2015

JAMon - nice and simple java monitor for measuring code performance in Java

General information

Official site: http://jamonapi.sourceforge.net/
A SourceForge project

Maven dependency

Place in pom.xml:
    <dependencies>
        <dependency>
            <groupId>com.jamonapi</groupId>
            <artifactId>jamon</artifactId>
            <version>2.81</version>
        </dependency>
    </dependencies>

Example 1

Code:

import com.jamonapi.*;


public class MonitorTest {
    public static void main(String[] args) throws Exception {
        Monitor mon=null;
        for (int i=1; i<=10; i++) {
            mon = MonitorFactory.start("myFirstMonitor");
            Thread.sleep(100+i);
            mon.stop();
        }
        System.out.println(mon);  // toString() method called
    }
}
Output:

Example 2

Tuesday, November 10, 2015

Размишления за DDR паметта - DDR1, DDR2, DDR3, DDR4

Базова честота и ефективна честота

DDR паметта (ddr1, ddr2, ddr3, ddr4) има базова честота и ефективна честота. Ефективната честота е двойно по-голяма от базовата. При ddr2-800, базовата е 400MHz. Това са теоретично 3200 МБ/с. Но при DDR2-800 се постигат теоретични 6400 МБ/с.

От къде идва удвояването? 

Thursday, November 5, 2015

Java: Poor performance of Files.newDirectoryStream() with wildcards

Here are results of comparison of getting single result of Files.newDirectoryStream() and File.exists().

Wildcards pattern I used is "prefix_prefix_prefix____?.tmp". Results are almost the same when calling Files.newDirectoryStream() with string argument with no wildcard (direct match).

Test results 1:

measure exists speed in loop 1000 times - BEGIN
measure exists speed in loop 1000 times - END
Elapsed: 5 ms

Test results 2:

measure wildcards match speed in loop 1000 times - BEGIN
measure wildcards match speed in loop 1000 times - END
Elapsed: 80590 ms

Test environment:

Windows 7 system
NTFS system
Folder with 90 000 files (zero length)
Java 8

dir approach

I looped this MSDOS command for 1000 times to check performance of dir with wildcards:

dir prefix_prefix_prefix____*.tmp

I tested it in loop with:
FOR /L %i IN (1,1,1000) DO @dir prefix_prefix_prefix____*.tmp > nul

It finished in about 1000ms. I suppose this time is spend mainly in calling DIR command by command interpreter.

Conclusion

Files.newDirectoryStream() has absolutely no performance optimizations when working with wildcards.

Relative information

File.list also has poor performance

Source code of newDirectoryStream

    public static DirectoryStream<Path> newDirectoryStream(Path dir, String glob)
        throws IOException
    {
        // avoid creating a matcher if all entries are required.
        if (glob.equals("*"))
            return newDirectoryStream(dir);

        // create a matcher and return a filter that uses it.
        FileSystem fs = dir.getFileSystem();
        final PathMatcher matcher = fs.getPathMatcher("glob:" + glob);
        DirectoryStream.Filter<Path> filter = new DirectoryStream.Filter<Path>() {
            @Override
            public boolean accept(Path entry)  {
                return matcher.matches(entry.getFileName());
            }
        };
        return fs.provider().newDirectoryStream(dir, filter);
    }

Wednesday, September 9, 2015

Hidden AVG buttons - How to stay on AVG Free edition

AVG is great antivirus software. It has free and paid editions. But Free version often offers you an update to the paid one. You have to read notifications of the program, but look for the "hidden" Decline button.

Here are some example of this hidden buttons of AVG:



Good luck.

And the free version is good enough for most users.

Sunday, August 16, 2015

Redirect http page to https in .htaccess file

You could use this code to redirect a request to HTTPS in apache:

RewriteEngine On
RewriteCond %{HTTPS} off
RewriteRule .* https://%{HTTP_HOST}%{REQUEST_URI} [L,R=301]

Tuesday, March 10, 2015

Програмистки поговорки

Програмистки хумор:
- Бърза програма - срам за програмиста.
- Трай, потребителю, за работещо приложение.
- Да би мирно седяло, не би exception видяло!
- Бъг година храни.
- Програмистът работата си мени, но хигиената - никога!
- Когато клиентът не отива при програмиста, програмистът му пуска вирус.
- Дваж copy-рай, веднъж paste-вай.
- Бъг бъг избива.
- Програмистът не пада по-далеч от кръчмата.
- Който прави бъг другиму, сам влиза в безкраен цикъл.
- На сисадмин вируси ще продава!
- На програмата паметта все й е малко.
- Бъг по бъг - програма прави.
- Не търси в кода смисъл!
- За тийм лидера приказват, а пък той под масата.
- Барабар junior със senior-ите.
- Признат бъг - половин бъг.
- Не дърпай сисадмина за опашката!
- Ако е тийм лидер, да е рошав!
- Шеф високо, клиент далеко.

- На чужд код и 100 рефакторинга са малко.

Други забавни смешки може да намерите тук.