My First Post      My Facebook Profile      My MeOnShow Profile      W3LC Facebook Page      Learners Consortium Group      Job Portal      Shopping @Yeyhi.com









Friday, May 29, 2020

PMD error Avoid printStackTrace use logger call instead

Suppose you have a simple Try catch block in Java eg:

try {
  testsReader.readTestConfigurationJson();
  testsReader.readDeclarativeTestJson();

} catch (IOException e) {
  e.printStackTrace();
}


Running Java PMD during compilation will give you following error:

<pmd xmlns="http://pmd.sourceforge.net/report/2.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://pmd.sourceforge.net/report/2.0.0 http://pmd.sourceforge.net/report_2_0_0.xsd" version="6.8.0" timestamp="2020-05-29T14:37:13.048"> <file name="/Users/mfaiz/<path>/platform/integration/test/framework/controller/StartController.java"> <violation beginline="71" endline="71" begincolumn="7" endcolumn="25" rule="AvoidPrintStackTrace" ruleset="Best Practices"package="<path>.integration.test.framework.controller" class="StartController" method="start" externalInfoUrl="https://pmd.github.io/pmd-6.8.0/pmd_rules_java_bestpractices.html#avoidprintstacktrace" priority="3"> Avoid printStackTrace(); use a logger call instead. </violation> </file> </pmd>

This is basically a violation of AvoidPrintStackTrace rule.


But, if you remove the e.printStacktrace() then you will get following pmd error:

<pmd xmlns="http://pmd.sourceforge.net/report/2.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://pmd.sourceforge.net/report/2.0.0 http://pmd.sourceforge.net/report_2_0_0.xsd" version="6.8.0" timestamp="2020-05-29T14:31:59.579"> <file name="/Users/mfaiz/<path>/integration/test/framework/controller/StartController.java"> <violation beginline="70" endline="72" begincolumn="7" endcolumn="5" rule="EmptyCatchBlock" ruleset="Error Prone" package="<path>test.framework.controller"class="StartController" method="start" externalInfoUrl="https://pmd.github.io/pmd-6.8.0/pmd_rules_java_errorprone.html#emptycatchblock" priority="3">Avoid empty catch blocks</violation> </file> </pmd>



Solution:

Hence, the best solution is to use a logger.
It means you should use logging framework like logback or log4j and instead of printing exceptions directly:

e.printStackTrace();
    you should log them using this frameworks' API:

Eg:  log.error("Ops!", e);
Logging frameworks give you a lot of flexibility, e.g. you can choose whether you want to log to console or file - or maybe skip some messages if you find them no longer relevant in some environment.


But if you are in initial stages of development and want to postpone logging at this time then you can do the following trick.

Think!!!!
I will update the trick in next post :)

Thursday, May 28, 2020

Avoid Throwing Raw Exception Types rule in Checkstyle

See a sample violation in java code:

com.puppycrawl.tools.checkstyle.checks.AbstractTypeAwareCheck:299 Rule:AvoidThrowingRawExceptionTypes Priority:1 Avoid throwing raw exception types..
com.puppycrawl.tools.checkstyle.checks.ClassResolver:179 Rule:AvoidThrowingRawExceptionTypes Priority:1 Avoid throwing raw exception types..
com.puppycrawl.tools.checkstyle.checks.blocks.RightCurlyCheck:270 Rule:AvoidThrowingRawExceptionTypes Priority:1 Avoid throwing raw exception types..
com.puppycrawl.tools.checkstyle.checks.imports.CustomImportOrderCheck:321 Rule:AvoidThrowingRawExceptionTypes Priority:1 Avoid throwing raw exception types..
com.puppycrawl.tools.checkstyle.checks.imports.CustomImportOrderCheck:685 Rule:AvoidThrowingRawExceptionTypes Priority:1 Avoid throwing raw exception types..
com.puppycrawl.tools.checkstyle.checks.indentation.HandlerFactory:68 Rule:AvoidThrowingRawExceptionTypes Priority:1 Avoid throwing raw exception types..
com.puppycrawl.tools.checkstyle.checks.indentation.HandlerFactory:169 Rule:AvoidThrowingRawExceptionTypes Priority:1 Avoid throwing raw exception types..
com.puppycrawl.tools.checkstyle.checks.indentation.HandlerFactory:174 Rule:AvoidThrowingRawExceptionTypes Priority:1 Avoid throwing raw exception types..
com.puppycrawl.tools.checkstyle.checks.indentation.HandlerFactory:177 Rule:AvoidThrowingRawExceptionTypes Priority:1 Avoid throwing raw exception types..


So there comes a question what do we want to use instead of RuntimeException? Is private exception with descriptive name what went wrong good approach for you? Or we should create package with exceptions to choose from? I'll try to use standard JDK exceptions where possible.
It's also possible to create RuntimeCheckstyleException, but I don't think it is good idea.

To be specific we might also want to know what do we want to use instead of RuntimeException?
That is very controversial question. As demand for more specific type of Exception is clear , especially when we have a lot of exception types in our disposal (http://docs.oracle.com/javase/7/docs/api/java/lang/RuntimeException.html?is-external=true) even in standard JDK.

But some time where is no need to be specific and exception is signal to stop processing. Details in message is good enough - it is very good practice to keep message informative, exception type will allow only in creation additional logic but that is contradict with "ExceptionAsFlowControl".


We need to work on these validations if it comes. Consider a little redesign of your code.

Assigning an Object to null is a code smell. Consider refactoring.

Suppose You get following NullAssignment violation PMD error:



<pmd xmlns="http://pmd.sourceforge.net/report/2.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://pmd.sourceforge.net/report/2.0.0 http://pmd.sourceforge.net/report_2_0_0.xsd" version="6.8.0" timestamp="2020-05-29T15:00:32.203"> <file name="/Users/mfaiz/<path>/www/seva/platform/integration/test/framework/controller/StartController.java"> <violation beginline="61" endline="61" begincolumn="21" endcolumn="24" rule="NullAssignment" ruleset="Error Prone" package="<path>integration.test.framework.controller" class="StartController" method="start" externalInfoUrl="https://pmd.github.io/pmd-6.8.0/pmd_rules_java_errorprone.html#nullassignment" priority="3"> Assigning an Object to null is a code smell. Consider refactoring. </violation>



Issue:
Setting a variable to null just removes a reference to the object. it does not change the actual object.If you need to clean up, you most likely need to do actions to the object referenced by your variable instead.


Another easy solution:

Just set your variable to final.

For instance, if there is the following code, SONAR will report as a code smell:

private Object obj = null;
However, if you just add final, it can be resolved.

private final Object obj = null;

Wednesday, May 13, 2020

How to update git password on terminal: Command line utility to reset github password / access credentials

On macOS, you can use

git config --global credential.helper osxkeychain

A username and password prompt will appear on your next Git action (pull, clone, push, etc.).
Eg: If you do git clone: gttps://mfaiz@www.repository.git .

As soon as you press Enter key, you will be prompted for a password.
You can use the updated password here. And, you will be able to access and password also gets updated automatically!


For Windows, it's the same command with a different argument:

git config --global credential.helper wincred


Isn't this simple :)
Cheers.

Monday, May 4, 2020

Simple Ways to Get the Size of Directories and files in Linux


  • Check Disk Space with the Commands du and df - Linux
  • How to find size of directory in linux
  • How do I get the size of a directory on the command line
  • Linux Check Disk Space Command To View System
  • display the size and other stats of a file/directory or a filesystem.
  • How to Get the Size of a Directory in Linux | Linuxizelinuxize.com › post › system Linux and Unix du command tutorial with examples


To answer these questions, I published an article in 2013. Since then it attained nearly half a million views. After 7 years, i find myself prompted to add some more details on it in relation to latest developments around this. So, please have all your above answers here:


Linux (and Typically all UNIX based or UNIX alike systems including AIX, Solaris, MAC or CentOS) offer two commands for checking out free disk space.


1. Linux "df" command :

Report file system disk space usage. That is, it shows information about the file system on which each FILE resides, or all file systems by default.


Syntax:  df [OPTION]... [FILE]...

Mandatory arguments to long options are mandatory for short options too.

  -a, --all             include dummy file systems
  -B, --block-size=SIZE  use SIZE-byte blocks
  -h, --human-readable  print sizes in human readable format (e.g., 1K 234M 2G)
  -H, --si              likewise, but use powers of 1000 not 1024
  -i, --inodes          list inode information instead of block usage
  -k                    like --block-size=1K
  -l, --local           limit listing to local file systems
      --no-sync         do not invoke sync before getting usage info (default)
  -P, --portability     use the POSIX output format
      --sync            invoke sync before getting usage info
  -t, --type=TYPE       limit listing to file systems of type TYPE
  -T, --print-type      print file system type
  -x, --exclude-type=TYPE   limit listing to file systems not of type TYPE
  -v                    (ignored)
      --help     display this help and exit
      --version  output version information and exit
SIZE may be (or may be an integer optionally followed by) one of following:
kB 1000, K 1024, MB 1000*1000, M 1024*1024, and so on for G, T, P, E, Z, Y.

EG. I am in a directory. But "df" command has nothing to deal with that. It outputs current OVERALL status of the system and its partitions.


 



2. Linux "du" command :


Estimate file space usage. That is, it summarize disk usage of each FILE, recursively for directories.


Syntax: du [OPTION]... [FILE]...

Mandatory arguments to long options are mandatory for short options too.

  -a, --all             write counts for all files, not just directories
--apparent-size   print apparent sizes, rather than disk usage; although
                          the apparent size is usually smaller, it may be
                          larger due to holes in (`sparse') files, internal
                          fragmentation, indirect blocks, and the like
  -B, --block-size=SIZE  use SIZE-byte blocks
  -b, --bytes           equivalent to `--apparent-size --block-size=1'
  -c, --total           produce a grand total
  -D, --dereference-args  dereference only symlinks that are listed on the
                          command line
      --files0-from=F   summarize disk usage of the NUL-terminated file
                          names specified in file F
  -H                    like --si, but also evokes a warning; will soon
                          change to be equivalent to --dereference-args (-D)
  -h, --human-readable  print sizes in human readable format (e.g., 1K 234M 2G)
      --si              like -h, but use powers of 1000 not 1024
  -k                    like --block-size=1K
  -l, --count-links     count sizes many times if hard linked
  -m                    like --block-size=1M
  -L, --dereference     dereference all symbolic links
  -P, --no-dereference  don't follow any symbolic links (this is the default)
  -0, --null            end each output line with 0 byte rather than newline
  -S, --separate-dirs   do not include size of subdirectories
  -s, --summarize       display only a total for each argument
  -x, --one-file-system  skip directories on different file systems
  -X FILE, --exclude-from=FILE  Exclude files that match any pattern in FILE.
      --exclude=PATTERN  Exclude files that match PATTERN.
      --max-depth=N     print the total for a directory (or file, with --all)
                          only if it is N or fewer levels below the command
                          line argument;  --max-depth=0 is the same as
                          --summarize
      --time            show time of the last modification of any file in the
                          directory, or any of its subdirectories
      --time=WORD       show time as WORD instead of modification time:
                          atime, access, use, ctime or status
      --time-style=STYLE  show times using style STYLE:
                          full-iso, long-iso, iso, +FORMAT
                          FORMAT is interpreted like `date'
      --help     display this help and exit
      --version  output version information and exit

SIZE may be (or may be an integer optionally followed by) one of following:
kB 1000, K 1024, MB 1000*1000, M 1024*1024, and so on for G, T, P, E, Z, Y.


Eg. I am in a directory. The "du" command tells about that directory. For eg. the following picture directly outputs the total size of that folder.




Just to add more:


Remember 3 important commands when you are sitting on a linux, solaris, AIX, FreeBSD, or Mac Box [Huh, enuff. Just remember Unix :)  ]


1. df

df command can get how much space is occupied and  how much available space.

You can give a device or mount point as an argument, and df report data only for the filesystem physically residing on that device. For example, the following command provides information only for the partition /dev/sda:
$ df /dev/sda
$ df -h /dev/sdc1
$ df /data/


2. du

du is the abbreviation of “disk usage”, this command will progressively into each subdirectory


Also, we can use the du command to look at the file size:

du anwar.txt
Remember, when du reports file sizes in blocks, the size it uses depends on several factors. You can specify which block size it should use on the command line. If you don’t force du to use a particular block size, it follows a set of rules to decide which one to use.

First, it checks the following environment variables:

DU_BLOCK_SIZE
BLOCK_SIZE
BLOCKSIZE
If any of these exist, the block size is set, and du stops checking. If none are set, du defaults to a block size of 1,024 bytes. Unless, that is, an environment variable called POSIXLY_CORRECT is set. If that’s the case, du defaults to a block size of 512 bytes.

So, how do we find out which one is in use? You can check each environment variable to work it out, but there’s a quicker way. Let’s compare the results to the block size the file system uses instead.

To discover the block size the file system uses, we’ll use the tune2fs program. We’ll then use the -l option, pipe the output through grep, and then print lines that contain the word “Block.”

In this example, we’ll look at the file system on the first partition of the first hard drive, sda1, and we’ll need to use sudo:

sudo tune2fs -l /dev/sda1 | grep Block


3. fdisk

fdisk can be used to  manage disk partitions. One can do tasks like create new partition or delete an existing partition



There is yet another tool/ command that you can use:

btrfs fi df /device/ – Show disk space usage information for a btrfs based mount point/file system.



Hope this acts like a quick guide to men and women trying to play with Linux and other UNIX alike systems.

Original post link: https://www.w3lc.com/2013/05/checking-file-system-directory-size-in.html

Cheers :)


Friday, May 1, 2020

Creating new folders in GitHub repository via the browser

If you look into the Github repository online you will see that there is no direct method to create a folder. You can create a file or even upload it directly from the browser, but there seems to be no way to create a directory.
However, I have found that to make a new folder in the GitHub repository from the web browser interface, there exists a way Actually, it's just the same as creating a new file.
Steps:
1. Go to create a file

2. give the name of the folder that you want to create eg:
data/
It will create a folder named 'data'


3. If you want another nested folder then give another name eg.
airport-codes/
It will create another directory 'airport-codes' in 'data'


4. Next, create a file there. This can even be a temporary file that you can subsequently delete if you do not want it.

To see this in action refer:

Cheers :)