Showing posts with label Computer/Technology Tips. Show all posts
Showing posts with label Computer/Technology Tips. Show all posts

GIT delete merged branches

How to delete merged branches from local copy:

When you work on a project for a while, there is a good chance that you will have a list of old/already merged branches showing on your local git. 

When you run $git branch it will show all the branches since you started working on the project including the ones that are not currently active.

$git branch
    PROJX-1024-add-new-button
    PROJX-1026-add-another-button
    PROJX-1027-titleupdates
    build-fix
    develop
    release
    master 

Here's how you can find the merged branches: It will only list a branch if it exists in local but not in remote(deleted from remote after merging).

$git branch --merged
    PROJX-1024-add-new-button
    build-fix
    develop
    release


Here's how you delete the merged branches except develop and release

$git branch --merged | egrep -v "(^\*|develop|release)" | xargs git branch -d


You can add any number of branches to the skip list separated by pipe |

$git branch --merged | egrep -v "(^\*|develop|release|another_branch|yet_another_branch)" | xargs git branch -d

Create a huge data file for load testing

In this short blog, I am going to describe how you can create a big file for load testing. In most cases, you will only need step #2 to combine join big files.

For my earlier blog read-huge-xml-file-and-convert-to-csv, I needed to create a very big xml file (6GB +) without crashing my machine !!

My sample XML file would look like following with millions of <book> element.

<catalog>  
   <book id="001" lang="ENG">  
     ..  
   </book>  
   <book id="002" lang="ENG">  
     ..  
   </book>  
   ...  
 </catalog>  

Steps:
1) Since the start of the file contained <catalog> and file ended with </catalog>, I striped the start and end line and created a small file with just a few <book> elements.

//small.xml
<book id="001" lang="ENG">  
    ..  
 </book>  
 <book id="002" lang="ENG">  
    ..  
 </book>  
 <book id="003" lang="ENG">  
    ..  
 </book>  
 <book id="004" lang="ENG">  
    ..  
 </book>  


2) Used 'cat' to join files. The following would create bigger.xml by combining five small.xml files

cat small.xml  small.xml  small.xml  small.xml  small.xml >> bigger.xml


I can further do the following to gain exponential file size

cat bigger.xml  bigger.xml  bigger.xml  bigger.xml  bigger.xml >> evenbigger.xml

3) finally I used 'sed' to add <catalog> at beginning  and </catalog>  at end to create a proper xml file

 sed -i '1s/^/<catalog> /' bigger.xml
 sed -i -e '$a</catalog>' bigger.xml


4) Let's verify using tail and head

  head -10 bigger.xml
  tail -10 bigger.xml

I can see the <catalog>  at start and </catalog> at end. Hurray....

Project to test your programming skills

Project to test your programming skills

A Guessing Game - to become Full Scope/Stack Developer

If you are wondering what would be a perfect project to practice your programming skills. You are in the right place!
It's a simple number guessing game. We start with a console app and migrate to a web app with lots of features.

Steps

1. Console App:

  • Read a number N from the console between a range (MIN, MAX). Your code should then generate a random number CN between the same range(MIN, MAX) and compare if the computer-generated random number CN and the user entered number N matches.
    If it matches, the user wins. If it doesn't match, the computer wins.

2. (Optional) Desktop app:

  • Create an interface to enter the MIN/ MAX number and the user guess.
    MIN :        [ Textbox  ]
    MAX:         [ Textbox  ]
    User Guess   [ Textbox  ]
Also provide a button with label "Play" that generates the random number and displays a message in Label if the user won.
    [ Play  ]
  • Save the win/loss counts and winning/losing number in a text file 'stat.csv'. Display the average win/loss on UI when the user closes the app.
    eg:
    DATE_TIME, WINNER, WINNING_NUM, LOSING_NUM
    2020-05-10 20:01:50, USER, 5, 10
    2020-05-10 20:02:50, USER, 3, 4
    2020-05-11 20:05:50, COMPUTER, 7, 9

3. Two-player:

  • Update the GUI or Console application to allow two users to play with the computer. Both of the users can enter their guess and click Play. The user that made the correct guess will win
    GUI mockup:

    User A's Guess   [  Text Box  ]
    
    User B's Guess   [  Text Box  ]

                     [    PLAY    ]

4. (Optional) Multi-Player Game - over socket connection:

  • Update the GUI application to allow several users to play simultaneously. All the users will have a copy of the application and can join the Game by running the application on their computer. The first user to start the game can act as a Server.

5. Web Application:

  • Create a web application to play the same game in the browser. Reuse the previous code on the backend
  • Support single-player mode (play with the computer).
  • Add a sign-up page to register users. Update logic to allow only the registered/logged-in users to play. Use ReCaptcha to prevent robot making requests.
  • Block users from playing more than 1 hour. Lock them for 2 hours.
  • Multi-player: list online users and provide the ability to request/accept to play with the user. Use WebSocket to listen for updates in realtime.
  • Store the win/loss statistics into DB.
  • Generate a CSV report with stats about the winner, numbers, etc that you can download it from the web interface.

 6. Fun Stuff

  • Schedule the 'winner stat' report to run every day and deliver it to your email address.
  • Setup a background job that sends an account deactivation email if the user is not logged-in in last 20 days
  • Setup a background job to deactivate user if the user is not logged-in in the last 30 days
  • Setup a public web API to expose information about the winners
  • Use caching to read user profile from the cache instead of reading from DB on every request

7. Operation:

  • Setup a Dockerfile script to run your app in docker
  • Setup static code analysis with local SonarQube instance. You can use docker to run SonarQube. Take care of SonarQube warnings.
  • Deploy your app in a cloud environment (eg Heroku, AWS, Azure)

 Note:

  • Focus on readability, reusability throughout the development.
  • Try to make your app modular
  • Use the build system
  • Use git

 

Want to update this?

Please submit a PR at  https://github.com/GT-Corp/myths-and-facts-about-programming/blob/master/full-scope-developer.md

Myths and Facts About Programming

Myths and Facts About Programming - Stuff that I wish I knew in my early career


What's this?

A collection of common myths and facts (opinionated) about computer programming that I wish I knew in my early career.

Programming requires math

  • Neutral.
  • Only a few percentages of programmers deal with math problems in their careers.
  • Analytical skills help to break down the problem. Think of programming as understanding the problem, breaking down into smaller steps, and solving it. Similar to math right?
  • However, people who are bad at Math can be a good programmer. It also depends on the type of role and type of problem they are trying to solve.

Programming job is similar to a typist. It's all about typing code.

  • False
  • Programming(at entry level) is about:
    • reading documentation and requirements
    • documenting stuff
    • thinking how to write code
    • writing code
    • testing
    • debugging bugs
    • deploying
    • discuss with team member/management
  • The amount of time you spend typing code depends on your role and job description. There will be days you won't be typing any code.
  • Majority of programming job requires maintaining an existing system written over the years by several people. You will be required to add features, customize, fix bugs, etc

You won't require a college degree to be a programmer

Everyone can learn and be a programmer within months

Programming is really hard

  • Neutral.
  • It depends on the individual, their learning/intellectual capability, and the type of programming role they learn/get into.
  • There will be certain things you can learn easily. But a college degree will help to broaden your perspective and learn things quickly.

Programming is monotonous. Its like working in the assembly line at a factory

  • False
  • On certain days or working in the same role for a long time, you may get a feel of your job being monotonous.
  • But it's not like working in the assembly line. It requires lots of thinking and analysis.

Programming is not for girls

  • False

You need to keep reading new stuff throughout your career

  • Neutral
  • You don't "need to". But learning new stuff helps advance your career.
  • Also, it depends on the type of tool and technologies you are using. Some tools/technology (eg: JS Frameworks) get deprecated every few years. Sometimes
  • Learning a new paradigm, best practices, new architecture concepts is always useful.

Machine Learning and AI seems easy to learn.

I don't have any knowledge of statistics/probability/modeling. However, the ML/AI tutorial I found online is just 10 lines of code and it seems easy.

  • False
  • It may seem easy to use ML/AI tools created by somebody else or follow a cookbook. But you will need to understand many concepts to use those tools when solving real problems. Don't get intimidated by simple tutorials. Start by the basics and dig into the tools.

Using long variable makes program slow. So I should program like this:

int a = read()
int b = 1000
if(a > 18 && b > 50)
    println("Entry allowed")


  • False
  • With compiled languages, no. With interpreted languages, possibly but the difference would be negligible.
  • Always focus on readability. Compare the above code with the following:
int age = readMemberAge()
int balance = 1000
if(age > 18 && balance > 50)
    println("Entry allowed")

I have to learn as many programming languages eg C, Python, Java, Ruby, Kotlin, Scala, Groovy, C#, Go to be a good programmer.

  • False
  • Think of programming language as natural language eg: Nepali, French, English, Japanese, and Chinese. And the art of writing a novel or poem as the actual programming. If you mastered five languages but do not have a skill of writing a (good) poem in either of those you are still not an artist.
  • Think of programming as art. Try to be an artist in at least one language. Think of a hobby project and develop with paying attention to code quality, performance, UI, features, etc.
  • Focus on learning programming rather than learning a language.
    • Programming is a skill that you can gain with just one language. If you know how to do X in Y language then you can do it in Z language too with little effort.

HackerRank, LeetCode will guarantee me a job

  • False
  • There's no doubt that the questions on those sites help you think critically and solve a problem.
  • Its a widely used screening method to filter our candidates these days.
  • Pet project(s) and your college projects will also help you land the first job.

Google, Amazon and Facebook are using X tool. It must be good so I should learn.

  • False
  • A lot of tools developed by tech-giants are being deprecated after a couple of years.
  • Looks for a tool/language/framework that's being used by a lot of companies for a long time.

X was developed by Google, Amazon, and Facebook so it must be good. I should learn and use it.

  • False
  • There's no guarantee that those tools MUST be good. Don't fall for advertisements
  • Review 100 job descriptions on Linkedin/Indeed etc and find yourself what's popular on the market

I must learn Angular, React, Vue and XYZ web framework to master my web development skills

  • False
  • It's better to start the web development without the frameworks so that you understand how those frameworks are solving the problems of not using those frameworks
  • You don't need to learn all of these, one would be enough. If you started learning web development without using frameworks, switching between frameworks would be easier.

I know X1 framework/library/tool. But the job vacancy says mentions X2(the alternative of X1). I should not apply for this job.

  • False
  • Test yourself if you know X1 framework/library/tool how long you will take to learn X2.
  • As long as you know the abstract concepts and have worked on at least one pet/professional project on your own there's a high chance that you can learn another framework/library/tool quickly. They all are trying to solve a similar project but slightly different ways.
  • Also look for 'preferred' vs 'required' skills on job vacancies.

Everyone on social media hates language/framework X. X must be bad.

  • False
  • Don't fall for people's 'opinions'. People think languages/frameworks/tools as religion. They hate each other.
  • The best way to find out what to learn is to look at job vacancies. At least a hundred of them.

Language X does that in one line. So, it is the best language.

  • Neutral
 DB.allRecords().read().toCsv("file.csv");
  • It's nice that they provided that functionality in one line out of the box. But there is a great deal of code hidden behind the scene.
  • All languages support creating library modules to extend the feature. Some languages are by nature too abstract/low level and it requires developers to write libraries around it to make things simpler.
  • So, that doesn't mean language X is best.

Want to add more Q/A and correct sth?

Please submit a Pull Request at https://github.com/GT-Corp/myths-and-facts-about-programming/blob/master/README.md


Solve - Hyper-v not compatible on VMware player

I had enabled hyper-visor when installing docker in my system. But it seems it needs to be disabled to allow VMware run smoothly.

The error that I got from VMware.
Hyper-V not compatible - VMWare Error










 

 

 

Here's how I solved it:

1) Run command prompt as Administrator
2) Run the following command to disable hyper visor launcher
  C:\>bcdedit /set hypervisorlaunchtype off

If you want to enable it back to run Docker, the following command will help.
  C:\>bcdedit /set hypervisorlaunchtype auto

How browserSync actually works ?

How BrowserSync actually works ?


BrowserSync starts a small Node.js server which injects a script ( as below) into the webpage that it's monitoring.The script makes use of WebSockets to communicate between server and client to watch for changes to the code or browser actions. As soon as BrowserSync detects an action ( either in one browser or a server code) it performs a page reload.


<body>
<script id="__bs_script__">
//<![CDATA[

    document.write("<script async src='/browser-sync/browser-sync-client.2.11.2.js'> <\/script>".replace("HOST", location.hostname));
   
//]]>
</script>
...
...


If you’re already using a local web server or need to connect to a live website, you can start BrowserSync as a proxy server. See how to do this.

Articles related to BrowserSync /Grunt configuration:

BrowserSync local server proxy configuration

Integrate BrowserSync - with existing local server :

In this example, I will show how we can configure BrowserSync - Grunt task with you existing existing webapp that is running on a local server.

If you want to know the details on
  • how to configure the BrowserSync and Watch tasks  on Grunt, Please visit my previous post :

The configuration is simple : You just need to let the browserSync to know URL of your local server.

options: {
         proxy: "local.server-URL"
       }


The final Gruntfile.js file : (full configuration is already described on my earlier blog  post
BrowserSync Grunt configuration - Multi browswer Live Reload )

   
module.exports = function(grunt) {
  // Task configuration will go here
  grunt.initConfig({
   watch: {
  
      },
   browserSync: {
       bsFiles: {
         src: [
           "css/*.css", "js/.js", "./*.html" //search file/folders
         ]
       },
       options: {
         proxy: "local.server-URL" // NEEDS TO BE CONFIGURED
       }
   }
  });
  
  
  // Load tasks dependencies
  grunt.loadNpmTasks('grunt-contrib-watch');
  grunt.loadNpmTasks('grunt-browser-sync');
  
  // Setup default task
  // both browserSync and watch will run when running >grunt command
  grunt.registerTask('default', ['browserSync', 'watch']);

};



BrowserSync Grunt configuration - Multi browswer Live Reload

How to configure BrowserSync's Live Reload feature with Grunt tasks :


BrowserSync is capable of live reloading and syncing the changes across all your test browsers. This will launch a mini web server by using your current working directory as the base, watch your files for changes & auto-inject those changes into all connected browsers.

See my earlier blog post for the pros/cons of BrowserSync over LiveReload.

In this tutorial, I will demonstrate how to configure the BrowserSync with Grunt tasks "grunt-contrib-watch" and "grunt-browser-sync" in a basic web page setup. You can easily configure your bigger projects on you follow the following steps:



Setup Steps:

The link to github project is given at the end of this article.

1) Web App/Site setup :

I've a basic web site with the following files / directories in my working folder:

  index.html
  css/
      main.css
  js/
      app.js


BrowserSync vs LiveReload productivity boosters comparison

BrowserSync and LiveReload both are the cool tools that are aimed to improve the development workflow i.e., productivity of front-end development team. In summary, they both reload your browser automatically when you change some css or javascript or HTML - let's say any resource.

The main feature that we get from BrowserSync is : it has capacity of live reloading all your test browsers. It doesn't has constraint to one browser, meaning : it can reflect your code changes on every browser/device/emulator. The new devices/browsers can be added/tested with no additional configurations.

 

Pros and Cons of BrowserSync with LiveReload:

Pros :
  • Works across multiple devices at the same time
  • Works with all browsers and devices
    • No configuration/plugin needed in each browser
  • Synchronized actions across all browsers
    • form input, page scroll, navigation all gets synchronized across the browsers
  • Works with all browsers and devices
Con :
  • Initial configuration might be a little tricky
    • npm, grunt or gulp etc needs to be configured and the dependencies might give some problems to configure

 

Configuring Lombok on IntelliJ - Installation of Lombok plugin

How to install/configure Lombok plugin on IntelliJ IDEA :

Steps :

1) Installation 
Using IDE built-in plugin system on Windows:
  • File > Settings > Plugins > Browse repositories... > Search for "lombok" > Install Plugin
Using IDE built-in plugin system on MacOs:
  • Preferences > Settings > Plugins > Browse repositories... > Search for "lombok" > Install Plugin
Manually: 2) Restart IDE.
3) Enable Annotation Processing
 In your project: Click Preferences, "Build, Execution, Deployment", Compiler, Annotation Processors. Click Enable Annotation Processing
Enabling Annotation Processing on IntelliJ IDEA

Optional) IntelliJ and Eclipse compiler
If you're using Eclipse compiler with lombok, try this setup:
  • install plugin (above process)
  • change compiler setting:
  •  > Compiler > Java Compiler > Use Compiler: Eclipse
  •  > Compiler > Annotation Processors > Enable annotation processing: checked (default configuration)
  •  > Compiler > Additional build process VM options: -javaagent:lombok.jar

References :

Ynaxdh - answer acronym in Yeoman generator

Meaning of Ynaxdh in Yeoman generator

Here the complete list of options/meanings:

  • Y: yes (Default)
  • n: no
  • a: always yes (yes to this question and all others)
  • x: exit
  • d: show the differences between the old and the new file
  • h: help, list all options

Notes :   

  • If you don't remember this definitions you can always enter h and see the list.
  • Also in the new version, when you enter one of the letters you will see the definition showing behind the question so that you can verify your answer before pressing Enter key.
  • The one in uppercase is the default one. If that is your choice, you can just hit enter.

git command cheat sheet - short description

GIT command cheat sheet with short descriptions


Git taskNotesGit commands
Tell Git who you are Configure the author name and email address to be used with your commits.Note that Git strips some characters (for example trailing periods) from user.name. git config --global user.name "Sam Smith"
git config --global user.email sam@example.com
Create a new local repository
git init
Check out a repository Create a working copy of a local repository: git clone /path/to/repository

For a remote server, use: git clone username@host:/path/to/repository
Add files Add one or more files to staging (index): git add <filename>git add *
Commit Commit changes to head (but not yet to the remote repository): git commit -m "Commit message"

Commit any files you've added with git add, and also commit any files you've changed since then: git commit -a
Push Send changes to the master branch of your remote repository: git push origin master
Status List the files you've changed and those you still need to add or commit: git status
Connect to a remote repository If you haven't connected your local repository to a remote server, add the server to be able to push to it: git remote add origin <server>

List all currently configured remote repositories: git remote -v
Branches Create a new branch and switch to it: git checkout -b <branchname>

Switch from one branch to another: git checkout <branchname>

List all the branches in your repo, and also tell you what branch you're currently in: git branch

Delete the feature branch: git branch -d <branchname>

Push the branch to your remote repository, so others can use it: git push origin <branchname>

Push all branches to your remote repository: git push --all origin

Delete a branch on your remote repository: git push origin :<branchname>
Update from the remote repository Fetch and merge changes on the remote server to your working directory: git pull

To merge a different branch into your active branch: git merge <branchname>

View all the merge conflicts:View the conflicts against the base file:Preview changes, before merging: git diffgit diff --base <filename>
git diff <sourcebranch> <targetbranch>
After you have manually resolved any conflicts, you mark the changed file: git add <filename>
Tags You can use tagging to mark a significant changeset, such as a release: git tag 1.0.0 <commitID>
CommitId is the leading characters of the changeset ID, up to 10, but must be unique. Get the ID using: git log
Push all tags to remote repository: git push --tags origin
Undo local changes If you mess up, you can replace the changes in your working tree with the last content in head:Changes already added to the index, as well as new files, will be kept. git checkout -- <filename>
Instead, to drop all your local changes and commits, fetch the latest history from the server and point your local master branch at it, do this: git fetch origingit reset --hard origin/master
Search Search the working directory for foo(): git grep "foo()"


Source:
https://www.atlassian.com/git/tutorials/svn-to-git-prepping-your-team-migration/basic-git-commands

linux terminal commands for beginner level

NAVIGATION
  • ls - list directory contents
  • pwd - print name of current/working directory
  • cd - change working directory
  • pushd/popd - put working directory on a stack
  • file - determine file type
  • locate - find files by name
  • updatedb - update database for locate
  • which - locate a command
  • history - display bash command history

GETTING HELP
  • whatis - display the on-line manual descriptions
  • apropos - search the manual page names and descriptions
  • man - an interface to the on-line reference manuals

WORKING WITH FILES
  • mkdir - create a directory/make directories
  • touch - change file timestamps/create empty files
  • cp - copy files and directories
  • mv - move (rename) files
  • rm - remove files or directories
  • rmdir - remove empty directories

TEXT FILES
  • cat - concatenate files and print on the standard output
  • more/less - page view
  • nano - command line text editor

USERS
  • sudo - execute a command as superuser
  • su - change user ID or become another user
  • users - print the user names of users currently logged in
  • id - print real and effective user and group IDs

CHANGING FILE PERMISSIONS
  • chmod - change permissions of a file

KILLING PROGRAMS AND LOGGING OUT
  • Ctrl+C - kill a running command
  • killall - kill processes by name
  • exit - log out of bash

using symbolic links on windows

Using symbolic links (MKLINK comand) on windows:

Suppose we want to create a link of folder 'e:\source' to c:\target\bridge then, use the following command:

C:\>mklink /d c:\target\bridge e:\source

Syntax : mklink /d TARGET SOURCE_DIR

  • This command creates a link folder "bridge" in c:\target\ where you can see the contents from e:\source.
For more info :
Visit: http://ss64.com/nt/mklink.html - 

Excel to Wiki table converter

Tab separated table - Excel / Google Sheet to Wiki table converter



Input : Paste Tab-separated table data ( eg : row/column from Excel, Google Docs etc)

Output : MediaWiki formatted table





Source : GitHub

git- saving username password - credential.helper cache - how to

Isn't is interesting if there is an option in GIT to save your credentials for short time so that you don't enter your username/password repeatedly each time when you do pull/push? Yes! there is an option introduced in GIT since 1.7.9 (released on January 2012). This method is more secure than permanently saving your username/password in   .git  file of your git clone directory.

So, run the following command at the GIT console (git bash) :
git config --global credential.helper cache
This caches the credentials for 15 minutes ( 900 seconds) by default. If you want a longer timeout period (say3600 seconds), you can do the following :
git config --global credential.helper 'cache --timeout=3600'

nepali english date conversion logic - working java code


My friend Manoj has written about Nepali-English date conversion in this post. Take a look :

http://forjavaprogrammers.blogspot.com/2012/06/how-to-convert-english-date-to-nepali.html

He has explained the algorithm in detail about how to convert English dates into Nepali dates with java code.

Java Script code that disables right click and prevents selecting the text on web page.

Java Script code that disables right click and selecting the text on web page.
Put the following code in your <body>........</body> tag.
<script>
function disableselect(e){return false;}
function reEnable(){return true;}
document.onselectstart=new Function (){return false;}
if (window.sidebar){
    document.onmousedown=disableselect;
    document.onclick=reEnable;
}
</script>

<script>
document.oncontextmenu = function(){return false;}
if(document.layers) {
    window.captureEvents(Event.MOUSEDOWN);
    window.onmousedown = function(e){
        if(e.target==document)
        return false;
    }
}else {
    document.onmousedown = function(){return false;}
}

For Blogger template,

  • Search for </body> in the template code
  • paste the above script just before </body> tage.
Enjoy !
You are now safe from website article thief.

facebook security bug - change password of a active user - without knowing original password

change password of a active user -without knowing original password - security bug - Facebook allows to change password in active login without entering current password

As of May 2012, Facebook has over 900 million active users. Security and privacy should be the number one concern of Facebook Inc. But I just found one BUG in Facebook security system.

This might (not) be a security bug in Facebook. And probably be fixed by Facebook when you tried to do the same, because I am going to report this to Facebook.

All the steps below that I am going to share - deals with changing someone else’s password without entering their previous/current password. I have never seen or write code for “login preference change” that allows to change password without entering previous password or other information.  I was shocked to know that Facebook allows it. I was just playing with Security option in Facebook’s Account setting https://www.facebook.com/settings. And found that.

Steps that I followed :

Correct way of connecting ADSL splitter and router

REMEMBER : If you need extensions, connect it after splitter only. 
Right way of connecting adsl splitter and router in telephone line
Wrong way of connecting adsl router, splitter in telephone line

correct adsl connection diagram, router, computer, splitter, telephone line