2024年9月30日 星期一

Install Eclipse JBoss plugin without visiting market

 1. Download Eclipse Jboss plugin here. Choose "Update site (including sources) bundle of all JBoss Core Tools".

https://tools.jboss.org/downloads/jbosstools/2023-09/4.29.1.Final.html#zips


2. Open eclipse > Help > Install new software... > Click "add" on top right corner > Archive... > Choose the zip file in step 1


Using Node Version Manager without admin right

- Install nvm (e.g. C:\Apps\nvm)

- Create settings.txt (e.g. C:\Apps\nvm\settings.txt) with below content


root: C:\Apps\nvm

path: C:\Apps\nvm\nodejs

arch: 64

proxy: [your company's proxy, username / password of proxy may be required]

originalpath: .

originalversion: 

node_mirror: 

npm_mirror: 


Each time when "nvm use" is called, "C:\Apps\nvm\nodejs" will be recreated.

2023年9月26日 星期二

[Angular] Material Date Picker Custom Date Format

1. Create a class that extends NativeDateAdapter


import { NativeDateAdapter, DateAdapter, MAT_DATE_FORMATS, MAT_DATE_LOCALE } from '@angular/material/core';

import { formatDate } from '@angular/common';


export const MY_FORMATS = {

parse: {

dateInput: 'yyyy-MM-dd', // date format used by the text field

},

display: {

dateInput: 'yyyy-MM-dd', // date format used by the text field

monthYearLabel: 'MMM-YYYY', // the date on the top left of the date picker

dateA11yLabel: 'LL',

monthYearA11yLabel: 'MM-yyyy',

}

};


export class MyDateAdaper extends NativeDateAdapter {

override format(date: Date, displayFormat: Object): string {

return formatDate(date, displayFormat+'', this.locale);

}

}



2. In your component class, specify we are using MyDateAdapter in @Component.

import { Component, OnInit, ViewChild } from '@angular/core';
import { FormBuilder, FormControl } from '@angular/forms';
import { Case } from '../case/case';
import { CaseAct } from '../case/caseAct';
import { CaseAsmt } from '../case/caseAsmt';
import { StatOrdSummary } from '../case/statOrdSummary';
import { SelectItem } from '../case/selectItem';
import { Observable, Subject, interval, of, mergeMap, concatMap, switchMap } from 'rxjs';
import { HeroService } from '../service/hero.service';
import { FactoryService } from '../service/factory.service';
import { debounceTime, distinctUntilChanged, filter, map, scan, reduce, tap } from 'rxjs/operators';
import { MatTabGroup } from '@angular/material/tabs';
import { MatSnackBar } from '@angular/material/snack-bar';
import { MatCheckboxModule } from '@angular/material/checkbox';
import { MatRadioModule } from '@angular/material/radio';
import { MatDialog, MAT_DIALOG_DATA, MatDialogRef } from '@angular/material/dialog';
import { CommonDialogComponent } from '../dialog/common-dialog/common-dialog.component';
import { DateAdapter, MAT_DATE_FORMATS, MAT_DATE_LOCALE } from '@angular/material/core';
import { MyDateAdaper, MY_FORMATS } from '../common/myDateFormat';
import { TRANSLOCO_SCOPE } from '@ngneat/transloco';

@Component({
selector: 'app-case',
templateUrl: './case.component.html',
styleUrls: ['./case.component.css'],
providers: [
{
provide: DateAdapter,
useClass: MyDateAdaper,
},
{
provide: MAT_DATE_FORMATS, 
useValue: MY_FORMATS
},
],
})
export class CaseComponent implements OnInit {
.....
}

3. In html template, nothing to config for the date format.

<mat-form-field appearance="fill" class="form-field ">
<mat-label>Iss Dt</mat-label>
<input matInput [matDatepicker]="picker" [(ngModel)]="a.ordrIsuDt" />
<mat-hint>YYYY-MM-DD</mat-hint>
<mat-datepicker-toggle matIconSuffix [for]="picker"></mat-datepicker-toggle>
<mat-datepicker #picker></mat-datepicker>
</mat-form-field>

2023年9月6日 星期三

CSS values and units

https://developer.mozilla.org/en-US/docs/Learn/CSS/Building_blocks/Values_and_units 



UnitNameEquivalent to
cmCentimeters1cm = 37.8px = 25.2/64in
mmMillimeters1mm = 1/10th of 1cm
QQuarter-millimeters1Q = 1/40th of 1cm
inInches1in = 2.54cm = 96px
pcPicas1pc = 1/6th of 1in
ptPoints1pt = 1/72nd of 1in
pxPixels1px = 1/96th of 1in

2023年8月24日 星期四

[Java] Partition equal subset sum

 class Solution {

    public boolean canPartition(int[] nums)
    {
        int n = nums.length;
        int sum = 0;
        for(int i=0; i<n; i++)
        {
            sum+=nums[i];
        }
       
        if(sum%2 !=0 ) return false;

        sum = sum/2;
        boolean[][] possible = new boolean[n+1][sum+1];
        for(int i=0; i<=n; i++) possible[i][0] = true;

        for(int i=1; i<=n; i++)
        {
            for(int j=1; j<=sum; j++)
            {
                if(nums[i-1] > j)
                {
                    possible[i][j] = possible[i-1][j];
                }
                else
                {
                    possible[i][j] = possible[i-1][j-nums[i-1]] || possible[i-1][j];
                }
            }
        }
        return possible[n][sum];
    }
};


[Java] Next Permutation

 class Solution {


    public boolean nextPermutation(int[] nums) {

        int ind1=-1;

        int ind2=-1;

        // step 1 find breaking point 

        for(int i=nums.length-2;i>=0;i--){

            if(nums[i]<nums[i+1]){

                ind1=i;

                break;

            }

        }

        // if there is no breaking  point 

        if(ind1==-1){

            reverse(nums,0);

return false;

        }

        

        

// step 2 find next greater element and swap with ind2

for(int i=nums.length-1;i>=0;i--){

if(nums[i]>nums[ind1]){

ind2=i;

break;

}

}


swap(nums,ind1,ind2);

// step 3 reverse the rest right half

reverse(nums,ind1+1);

        return true;

    }

    void swap(int[] nums,int i,int j){

        int temp=nums[i];

        nums[i]=nums[j];

        nums[j]=temp;

    }

    void reverse(int[] nums,int start){

        int i=start;

        int j=nums.length-1;

        while(i<j){

            swap(nums,i,j);

            i++;

            j--;

        }

    }

}

2023年7月19日 星期三

[Java] Rotate matrix clockwise in place

 class Solution {

    public void rotate(int[][] matrix) {

        int a=0,b=matrix.length-1,tmp;

        while(a<=b)

        {

            for(int k=0;k<=b-a-1;k++)

            {

                tmp = matrix[a][a+k];

                matrix[a][a+k] = matrix[b-k][a];

                matrix[b-k][a] = matrix[b][b-k];

                matrix[b][b-k] = matrix[a+k][b];

                matrix[a+k][b] = tmp;

            }

            a++;

            b--;

        }


    }

}