Tuesday, November 27, 2018

SharePoint Online vs OnPrem

SharePoint Online and On-Premises: a Comparison

Compare: cloud or on-premises? What SharePoint version is more suitable?

Lets compare MS SharePoint Online and MS Office 365


What SPO offers:

1. Range of functions – mobile first, cloud first

2. Modern collaboration tools

3. Updates

Microsoft manages the installation and deployment of updates for SharePoint Online.

4. Availability

OnPrem: We have control of availability if you operate a dedicated datacenter.

SPO: MS guarantees 99.9 percent availability of services (including Exchange and SharePoint), provided you have an SLA.

5. Backups

OnPrem: Up to U

SPO: Microsoft creates regular backups of the entire farm for SharePoint Online.

6. Connection of external users

OnPrem: You need to create your own infrastructure (and it’s quite a lot!) to connect external users if you run SharePoint On-Premises. If that weren’t enough, you will have no choice but to set up security features (e.g. logging and multi-factor authentication) yourself.

SPO: comes with the ability to connect external users. This feature can be expanded simply with a variety of Azure services, so that features such as two-factor authentication and others can be implemented quite easily.

7. Scaling

8. Management

Quick View of SharePoint On-Premises vs SharePoint Online

Range of functions
New tools are made available at a later date
Ported initially by MS to the online version

Modern collaboration tools
You are responsible for implementation
Microsoft works intensively on these tools

Updates
Managed and installed by you
Managed and installed by Microsoft

Availability
You are in charge of availability
SLA with 99.9% availability

Backup
You need to create backups
Microsoft ensures backup and redundancy

Connection of external users
Infrastructure required on your side
Already included

Scaling
Responsibility for detecting and rectifying bottlenecks lies with you
Microsoft looks after scaling

Management
Central Administration and PowerShell
SharePoint Admin Center and PowerShell


Ask:

When is SharePoint Online the better option?
  • If you want to get things up and running quickly: in most cases it will only take minutes to set up an Office 365 account. SharePoint will be at your fingertips in no time at all
  • If you are keen to reduce the costs of your dedicated infrastructure
  • If you want to collaborate with external employees, partners or customers
  • If you would like to use new technologies like Office Delve and Sway
  • If you want to provide your employees with state-of-the-art tools for mobile deployment as well
When is SharePoint On-Premises the better option?
  • If you already have a dedicated infrastructure for SharePoint
  • If you have integrated external employees and customers in your infrastructure already
  • If you require so-called farm solutions – so programs that penetrate deep into the system
  • If you are required to do so for data protection reasons
  • If your Internet connection does not have sufficient bandwidth


More here

BI Report : Learning MS BI Reports using SharePoint Data

  1. Download Power BI for Desktop

    Although Power BI has two versions (Online and for Desktop), I suggest using the Desktop version to create the dashboard, then publish it through Power BI Online to share the dashboard with your colleagues.

  2. Get data from SharePoint

    When opening Power BI, click on the "Get Data" button to access the data sources that are available.

    Getting data from SharePoint to Power BI

  3. Select the right data type

    As you will see, there are 3 types of available SharePoint data connectors; Folders, Online Lists and regular lists. Pick your object type and add your SharePoint URL.

    Selecting data type in Power BI

    Accessing your SharePoint List or Library in Power BI

  4. Load your data

    On the left site, select the relevant folder or list. You will see a preview of the data that can be loaded.

    Load Your Data in Power BI

More here

Sunday, November 25, 2018

Gmail: Using Google Apps Script to Auto Delete Gmail Trash on a schedule! (or anything else for that matter)


1) Create Script

2) test

3) Schedule


Some really cool stuff we can do using Google Developers Dashboard, some references here:

https://gist.github.com/balupton/9800939

and

https://www.mikecr.it/ramblings/marking-gmail-read-with-apps-script/


for my case I need to purge the Trash every Sunday, to do this:

Summary as follows:

1) Create a script to clean Trash label (folder)

function deleteForever() {

  Logger.log('START ');
   var labelName = "Trash"

  var threads = GmailApp.search("in:trash label:" + labelName);
   for (var i = 0; i < threads.length; i++) {
    Logger.log('Delete id ' +  threads[i].getId());
      try {
         Gmail.Users.Messages.remove('me', threads[i].getId());
      }
      catch(e){}
      Logger.log('DONE Delete id ' +  threads[i].getId());
   }
}


2) To enable advanced services for this script, locate Resources on the menu, and select Advanced Google services...

3) Enable Gmail API on the list.

4) Before selecting OK, click on the Google Developers Dashboard link. Search for gmail, and enable

5) Schedule via a trigger:


FYI:

If new to G Scripting, use logging per this spec


Basic logging

A basic approach to logging in Apps Script is to use the built-in Logger. Logs created this way can be viewed by selecting View > Logs in the script editor. These logs are intended for simple checks during development and debugging, and do not persist very long.

For example, consider this function:

function emailDataRow(rowNumber, email) {
  Logger.log('Emailing data row ' + rowNumber + ' to ' + email);
  var sheet = SpreadsheetApp.getActiveSheet();
  var data = sheet.getDataRange().getValues();
  var rowData = data[rowNumber-1].join(" ");
  Logger.log('Row ' + rowNumber + ' data: ' + rowData);
  MailApp.sendEmail(email,
                    'Data in row ' + rowNumber,
                    rowData);
}

When this script is run with inputs "2" and "john@example.com" the following logs are written:

[16-09-12 13:50:42:193 PDT] Emailing data row 2 to john@example.com
[16-09-12 13:50:42:271 PDT] Row 2 data: Cost 103.24

The Logger.log() method expects a string or other JavaScript object. The logs can only hold a limited amount of data, so avoid logging large amounts of text.

Tuesday, November 20, 2018

Excel Copy Cell Function without changing cell reference?

Normally when we copy/paste excel function, on paste the cell reference is adjusted for the

context of where we are pasting to.

For example:

Copy : from K3: =RANK(J3,J3:J25)

image

To: to K4: =RANK(J4,J4:J26)

image 


Well I want my rank to go over the ENTIRE range from J3:J25, not from a relative range of

J(n) :J25, so how do we do this? Using fixed cell references:


Change our rank to:

 image

Thursday, November 15, 2018

Fiddler HTTPS Traffic and Accept Cert for Chrome

If u have fiddler capturing traffic and yoiu receive an error:

NET::ERR_CERT_AUTHORITY_INVALID


Then perhaps you need to export Fiddler cert and import into Browser:


1. Export

2. Import into IE


Detail:

Fiddler 4.6.1.5+

  1. Click Tools > Fiddler Options.
  2. Click the HTTPS tab.
  3. Ensure that the text says Certificates generated by CertEnroll engine.
  4. Click Actions > Reset Certificates. This may take a minute.
  5. Accept all prompts


More Info Here

https://www.dropbox.com/s/dfc3mlwhtgrpg93/2018-11-16_01-04-58.mp4?dl=0

Wednesday, November 14, 2018

Best Player for Windows 10

Got tired of the GOM Ads, and CHOPPY playback, POT Player is here!!!!

IM DONE with GOM player, TOO many ads and WOW Pot player is GOM Player X 10

in regards to features!!!Best ever!

Download here:

Preferences:

See here

Guides for Pot Player

https://fossbytes.com/10-best-free-media-players-windows/
https://wiki.mikejung.biz/PotPlayer


Tweaking POTY Player Performance if needed:
https://anime.my/tutorials/configuring-potplayer-for-gpu-accelerated-video-playback-with-dxva-or-cuda-and-also-high-performance-software-decoding/#step1
https://dashcamtalk.com/forum/threads/pot-player-hardware-acceleration.8350/
https://www.youtube.com/watch?v=GSNaSro2CHk


See Preferences hereOpen-mouthed smileownload and run reg file!

Hardware and Software Driver Recover Options

Hardware and software I have and use that can be used for disk access and data recovery:


Hardware:

Slave a drive using this for example:
SATA/PATA/IDE Drive to USB 2.0 Adapter Converter Cable for 2.5 / 3.5 Inch Hard Drive / 5 inch Optical Drive with External AC Power Adapter
https://www.amazon.com/AGPtek-Drive-Adapter-Converter-External/dp/B00BIE996S/


Software


Recuva Free
https://www.ccleaner.com/recuva/features/undelete-files-on-your-computer

Anydata recovery
https://www.tenorshare.com/data-recovery/how-to-recover-deleted-data-windows-10.html

undelete:
http://www.undelete360.com/

undeleete+
https://undelete-plus.en.softonic.com/comments

Misc Info:
https://www.howtogeek.com/169344/how-to-recover-a-deleted-file-the-ultimate-guide/

Sunday, November 11, 2018

SharePoint Online Create a Public View from a Private View: Requires a JS HACK …Wow

  1. Click on Create View.
  2. Select your private view.
  3. Use either 'Developer Tool' if you are using IE or 'Firebug' if you are using Firefox. ...
  4. Remove the attribute 'disabled' from the radion button.
  5. Add a new attribute 'checked="checked"' to the radio button.
  6. Now save you view and you are done.

image

Wednesday, November 7, 2018

VLC Disable Album Art

OK, found it myself. Too bad so many have asked and nobody has bothered to answer.
Here it is:

Open "C:\Users\[User]\AppData\Roaming\vlc\vlcrc"
Find:
# Display background cone or art (boolean)
#qt-bgcone=1
Change to:
# Display background cone or art (boolean)
qt-bgcone=0


U should now see this in debug window:

image

Wednesday, October 24, 2018

SnapCopy: Copy on Computer Paste to your Phone

Snapcopy: Coolest Clipboard out there

1. Download Snapcopy Extension

2. Download Andorid App SnapCopy on ur phone

3. Scan the barcode, boom. Done.

4. Copy on ur PC/Paste to ur phone. and vice versa

Belt.IO : alternative, however it is not as easy as SnapCopy

1. Create account at Belt.IO

2. go to your belt:https://belt.io/belt paste some text into your belt

- there is also a Chrome Extension for belt.io

3. On any other device (phone / another computer)

- Open your belt : :https://belt.io/belt and Copy the text u just pasted

- On Android : install this App, makes it easier to copy/paste

4. On your phone use belt.io app:

Monday, October 15, 2018

GMail Search & Filters : Search Syntax + some filter examples to auto label emails

References:

Gmail Filters : Exhaustive Syntax Documentation

Some advanced Gmail Filter topics

** Note ** : Gmail does NOT support search using partial matches, instead GMail

only supports while word searches.  E.g: This does not work: “Find emails that contain any word that starts with Driv%” , The

To and From are the only fields that allow p[artial searching, e.g: find emails that are from @ally.com

Searching:

1. Search Examples using GMails Search Syntax Examples:

Just copy aand paste the below searches into the Gmail search text box to test
  From is from a certain domain:
         from:(@ally.com)
         from:(@ally.com | @expediamail.com)
         same as
         from:(@ally.com OR @expediamail.com)
        
   Before/After Date
         before:2018/9/1
         after:2018/9/1 before:2018/11/18
        
   Before/After Relative Date (instead of specific date)
         newer_than:2d
         older_than:30d
    
   Search multiple labels!
         label:(sent OR inbox)
         label:(sent OR inbox) Indeed
         label:(awork-jobs OR awork-jobs-jobsites) Indeed
         label:(awork-jobs OR awork-jobs-jobsites) older_than:30d

Filtering and Labels

1. Create Gmail Filter to auto label incoming emails:

Requirement:

When an incoming email is received the email shall be saved to a label .\AWork\Jobs\Insurance if the email contains the word Cigna and if the email was not sent from jdoyle@MyDomain.NET

(Create the label first if it does not exist)

How to Build step by Step:

Search:

from:(-from jdoyle@MyDomain.NET) Cigna


Filter:

image_thumb[9]

2. Gmail Filters Syntax


Gmail Filter Syntax Examples for and/or searching:

OR
     to:adam OR subject:iPhone
     is same as
     {to:adam subject:iPhone}


AND
     to:adam AND subject:iPhone
     is same as
     to:adam subject:iPhone
     is same as
     (to:adam subject:iPhone )
   
() parens -> AND
{} brackets -> OR
    


3. Create advanced Filter to auto label incoming emails:

e.g: I need to move emails from Inobx into, I want to move emails based on following requirements:

If incoming email contains the words job or opportunity or contract and email is NOT from a job site alert, then save email to .\AWork\Jobs


If incoming email contains the words job or opportunity or contract and email is NOT from a job site alert AND email has the word Melbourne in it, then save email to .\AWork\Jobs\Melbourne


If incoming email contains the words job or opportunity or contract and email is NOT from a job site alert AND email has the word remote or telecommute in it, then save email to .\AWork\Jobs\Remote



.\AWork\Jobs

(job | opportunity | contract) -{remote from:{alert@indeed.com alerts@ziprecruiter.com inmail-hit-reply@linkedin.com noreply@updates.freelancer.com noreply@updates.freelancer.com info@mail.glassdoor.com noreply@glassdoor.com dartcontainer-jobnotification@noreply.jobs2web.com}} -in:chats


Looks like this:

image_thumb[1]


.\AWork\Jobs\Melbourne

Search:

Find all job emails for melbourne area that are NOT from an automated job site like indeed or ziprecruiter and not in my chats.

(in:anywhere (job | opportunity | contract) (melbourne | "Palm Bay" | Cocoa) -subject:Enterprise -("car rental") -{remote from:{alert@indeed.com alerts@ziprecruiter.com inmail-hit-reply@linkedin.com noreply@updates.freelancer.com noreply@updates.freelancer.com info@mail.glassdoor.com noreply@glassdoor.com dartcontainer-jobnotification@noreply.jobs2web.com}} -in:chats)

Filter:

image_thumb[3]


.\AWork\Jobs\Remote

Search:

((remote | telecommuting | telecommute | remoting) -from:{jdoyle@jrdtechnologies.net alert@indeed.com alerts@ziprecruiter.com inmail-hit-reply@linkedin.com noreply@updates.freelancer.com noreply@updates.freelancer.com info@mail.glassdoor.com noreply@glassdoor.com dartcontainer-jobnotification@noreply.jobs2web.com})


Filter:

image_thumb[5]

When saving a filter be sure to use these options to move an email to a label:

image_thumb[7]

Google Search:

below applies to Google search

1. Google Search by date:

image

 

FYI:

Why Searching using Wildcard in Gmail doesn’t work and some alternatives

https://www.labnol.org/internet/advanced-gmail-search/21623/

http://sirlagz.net/2015/04/27/searching-gmail-with-wildcards/

(online2|online3|online4).provider.com

Thursday, October 11, 2018

Windows 10 : Stop Network Shares from dropping between restarts

you may notice that the network/mapped drives are randomly disappearing. A logoff/login will fix it temporarily, but what a pain. This is how you permanently fix the vanishing drives.


Registry Method

Use this method to change default time-out period of autodisconnect .

  1. Run |  regedit

  2. Locate and then click the following key in the registry:

  3. autodisconnect

Key:

HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\lanmanserver\parameters

Value:

Value: autodisconnect
Data type : REG_DWORD
Range : Hexadecimal
Default value: ffffffff

4. KeepConn : Change time-out the client-side during a UNC connection, specify in KeepConn. Locate and then click the following key in the registry:


Key:

[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\services\LanmanWorkstation\Parameters]

Value:

Value: KeepConn
Data type : REG_DWORD
Range : 1 to 65535 (sec)
Default value: 600 sec = 10 mins

Command Line Method

1. autodisconnect  :

change the default time-out period for the autodisconnect feature of the Server service,

2. Run | cmd as Admin


3. Type following cmd:

net config server /autodisconnect:-1

net config server /autodisconnect:number

More info:

0 = the autodisconnect feature is not turned off

-1 = the autodisconnect feature is turned off

1-65,535 =  number is the number of minutes that you want the server to wait before it disconnects a mapped network drive

4. Windows 10 only:

This can the SMB issues with dropping network shares:open a administrator command prompt and type the following hitting enter after each line.


sc.exe config lanmanworkstation depend= bowser/mrxsmb10/nsi
sc.exe config mrxsmb20 start= disabled

then Restart the computer

To reverse :


sc.exe config lanmanworkstation depend= bowser/mrxsmb10/mrxsmb20/nsi
sc.exe config mrxsmb20 start= auto
then Restart the computer


Others:

1. Network Adapters:

I've found that by turning off the network card's power saving features I've not been losing the drives.

2. Group Policy :

Group Policy drives which are set to "Recreate". Windows 8/10 automatically runs Group Policy updates in the background and disconnects/reconnects the drive to Recreate it.

Change the drive to "Update" in group policy and the issue will disappear!

Run | gpedit.msc:

User Configuration > Preferences > Windows Settings > Drive Maps

Change the drive to “Update” in group policy

See example here


3. Run a custom .bat file on login and network connect:


- FixMappedDrives.bat

Sample file below, this connects to mapped drives based on loginid of user, in this case I am hard coding a userid to a mapped drive credential. This could be altered to use dynamic credentials based on userid and lookup up creds based on current logged in user.

- task Scheduler

Run bat fule on following events:

A) Login and

StartUp using StartUp folder or Task Scheduler Logon event

B) Network connect

Task Scheduler task: Network connect event


- Sample files:


FixedMapDrives.bat


@echo off
echo MyFileServer:MapDrives Login Script START

echo MyFileServer:MapDrives Checking connection to MyFileServer....
ping -n 10 MyFileServer > nul
echo MyFileServer:MapDrives done Checking connection to MyFileServer.... Error: %errorlevel%

if %errorlevel% == 0 (
     echo MyFileServer:MapDrives CONNECTED
     goto connected
) ELSE (
     echo MyFileServer:MapDrives ERROR- Not Connected
     goto end
)


:connected
     echo MyFileServer start Map Drives for user %username%...
     echo off
       net use * /delete /yes
      
    
     IF /i NOT "%username%"=="User1" GOTO NEXT1
         echo MyFileServer:MapDrives Add DoyleJ mapped drives
         net use * /delete /yes
         NET USE M: \\MyFileServer\homes\User1  /USER:MyFileServer\User1 SomePassword
         NET USE Y: \\MyFileServer\Public  /USER:MyFileServer\User1 SomePassword
         NET USE P: \\MyFileServer\Photo  /USER:MyFileServer\User1 SomePassword
         NET USE V: \\MyFileServer\Video  /USER:MyFileServer\User1 SomePassword
       GOTO ENDIF
    
     :NEXT1
     IF /i NOT "%username%"=="user2" GOTO NEXT2
         echo Add user2
         echo off
           net use * /delete /yes
           NET USE M: \\MyFileServer\homes\user2  /USER:MyFileServer\user2 SomePassword
         NET USE Y: \\MyFileServer\Public  /USER:MyFileServer\user2 SomePassword
         NET USE P: \\MyFileServer\Photo  /USER:MyFileServer\user2 SomePassword
         NET USE V: \\MyFileServer\Video  /USER:MyFileServer\user2 SomePassword
       GOTO ENDIF
    
      
     :NEXT2
         echo Add Public
         echo off
           net use * /delete /yes
         NET USE Y: \\MyFileServer\Public  /USER:MyFileServer\User1 SomePassword
       GOTO ENDIF
    
     :ENDIF
    
:end

echo MyFileServer Login Script DONE

- Powershell


FixedMapDrives.ps1

$i=3
     while($True){
     $error.clear()
     $MappedDrives = Get-SmbMapping |where -property Status -Value Unavailable -EQ | select LocalPath,RemotePath
     foreach( $MappedDrive in $MappedDrives)
     {
         try {
             New-SmbMapping -LocalPath $MappedDrive.LocalPath -RemotePath $MappedDrive.RemotePath -Persistent $True
         } catch {
             Write-Host "There was an error mapping $MappedDrive.RemotePath to $MappedDrive.LocalPath"
         }
     }
     $i = $i - 1
     if($error.Count -eq 0 -Or $i -eq 0) {break}

    Start-Sleep -Seconds 30

}

Thursday, September 27, 2018

Convert Excel Files to CSV in batch via context menu : Convert Many Excel files to CSV in 1 click

RunDTech.XLStoCSV.ReadMe

Summary: Convert xls and xlsx files to csv via a batch menu
Code: C#


1. Copy this folder to C:\Temp\DTech.XLStoCSV\
2. you should see this in C:\Temp\DTech.XLStoCSV\ http://prntscr.com/kzn325
3. Run reg file RunDTech.XLStoCS.reg
4. Right click on the "C:\Temp\DTech.XLStoCSV\Test" folder (if any issues copy test folder to C:\Temp\Test
5. You should see http://prntscr.com/kzn372
6. Click the XLStoCSV menu.
7. You should see the below output


     C:\Temp\DTech.XLStoCSV>"C:\Temp\DTech.XLStoCSV\RunDTech.XLStoCSV.bat" C:\Temp\Te
     st
      ******* Start DTech.XLStoCSV.64.exe C:\Temp\Test  Thu 09/27/2018 23:55:19.84
     DTech.XLStoCSV START
     START CSV  C:\Temp\Test\1.xlsx
     DONE CSV  C:\Temp\Test\1.xlsx
     START CSV  C:\Temp\Test\2.xls
     DONE CSV  C:\Temp\Test\2.xls
     DTech.XLStoCSV DONE
      ******* Start DTech.XLStoCSV.32.exe C:\Temp\Test  Thu 09/27/2018 23:55:19.93
     DTech.XLStoCSV START
     START CSV  C:\Temp\Test\1.xlsx
     DONE CSV  C:\Temp\Test\1.xlsx
     START CSV  C:\Temp\Test\2.xls
     DONE CSV  C:\Temp\Test\2.xls
     DTech.XLStoCSV DONE
     ****************DONE  Thu 09/27/2018 23:55:19.98 synch
    
     8. If you encounter any error try downloading MS Access Redist kit
https://www.microsoft.com/en-us/download/details.aspx?id=13255

9. I wrote this code in 1 night, tested on over 50 xls and xlsx files


Download Here

Wednesday, September 26, 2018

Chrome Extensions to improve Data Entry Productivity:

Chrome Extensions to improve Data Entry Productivity:

These tools make the difference between 30 minutes checking checking boxes or spending 1 minute on a form and the other 29 min doing what U want.Save TIME!!

Anyone needing assistance feel free to contact me, if U think there is a task that is repetitive then most likely there is a tool to make your life easier!! Whether it be eBay forms or filling out a PO or entering data into SalesForce, if u are entering data into web based forms, there is an Extension to speed up ur work productivity. (or we can write code if there isn’t one.)

Access your chrome extensions here

Forms Productivity:

1. Checkbox checker, this allows user to check many checkboxes on a form using mouse point,simply left click and drag over the checkboxes,

Online Tutorial

2. Auto Expander: this is so awesome!! use this to create macros for text you write over and over again, such as signatures, descriptions, names ect ect. This known as text expansion, basically its a macro tool to help to input data into forms QUICKLY!!

Online Tutorial

This is how I setup my Auto Expander (also see Figure 1 below)

3. AutoFill: Use this to create advanced Auto Filling of forms, this combined with Auto Expander helps fill any UI.

Online Tutorial

This is how I setup AutoFill and used it with Auto Expander

4. Fillr: Use for auto fill of name, address, emails, personal data. Good for shopping.

** Sandbox Test Forms , to experiment: Contact Form Example and a Survey Form Example


Email + Other Extension,

Boomerang : Schedule email in the future

Batch Multi Forward: Forward MULTIPLE emails to a recipient in 1 click,

Copy All Urls : BOOM copy / paste hundreds of urls in 1 click!!!!!!!

Auto Refresh tabs, use this to refresh screen every Thumbs down seconds


Figure 1:Auto Text Expander

image

Figure 2: AutoFillOptions:

image

Figure 3: AutoFill Profile

image

ShareX hotKeys compatible with Lightshot Hotkeys

ShareX hotKeys compatible with Lightshot Hotkeys

Use below settings top ensure that you can use both apps at same time, use keyboard keys to capture screen shots + recordings reliably.

The main thing we want is to ensure that Lightshot Printscreen does not interfere with ShareX Print screen, we can do this by creating mutually exclusive hotkeys.

Lightshot:

PrintScr key: used for lightshot since lightshot is great for capture / sharing and annotating screen image captures.

ShareX:

Shift + Print :I use Shift + Print screen to capture images for ShareX and combinations of

Shift + F7 and CTRL+Shift+F7 for screen recording.

Then only keys u have to remember is: Capture Screen: PrintScr Record Screen: Shift+F7 (or Ctrl+Shift+F7)

Set the hotkeys

See this video tutorial here

*** Remember that uploaded screen recordings can be viewed as a Video by simply adding a v to url:

https://i.imgur.com/IqtkYYz.gif

https://i.imgur.com/IqtkYYz.gifv


Lightshot:

1.Open lightshot

2. Select Option

3. Hotkeys tab

4. DeSelect the “Auto save…” item

5. Set the main Hotkey to PrintScr

6. End result:

clip_image002

ShareX:

1. RightClick ShareX in Notification area

2. Set Options see Figure 1 below

3. Select Hotkey settings, See Figure 2 below

4. Set hotkeys as follows:

Figure 1:

clip_image004

Figure 2:

clip_image006

Tuesday, September 25, 2018

Text Replace Trick and Tips

TextPad: Add Line Breaks at ], characters

  1. Click Ctrl + h or Search -> Replace on the top menu
  2. Under the Search Mode group, select Regular expression
  3. In the Find what text field, type ],\s*
  4. In the Replace with text field, type ],\n
  5. Click Replace All


TextPad: How to Add extra Line breaks at end of each line

You can quickly do this by using a feature called "Regular Expressions" to find and add empty lines.

  1. Open up the Find/Replace (Search menu > Replace)
  2. In the "Find what" field, type the following: (^.+$)\n(^.+$)
  3. In the "Replace with" field, type the following: \1\n\n\2
  4. Tick the "Regular expression" checkbox
  5. Click the Replace All button at least twice, but perhaps 3 times, until you get the message Cannot find the Regular Expression
  6. Untick the "Regular expression" checkbox
  7. Close the Replace dialog
  8. Confirm the file is formatted as you are expecting
  9. Save the file.

TextPad: Replace Line Break with a comma

Here is an example document with random words:

document with words in multiple lines

And you fire the replace operation by hitting F8.
Find What: type \n
Replace with: type , (or whatever character you need)

Check "Regular Expression" box before you search / replace

And it will be all merged on to the same line. This looks simple while for an user trying to do this on a several hundred line file, would give big sigh of relief after learning this.

Final result after the replace operation

TextPad: How to Remove All Lines Except the Ones Containing a Pattern

Similar to NotePad,[1] you can remove all lines except the ones containing a pattern in TextPad.[2,3] There is an easy way to achieve this. Basically, you need to perform 3 steps:

  1. Bookmark all lines containing a pattern
  2. Inverse bookmark
  3. Delete all bookmarked lines

Bookmark All Lines Containing a Pattern


For this demonstration, we want to remove all lines except the ones containing the following pattern:
  • "concurrent-mark-end"
To bookmark all lines containing a pattern:
  1. Go to Menu "Search" and select "Find..."  
  2. Specify the pattern in "Find what:" and select "Regular expression"
  3. Hit Button "Mark All"

Inverse Bookmark


To inverse bookmark, do:
  • Go to Menu "Search" and select "Inverse Bookmarks"
You should see some lines are marked and some not.

Delete All Bookmarked Lines


To delete all bookmarked lines, do:
  1. Go to Menu "Edit" and select "Delete > Bookmarked Lines"
and you should see the final results below:


RegEx Summary


Summary of regular expressions:
Default Operator: POSIX Operator: Description:
. . Any single character. Example: h.t matches hat, hit, hot and hut.
[ ] [ ] Any one of the characters in the brackets, or any of a range of characters separated by a hyphen (-), or a character class operator (see below). Examples: h[aeiou][a-z] matches hat, hip, hit, hop, and hut; [A-Za-z] matches any single letter; x[0-9] matches x0, x1, …, x9.
[^] [^] Any characters except for those after the caret "^". Example: h[^u]t matches hat, hit, and hot, but not hut.
^ ^ The start of a line (column 1).
$ $ The end of a line (not the line break characters). Use this for restricting matches to characters at the end of a line. Example: end$ only matches "end" when it's the last word on a line, and ^end only matches "end" when it's the first word on a line.
\< \< The start of a word.
\> \> The end of a word.
\t \t The tab character.
\f \f The page break (form feed) character.
\n \n A new line character, for matching expressions that span line boundaries. This cannot be followed by operators '*', '+' or {}. Do not use this for constraining matches to the end of a line. It's much more efficient to use "$".
\xdd \xdd "dd" is the two-digit hexadecimal code for any character.
\( \) ( ) Groups a tagged expression to use in replacement expressions. An RE can have up to 9 tagged expressions, numbered according to their order in the RE. The corresponding replacement expression is \x, for x in the range 1-9. Example: If \([a-z]+\) \([a-z]+\) matches "way wrong", \2 \1 would replace it with "wrong way".
* * Matches zero or more of the preceding characters or expressions. Example: ho*p matches hp, hop and hoop.
? ? Matches zero or one of the preceding characters or expressions. Example: ho?p matches hp, and hop, but not hoop.
+ + Matches one or more of the preceding characters or expressions. Example: ho+p matches hop, and hoop, but not hp.
\{count\} {count} Matches the specified number of the preceding characters or expressions. Example: ho\{2\}p matches hoop, but not hop.
\{min,\} {min,} Matches at least the specified number of the preceding characters or expressions. Example: ho\{1,\}p matches hop and hoop, but not hp.
\{min,max\} {min,max} Matches between min and max of the preceding characters or expressions. Example: ho\{1,2\}p matches hop and hoop, but not hp or hooop.
\| | Matches either the expression to its left or its right. Example: hop\|hoop matches hop, or hoop.
\ \ "Escapes" the special meaning of the above expressions, so that they can be matched as literal characters. Hence, to match a literal "", you must use "". Example: \< matches the start of a word, but \\< matches "\<".
Character Class Operators "[: ... :]":
These can be used in class expressions as an alternative way of representing classes of characters. For example, [a-z0-9] is equivalent to [[:lower:][:digit:]]. (Note the extra pairs of brackets.) The defined classes are:
Expression: Description:
[:alpha:] Any letter.
[:lower:] Any lower case letter.
[:upper:] Any upper case letter.
[:alnum:] Any digit or letter.
[:digit:] Any digit.
[:xdigit:] Any hexadecimal digit (0-9, a-f or A-F).
[:blank:] Space or tab.
[:space:] Space, tab, vertical tab, return, line feed, form feed.
[:cntrl:] Control characters (Delete and ASCII codes less than space).
[:print:] Printable characters, including space.
[:graph:] Printable characters, excluding space.
[:punct:] Anything that is not a control or alphanumeric character.
[:word:] Letters, hypens and apostrophes.
[:token:] Any of the characters defined on the Syntax page for the document class, or in the syntax definition file if syntax highlighting is enabled for the document class.
Example:
HTML tags are in matched pairs of <…>, such as <FONT SIZE=+1>. To match any tag that begins and ends on the same line, use the regular expression:
<[^>]*>
This matches a "<", followed by zero or more characters, excluding ">", followed by a ">". Note that "*" finds the longest matching sequence on a line, so the regular expression:
<.*>
would be incorrect, because it would not stop at the first ">", if there was more than one on the line.
For more information and examples, see regular expressions, and replacement expressions in the Reference section.

Friday, September 21, 2018

Compare Expensify vs XPenditure side by side Receipt scanning results

This is an update to last blog pot RE receipts, Im going with Expensify for Receipts and MoneyLuver for daily budgeting. Ill update in a year on how it goes

Xpenditure Ill pass on for now,..it has too much and not enough in OCR Categorizing

Compare Android Receipt Apps

and

PC Mags Comparison of Expense Tracking Apps

image

Friday, September 14, 2018

Christa’s Install Profile: Phone, Computer, Browser Tools

Items in yellow are very important

Phone

:
     Go Here and copy to phone: Y:\Work\_Profile\InstallProfile\PM\PhoneApps
     WiFi Connection Manager-com.roamingsoft.manager-160-v1.6.5.8.apk
     TypeApp-com.trtf.blue-12967-v1.9.4.13.apk
     To-Do-com.microsoft.todos-83-v1.37.83.apk
     Task Manager-com.rhythm.hexise.task-66-v2.3.5.apk
     Remote Utilities-com.remoteutilities.mviewer-68200-v11.18.apk
     Quickoffice-com.quickoffice.android-1503111803-v6.5.1.12.apk
     QuickEdit-com.rhmsoft.edit-85-v1.3.6.apk
     Outlook-com.microsoft.office.outlook-267-v2.2.168.apk
     NordVPN-com.nordvpn.android-227-v2.8.6 playstore.apk
    Keep Screen On-eu.aboutall.android.tools.kepscreenon-3-v1.2.apk
     Hacker's Keyboard-org.pocketworkstation.pckeyboard-1039003-v1.39.3.apk
     FAST-com.netflix.Speedtest-88-v1.0.8.apk
     Excel-com.microsoft.office.excel-2001479445-v16.0.9330.2080.apk
    ES File Explorer-com.estrongs.android.pop-636-v4.1.7.1.24.apk
     DS file-com.
synology.DSfile-292-v4.11.0.apk
     Drives-com.mobile_infographics_tools.mydrive-4019-v4.0.1.9.apk
     App Backup & Restore-mobi.usage.appbackup-10-v1.0.9.apk
     AnyDesk-com.anydesk.anydeskandroid-40004-v4.0.4.apk

   

Computer


Chrome Extensions: Go here and add them:

https://chrome.google.com/webstore/category/extensions?hl=en-US&utm_source=chrome-ntp-launcher
    
         AdBlock
         Boomerang for Gmail
         Chrome Remote Desktop
         Copy All Urls
         Lightshot OneNote Web Clipper
         Belt.IO
         Multi Forward for Gmail

   Programs to Install: (will install on new computer)


        
         VirtualCloneDrive
         OneNote (Office)
         MoveMouse
         CCleaner
         Malwarebytes Anti-Malware
         HijackThis
         Notepad++
         Lightshot
         WinRar
         Remote Utilities: Remote Desktop Software
         Any Desk

         ClickOff
         WinDiff
         WinMerge
         Process Explorer
         Adobe
         PDF Architect
         ShareX screen Record
         PointerFocus
         Open Live Writer (blog) + MS Office

        NORD VPN
    

Browser Links : Use Copy All Urls Chrome Extension to copy/paste

    Online Tools for remote PM/BA/Devs

Items in Yellow, u will NEED them:
     CloudNotes
         https://shrib.com/#christac3
         https://belt.io/belt
         https://keep.google.com/u/0/
         https://www.blogger.com/blogger.g?blogID=7869834720503477406#allposts

    TextTools
         http://textmechanic.com/text-tools/basic-text-tools/addremove-line-breaks/
         https://www.quickdiff.com/
         https://www.online-convert.com/
         https://techinternets.com/copy_calc?do
         https://www.csgenerator.com/
         http://gifmaker.me/
         http://www.procato.com/misspeller/
         https://wordcounter.io   

         https://delim.co

        https://goodcalculators.com/data-storage-conversion-calculator/

    Diagrams
        https://www.draw.io/
         https://www.pdfescape.com/windows/

    CloudStorage

        https://drive.google.com/drive/u/0/my-drive
         https://onedrive.live.com/about/en-us/
         http://67.8.252.232:5000/

Reminders

    https://www.futureme.org/  

    https://ohdontforget.com/

DeveloperForums
         https://stackoverflow.com/users/881314/jason-doyle
         https://github.com/
         https://www.w3schools.com/
         http://jsbin.com/uLECIyu/1/edit?html,css,js,output
         http://rextester.com/

Wednesday, September 12, 2018

Screen Recording Open Source Tool : Latest and Greatest ShareX

Save screen captures as Gif or Video or image

See my creen recording: https://i.imgur.com/0KzslPV.gifv

https://getsharex.com/
ShareX

A fine choice if you want to share your screen recordings online

Capture as video file or GIF

Dozens of export options

Also great for static screen grabs

Unintuitive interface

Not suitable for games

ShareX is an open source app for capturing still screen grabs and recording videos. There are no watermarks or time limits to worry about, but the interface isn't the most intuitive in the world so you’ll be best off using keyboard shortcuts. For quick reference, you can start a recording by tapping Shift + Print Screen, and stop it again using Ctrl + Shift + Print Screen.

You can also use this free screen recorder to save your capture as a GIF rather than a video file, which can be extremely useful for sharing on forums and social media.

Not only is ShareX a brilliant free screen recorder, it can also capture an entire scrolling webpage, capture and identify text via OCR, and even capture your screen according to a schedule.

Another of its best features is the ability to send your captured grabs and videos straight to a file-sharing or social media site. There’s a vast array of options, which you can check out on the project’s site.

Unfortunately, ShareX doesn’t support taking screen grabs or recordings from games running in full-screen mode. Other than that, it’s a superb screen recorder that will serve you extremely well.

Tuesday, September 11, 2018

Use Tesseract OCR with C# to separate receipt images from non-text images

Using TesseractEngine C# wrapper to identify image with text, based on default confidence and learning, flag image as either to move or not to move. This method returns a List<> of file names that can then be used to move the files to a separate directory.


This comes in handy when you have a dump of Phone Images with Camera images mixed with Receipts. You can either manually move files or use this to reduce the manual burden. See attached zip, and here for details of source lib and demo.

More Samples here

Download Source Here

App is run with following params:

ReceiptMover ocr c:\temp\input c:\temp\output *.jpg .4

/// <summary>
        /// Convert image to tif and OCR using TesseractEngine 3.0.2
        /// </summary>
        /// <param name="imgPath"></param>
        /// <param name="dataPath"></param>
        /// <param name="minconf"></param>
        /// <returns></returns>
        static bool OCRImage(string imgPath, string dataPath, float minconf)
        {

           bool r = false;
            bool doKill = false;
            string newPF = imgPath;
            try
            {

               // create tif if neeeded,
                var ext = FileHelper.GetFileNameExtension(imgPath);
                if (!ext.ToUpper().StartsWith("TIF"))
                {
                    WriteLine("CONVERT TO TIF ->....... " + FileHelper.GetFileName(imgPath));
                    using (var imgB = new Bitmap(imgPath)) // Load of the image file from the Pix object which is a wrapper for Leptonica PIX structure
                    {

                       string newF = FileHelper.GetFileName(imgPath).ToUpper().Replace(ext.ToUpper(), "tif".ToUpper());
                        newPF = Paths.Combine(FileHelper.GetFilePath(imgPath), newF);
                        if (File.Exists(newPF))
                            FileHelper.KillFile(newPF);
                        imgB.Save(newPF, System.Drawing.Imaging.ImageFormat.Tiff);
                       
                        WriteLine("SAVED  TO TIF ->....... " + newPF);
                        doKill = true;
                    }
                }


               //ocr tif ,if any text we seperate it from non receipt/text images
                using (var tEngine = new TesseractEngine(@"./tessdata", "eng", EngineMode.Default)) //creating the tesseract OCR engine with English as the language
                {
                   
                    using (var img = Pix.LoadFromFile(newPF)) // Load of the image file from the Pix object which is a wrapper for Leptonica PIX structure
                    {
                        WriteLine("TesseractEngine.Process(img) start at ->....... " + FileHelper.GetFileName(imgPath) + ", " + DateTime.Now.ToString());
                        //using (var page = tEngine.Process(img, PageSegMode.Auto)) //process the specified image
                         //using (var page = tEngine.Process(img)) //process the specified image
                        using (var page = tEngine.Process(img, PageSegMode.SingleColumn)) //process the specified image
                        {

                       
                            WriteLine("TesseractEngine.Process(img) END at -> " + FileHelper.GetFileName(imgPath) + ", " + DateTime.Now.ToString());
                            var text = page.GetText(); //Gets the image's content as plain text.
                                                       // var textO = page.GetHOCRText(0); //Gets the image's content as plain text.
                            WriteLine("tEngine.GetText(img) END at -> " + FileHelper.GetFileName(imgPath) + ", " +  DateTime.Now.ToString());

                           if (!string.IsNullOrEmpty(text))
                            {
                                text = text.Trim().Replace("/n", "");
                            }
                            if (StringUtil.IsValid(text))
                            {

                               Debug.WriteLine("Found text: " + text); //display the text
                                var conf = page.GetMeanConfidence();
                                WriteLine("GetMeanConfidence-> " + conf.ToString()); //Get's the mean confidence that as a percentage of the recognized text.
                                if (conf >= minconf)
                                {
                                    WriteLine("****Found RECEIPT: " + FileHelper.GetFileName(newPF)); //display the text
                                    r = true;
                                }

                           }
                            else
                            {
                                WriteLine("NODATA: " + FileHelper.GetFileName(newPF)); //display the text
                            }

                       }
                    }
                }
            }
            catch (Exception e)
            {
                WriteLine("OCRImage Error: " + e.Message);
            }
            //remove temptiff
            if (doKill)
            {
                FileHelper.KillFile(newPF);
            }
            return r;
        }


Wednesday, September 5, 2018

Code Fiddle Tools!

Some of the coolest coding fiddle sites I have found, really good for those who code and want to share or collaborate remotely plus some other tools like code formatting and conversion,. All in all the below sites are related to coding, code formatting or code conversions in the realm of languages that I use daily:

C#, JS, SQL + some text tools like online diff/csv tools. Stuff developers do every day and not always in the IDE:


Fiddles:

JS Fiddle: what started it all!

Rextester (really cool online fiddle tool, multi languages!! (I found it WAY better than SQL Fiddle which doesn’t always work)

DotNetFiddle for the .net folks

C# Pad

jsbin – every knows this

ALL FIDDLES

Format/Conversion/Translate

SQLTidy

SQL FSQL Format (like tidy)

SQL Convert so cool!

C# Prettify

Text Tools:

Shrib share a note in the cloud

Text Mechanic fix anything with txt like line breaks ect

Delim Tool CSV tool

Diff Online

Misc:

Visual Studio/TFS Online (what else can I say)

Use VLC to Start Streaming Playlist and Control via Browser :

1. Start a stream of your fav playlist, I am using VLC 2.8

example command: Stream playlist to port 8085

cd "C:\Program Files\VideoLAN.2.8\VLC"
vlc.exe -I dummy -vvv C:\Temp\MyPlayList.xspf --sout=#transcode{vcodec=none,acodec=mp3,ab=192,channels=2,samplerate=44100}:http{mux=raw,dst=:8085/} :sout-keep

More Help and My Previous Post on VLC Streaming

2. Router: Port forward to port (8085) on router to IP:port (see cmd dst=:8085)

3. Phone: Listen to your stream from internet (listen to your music from anywhere!!!)

Get your port from whatsmyip

See Figure 3

4. VLC: Control VLC playlist (Next/previous ect) using web interface setup:

4.a: See Figure 1 and Figure 2

4.b: Port forward to : IP:LuaPort (from Figure 2)

4.c: You can now control via browser! (see Figure 4:


Figure 1:

image

Figure 2:


image


Figure 3:


Figure 4:

image

Saturday, September 1, 2018

Change Windows 10 Default View in Search Results

After a search Windows 10 shows content view , which for me is useless, I prefer View Details view to appear however Win10 engineers prove this useless content view as the default search results. To change this there is a great reg file solution to tweak Win10 to show Details instead of Content View. Great little tweak to add to your bag of tweaks!


Reg Tweak courtesy of winhelponline

Windows Registry Editor Version 5.00

;Fixes search results defaults to Content view.
;Sets Details view as default search results view for Generic folders.

[-HKEY_CURRENT_USER\SOFTWARE\Classes\Local Settings\Software\Microsoft\Windows\Shell\BagMRU]

[-HKEY_CURRENT_USER\SOFTWARE\Classes\Local Settings\Software\Microsoft\Windows\Shell\Bags]

[HKEY_CURRENT_USER\SOFTWARE\Classes\Local Settings\Software\Microsoft\Windows\Shell\Bags\AllFolders\Shell\{7fde1a1e-8b31-49a5-93b8-6be14cfa4943}]
"LogicalViewMode"=dword:00000001
"Mode"=dword:00000004


Restart explorer.exe or reboot

Yuck!:

image


Instead!:

image

Thursday, August 23, 2018

Clear Asp.Net Temp Folders and Files using bat file

Per best practices we should clean VS temp folders to speed up build/debug sessions for VS IDE. as noted e.g: here
Works on Win 7+

REM Files
del /f /q "C:\Users\%USERNAME%\AppData\Local\Microsoft\WebSiteCache\*.*"
del /f /q "C:\Users\%USERNAME%\AppData\Local\Temp\Temporary ASP.NET Files\*"


REM Folders
for /d %x in ("C:\Users\%USERNAME%\AppData\Local\Microsoft\WebSiteCache\*") do @rd /s /q "%x"
for /d %x in ("C:\Users\%USERNAME%\AppData\Local\Temp\Temporary ASP.NET Files\*") do @rd /s /q "%x"



Tuesday, August 21, 2018

SSRS SharePoint Integrated Mode Report Migration to Azure O365 SPO Options

References:

https://technet.microsoft.com/en-us/library/sharepoint-online-service-description.aspx#bkmk_tableo365

https://answers.microsoft.com/en-us/msoffice/forum/all/how-can-i-show-ssrs-reports-in-sharepoint-online/1d94a167-6ac7-49f3-9201-c6d04df4ff9a?auth=1

http://mitrai.com/tech-guide/ssrs-report-server-configuration-on-azure-virtual-machines/

http://www.axioworks.com/2018/08/display-sql-server-reporting-services-reports-in-sharepoint-online/?utm_source=collab365&utm_medium=collab365today&utm_campaign=daily_digest

Support Matrix

clip_image002

Summary of Options:

Option 1: Preserve SSRS Reports:

Migrate from On-Prem SSRS to O365 SSRS

Benefit: Preserve RDL’s, do not have to re-develop reports

Disadvantage: O365 SPO does not support SSRS Integrated Mode, Need new or add an SSRS app server instance, possible difficulties with SSO between O365 and SSRS

Option 2: Replace SSRS Reports :

Replace RDL Report with SharePoint Excel Services, PowerBI or equivalent.

Benefit: Implement reports using new technology, integrated with SPO, reduced migration strain of not needed addiitonal app server,

Disadvantage: Re-code from scratch each report, risky.

Details:

Option 1: Keep SSRS: Migrate from On-Prem SSRS to O365 SSRS

1. Document SSRS App Server Migration:

From

Product: SSRS

Environment: OnPrem

Mode: SharePoint Integrated Mode

Version: SQL Server 2012 SP1 : Detected on Report View Web Part: Version=11.0.3000.0

To

Product: SSRS

Environment: OnPrem

Mode: Native

Version: SQL 2016(?, TBD)

2. VM Hosting Environment Migration:

a. Create Azure SSRS VM

i. New Azure VM:

1. Install SQL Server

2. Install / Config SSRS per this ref

ii. Existing Azure VM with SQL Role:

1. Enable SSRS

2. Configure SSRS Instance per section Configure Sql Reporting Service

b. Azure SSRS Native instance is online!

i. https://[host]/ReportServer/

3. OMS Report Site and Report Migration : Migrate the OMS RDL from OnPrem SSRS Integrated to Azure SSRS Native

a. Publish Reports to Azure SSRS Native:

i. Migrate the RDL from OnPrem SSRS Integrated to Azure SSRS Native

ii. Download RDLs from https://iportal.seacorholdings.com/reports/OMS%20Reports

iii. Create VS.Net BI sln to enclose

iv. Upload the RDLs to Azure SSRS Native per this reference, section To Create and Publish Reports to the Azure Virtual Machine

b. OMS Report Site : Create OMS Reports in SharePoint Online :

i. Create “OMS Reports” sub site

4. Integrate Azure SSRS Native and O365 SPO

a. Integrate Reports from SSRS Azure into SPO

b. Add SharePoint Site Page with PageViewer per this ref

5. Concerns:

1. SSO from Azure SSRS to O365 SPO

2. Lack of SharePoint

Option 2: Replace SSRS Reports :

1. Develop New Reports to replace OMS

a. Convert to Excel

i. https://answers.microsoft.com/en-us/msoffice/forum/all/how-can-i-show-ssrs-reports-in-sharepoint-online/1d94a167-6ac7-49f3-9201-c6d04df4ff9a?auth=1

b. Rewrite RDLs as SPO Excel Services

c. Rewrite RDLs as Power BI Desktop

d. Publish Reports to SPO OMS Reports Site


Option 2: Replace SSRS Reports :

1. Develop New Reports to replace OMS

a. Convert to Excel

i. https://answers.microsoft.com/en-us/msoffice/forum/all/how-can-i-show-ssrs-reports-in-sharepoint-online/1d94a167-6ac7-49f3-9201-c6d04df4ff9a?auth=1

b. Rewrite RDLs as SPO Excel Services

c. Rewrite RDLs as Power BI Desktop

d. Publish Reports to SPO OMS Reports Site