tag:blogger.com,1999:blog-44263901898099845912024-03-05T20:17:11.946+05:30Computer and NetA wiki related to wide variety of technology topics - LabVIEW, TestStand, Database, Python, Blogger, Domains and more!Unknownnoreply@blogger.comBlogger122125tag:blogger.com,1999:blog-4426390189809984591.post-14086749872725156722022-12-03T11:40:00.001+05:302022-12-03T11:40:40.747+05:30Quick Way to Add Project Root to Python Search Path<p>When you are trying to execute a Python script which is not present directly at the project root folder and you are trying to import a module present at the root directory, you may get an import error like below.<br>
<strong>ModuleNotFoundError: No module named 'YourModuleName’</strong></p>
<p>To avoid the above issue, we need to add the project root directory to the Python search path. Instead of dynamically adding the project root directory during each run, there is a way to add it permanently.</p>
<h1 id="permanently-adding-project-root-directory-to-python-search-path">Permanently Adding Project Root Directory to Python Search Path</h1>
<p>For example, if your project folder structure is as below, where .venv is the location of your python virtual environment.</p>
<ul>
<li>Project Root
<ul>
<li>.venv</li>
<li>module 1</li>
<li>module 2</li>
</ul>
</li>
</ul>
<p>To add the project root directory to the Python search path, create a file called ‘projectPath.pth’ at<br>
<strong>.venv\Lib\site-packages\projectPath.pth</strong></p>
<p>Open above file in Notepad and add the project root directory path. For adding multiple paths, use separate lines for each path. The path can either be specified absolute or relative.</p>
<h2 id="using-relative-path-in-.pth-file">Using Relative Path in *.pth File</h2>
<p>For the below folder structure,</p>
<ul>
<li>Project Root
<ul>
<li>.venv
<ul>
<li>Lib
<ul>
<li>site-packages
<ul>
<li>projectPath.pth</li>
</ul>
</li>
</ul>
</li>
</ul>
</li>
<li>module 1</li>
</ul>
</li>
</ul>
<p>The relative path to add the project root directory to Python is<br>
<code>..\\..\\..\\</code></p>
<h1 id="reference">Reference</h1>
<ol>
<li><a href="https://stackoverflow.com/a/30728643">Permanently Add a Directory to Windows Search Path</a></li>
</ol>
<p>Know of a better way to add the project root directory to Python? Do let us know in the comments :-)</p>
Unknownnoreply@blogger.com0tag:blogger.com,1999:blog-4426390189809984591.post-11774812300807756552022-10-28T13:19:00.002+05:302022-10-28T13:19:38.605+05:30Use Folder as a Python Repository<p>Traditionally, if you would like to setup a private python repository, it requires hosting and setting up a web server:<br>
<a href="https://packaging.python.org/en/latest/guides/hosting-your-own-index/">https://packaging.python.org/en/latest/guides/hosting-your-own-index/</a></p>
<p>There is an alternate way by which you can easily setup a local folder/directory or a network share drive as a private python repository. This could be useful for local testing or if you are looking for a quick solution for just publishing your packages to a network share drive for your team to use within your organization.</p>
<p>The way to do this is, configuring your folder/share drive path to pip’s find-links. There are multiple ways to do this:</p>
<ol>
<li>Using Terminal</li>
<li>Using pip File</li>
</ol>
<p>Using pip file is recommended, as it would be persisting.</p>
<h1 id="using-terminal">Using Terminal</h1>
<h2 id="in-windows-command-prompt">In Windows Command Prompt:</h2>
<p>Configuring the folder/share drive path to the environment variable - PIP_FIND_LINKS.</p>
<p>For example, if you are having the python packages in a folder called “PyRepo” in D: drive, then the commands would be:</p>
<pre><code>pipenv shell
set PIP_FIND_LINKS=D:\\PyRepo
pipenv install simple_pypackage
</code></pre>
<h2 id="in-git-bash">In Git Bash:</h2>
<p>Equivalently in git bash,</p>
<pre><code>PIP_FIND_LINKS=D:\\PyRepo
pipenv install simple_pypackage
</code></pre>
<p>One issue you might face with this approach is that, setting of the environment variable within the virtual environment would not be persisting, requiring you to set the environment variable each time you activate it.</p>
<h1 id="using-pip-file-recommended">Using pip File (Recommended)</h1>
<p>Alternatively, you can setup the find-links in pip file, which would be persisiting. A system has multiple pip files, which are located at:</p>
<ol>
<li>Global: <code>C:\ProgramData\pip\pip.ini</code></li>
<li>User:<code>%APPDATA%\pip\pip.ini</code></li>
<li>Site: <code>%VIRTUAL_ENV%\pip.ini</code></li>
</ol>
<p>Key to be added to the pip configuration file:</p>
<pre><code>[global]
find-links =
D:\\PyRepo1
D:\\PyRepo2
</code></pre>
<p>Depending on your requirement, you can add the above contents to any one of the above 3 pip.ini files.</p>
<p>Multiple paths for find-links can be separated by space or new line character.</p>
<p>You can either do this manually or programmatically. To update the above configuration programmatically, you can use the below command:</p>
<pre><code>pip config <file_option> set <section>.<key> <value>
</code></pre>
<p>To update the configuration to the global pip file and use the ‘global’ section in the configuration file, below is the command:<br>
<code>pip config --global set global.find-links 'D:\\PyRepo1 D:\\PyRepo2'</code></p>
<h1 id="references">References</h1>
<ol>
<li><a href="https://stackoverflow.com/a/64213977/11355778">https://stackoverflow.com/a/64213977/11355778</a></li>
<li><a href="https://pip.pypa.io/en/stable/topics/configuration/">https://pip.pypa.io/en/stable/topics/configuration/</a></li>
</ol>
Unknownnoreply@blogger.com0tag:blogger.com,1999:blog-4426390189809984591.post-74941438232066875482022-04-19T22:08:00.002+05:302022-04-19T22:08:57.288+05:30Quick Way to Configure Default PowerPoint Theme<p>If you have a *.potx PowerPoint theme, you can make it as your default theme by placing it at<br>
<strong>%appdata%\Microsoft\Templates\blank.potx</strong></p>
<p>Restart PowerPoint and your new theme would be used as the default PowerPoint theme. That’s it!</p>
Unknownnoreply@blogger.com0tag:blogger.com,1999:blog-4426390189809984591.post-54758880632746782432022-04-19T22:04:00.002+05:302022-04-19T22:04:56.804+05:30Alpha Numeric String Sorting in LabVIEW<p>Consider that you have a list of Strings like “File 1, File 2, File 3,… File 10, File 11… File 20”.</p>
<p>When you do default LabVIEW sorting of above string array, the string “File 10” would occur after “File 1” and before “File 2”. But what we ideally want is, the sorted elements to be in the order “File 1, File 2,… File 10, File 11,…, File 20”.</p>
<p>This can be done using the open source reusable “<strong>Alpha Numeric Sort 1D Array</strong>”, which is part of “<strong>SLL Toolkit</strong>”, an open source LabVIEW toolkit.<br>
<img src="https://i.imgur.com/kEW7n5w.png" alt="LabVIEW Alpha Numeric String Sorting"></p>
<h1 id="how-does-this-work">How does this work?</h1>
<p>The tool splits each string into an array of sortable clusters containing the numeric and string parts - which then gets sorted in the order that we want. We take the string and get 1st numeric component (if not present, it will be taken as 0), then we take the next string component. This process gets repeated till the entire string is exhausted. This array of clusters is then sorted, which gives our required sorted output.</p>
<p>LabVIEW block diagram of the logic is available below.<br>
<img src="https://i.imgur.com/50WPUju.png" alt="Alpha Numeric String Sorting in LabVIEW"><br>
For example, if the string is “File 1 Item 21.txt”, the sortable cluster is:<br>
<img src="https://i.imgur.com/xS7ql51.png" alt="Simple Alpha Numeric String Sort Intermediate Sortable Cluster"><br>
The reason why it maintains a numeric array instead just numeric is, there are multiple scenarios where the string would contain a non-standard number like date, time stamp and IP address. To handle those cases in a generic manner, a numeric array is used.</p>
<p>For example, if the string is “File 14.01.2022 Item 21.txt”, the sortable cluster element is:<br>
<img src="https://i.imgur.com/cx2bWUK.png" alt="Alpha Numeric String Sort Intermediate Sortable Cluster containing Date"></p>
<h1 id="installing-sll-toolkit">Installing SLL Toolkit</h1>
<p>SLL Toolkit is an open source LabVIEW toolkit (MIT License) with a collection of useful general purpose LabVIEW reusables like the Alpha Numeric String Sorting.</p>
<p>You can install SLL Toolkit using VI Package Manager:<br>
<img src="https://i.imgur.com/mzt1FBj.png" alt="Install SLL Toolkit"><br>
Source code for SLL Toolkit is available in GitHub:<br>
<a href="https://github.com/solitontech/SLL-Toolkit">https://github.com/solitontech/SLL-Toolkit</a></p>
Unknownnoreply@blogger.com0tag:blogger.com,1999:blog-4426390189809984591.post-77958196644217951992022-03-03T19:35:00.002+05:302022-03-03T19:35:45.100+05:30Making Suggestions to Python Intellisense<p>Usually intellisense works for your code, unless it doesn’t.</p>
<h1 id="when-doesnt-intellisense-work">When doesn’t intellisense work?</h1>
<p>Since Python is a dynamically typed language, it is not always possible to accurately determine the data type in some scenarios.</p>
<p>Consider below code:</p>
<pre><code>def get_random(type):
if type == 'str':
return 'hello'
else:
return 1
data = get_random('str')
</code></pre>
<p>What does the ‘get_random’ function return - a string or an Integer? The answer is, it depends.</p>
<h1 id="making-suggestions-to-intellisense">Making Suggestions to Intellisense</h1>
<p>Is there a way to still make intellisense show up, even when it doesn’t? Yes, you can.</p>
<p>Say you have an Python function/API which has some complex logic due to which the return type of the function is not correctly determined by the IDE. In this case, you can specify the return data type of the function to make suggestions to the IDE’s Intellisense.</p>
<p>For example:</p>
<pre><code>class parent():
def func_1(self):
return 1
def func_2(self):
return 2
def get_random()->parent:
return 1
data = get_random()
</code></pre>
<p>Here you are explicitly stating to the IDE that the return type of the function is of type ‘parent’ class. Due to this, intellisense would make suggestions assuming this to be true.</p>
<h2 id="what-about-outside-functions">What about outside functions?</h2>
<p>If you are certain on what is the expected data type (say a class), you can use assert statement to verify your assumption and at the same time, tell the IDE that this variable would definitely be of this type.</p>
<p>For easier understanding, let me show you an example which is not expected to work:</p>
<pre><code>class parent():
def func_1(self):
return 1
def func_2(self):
return 2
class child():
def get():
return child()
my_child = child()
assert isinstance(my_child, parent)
# Now intellisense for 'my_child' would list func_1 and func_2.
</code></pre>
<p>In this way, you can even make intellisense to show up even it is not able to automatically do so.</p>
Unknownnoreply@blogger.com0tag:blogger.com,1999:blog-4426390189809984591.post-2942517558828495732022-02-24T19:11:00.001+05:302022-02-24T19:11:39.661+05:30Collection of Plugin Frameworks in Python<h1 id="collection-of-plugin-architectures-in-python">Collection of Plugin Architectures in Python</h1>
<p>The different plugin architectures available in Python are</p>
<ol>
<li>Pluggy</li>
<li>Yapsy</li>
<li>Straight Plugin</li>
<li>Plug n’ Play (PnP)</li>
<li>Simple Python Plugin Framework</li>
</ol>
<h1 id="pluggy">Pluggy</h1>
<p>Pluggy is a minimalist production ready plugin development system. This is the core framework used in pytest, tox and devpi projects.</p>
<p><strong>Github:</strong> <a href="https://github.com/pytest-dev/pluggy/">https://github.com/pytest-dev/pluggy/</a> | Stars: 681<br>
<strong>License:</strong> MIT<br>
<strong>Example Usage:</strong> <a href="https://github.com/pytest-dev/pluggy/#a-definitive-example">https://github.com/pytest-dev/pluggy/#a-definitive-example</a></p>
<h1 id="yapsy">Yapsy</h1>
<p>Yapsy stands for Yet Another Plugin SYstem. Its main purpose is to offer a way to easily design a plugin system in Python and only depends on Python’s standard library. Source code of Yapsy is primarily maintained in SourceForge, but is also mirrored at github.</p>
<p><strong>Github:</strong> <a href="https://github.com/tibonihoo/yapsy">https://github.com/tibonihoo/yapsy</a> | Stars: 163<br>
<strong>License:</strong> BSD<br>
<strong>Example Usage:</strong> <a href="https://stackoverflow.com/questions/5333128/yapsy-minimal-example">Yapsy Minimal Example</a>, <a href="http://yapsy.sourceforge.net/#getting-started">http://yapsy.sourceforge.net/#getting-started</a></p>
<h1 id="straight-plugin">Straight Plugin</h1>
<p>Straight Plugin provides a type of plugin you can create from almost any existing Python modules, and an easy way for outside developers to add functionality and customization to your projects with their own plugins.</p>
<p><strong>Github:</strong> <a href="https://github.com/ironfroggy/straight.plugin">https://github.com/ironfroggy/straight.plugin</a> | Stars: 104<br>
<strong>License:</strong> MIT</p>
<h1 id="plug-n-play-pnp">Plug n’ Play (PnP)</h1>
<p>Plug n’ Play is a generic plugin system inspired by Trac’s internal component management system. It defines interfaces which the plugins implement them. Its a GPL 2.0 license though - so practically can be used only in GPL compatible open source projects and not in commercial ones, where you don’t want to share the source code.</p>
<p><strong>Github:</strong> <a href="https://github.com/daltonmatos/plugnplay">https://github.com/daltonmatos/plugnplay</a> | Stars: 53<br>
<strong>License:</strong> GPL 2.0<br>
<strong>Example Usage:</strong> <a href="https://github.com/daltonmatos/plugnplay#a-simple-example">https://github.com/daltonmatos/plugnplay#a-simple-example</a></p>
<h1 id="simple-python-plugin-framework">Simple Python Plugin Framework</h1>
<p>The initial idea of the Simple Python Plugin Framework is from <a href="http://martyalchin.com/2008/jan/10/simple-plugin-framework/">Marty Alchin</a>, a django developer, which is extremely light weight with the basic version requiring less than 10 lines of code. He had released this piece of code to public domain, inviting anyone to build on top of it. A fork of this with porting to Python 3 is done by Regis Decamps, which is available in github.</p>
<p><strong>Github:</strong> <a href="https://github.com/regisd/simple_plugin_framework">https://github.com/regisd/simple_plugin_framework</a> | Stars: 5<br>
<strong>License:</strong> Not Specified</p>
<p>Know of any other Python Plugin Frameworks that you have used/liked? Let us know in the comments :)</p>
<h1 id="reference-guides">Reference Guides</h1>
<ol>
<li><a href="https://mathieularose.com/plugin-architecture-in-python">How to Design and Implement a Plugin Architecture in Python</a> by Mathieu Larose</li>
<li><a href="https://mwax911.medium.com/building-a-plugin-architecture-with-python-7b4ab39ad4fc">Building a Plugin Architecture in Python</a> by Maxwell Mapako</li>
</ol>
Unknownnoreply@blogger.com0tag:blogger.com,1999:blog-4426390189809984591.post-44140721614712412922022-01-06T11:21:00.002+05:302022-01-06T11:21:20.235+05:30CxFreeze: Build Python Code to Executable<p>A key aspect of a programming language is building it into an executable/installer, which can be easily distributed. Since Python is more of a scripting language, the default Python installation doesn’t have any support for building executable. But due to its open source nature, there are multiple 3rd party packages available to fill this gap.</p>
<p>Earlier I have used <a href="https://github.com/pyinstaller/pyinstaller">Pyinstaller</a> for building executable out of Python script. Few issues I encountered with PyInstaller was</p>
<ul>
<li>False Virus Positives. This occurred in both single file build as well as folder build. I encountered this with Symantec antivirus but this issue seems more common. As per a <a href="https://github.com/pyinstaller/pyinstaller/issues/2988">github post</a>, this is not not due no fault of PyInstaller and there seems to be little that can be done to overcome this annoying issue.</li>
<li>Ideally, I would like is a clean installation directory without too many files at the top level folder. PyInstaller supports single file option, but it would take some time to extract and run each time.</li>
</ul>
<p><a href="https://github.com/marcelotduarte/cx_Freeze">Cx Freeze</a> definitely overcomes #2 above and I haven’t faced issue with #1 so far.</p>
<h1 id="installation">Installation</h1>
<p>Download and install cx_Freeze:<br>
Using pipenv:</p>
<pre><code>pipenv install cx_Freeze
</code></pre>
<p>Or directly using pip:</p>
<pre><code>pip install --upgrade cx_Freeze
</code></pre>
<h1 id="building-executable">Building Executable</h1>
<h1 id="using-in-built-script">Using In-built Script</h1>
<p>If you just want to do a simple build, use the below command:</p>
<pre><code>cxfreeze -c main.py --target-dir dist
</code></pre>
<p>where <a href="http://main.py">main.py</a> is your main python file name and dist is the location where you want to do the build.</p>
<h1 id="using-custom-setup-script">Using Custom Setup Script</h1>
<p>In case if you want to customize your executable, like include additional files/folders, you can create a custom script for the build process. Lets assume that you have a folder called “Config” in your source code directory which you would like to include in your executable, then you can specify this using the “include_files” option as below.</p>
<pre><code>import sys
from cx_Freeze import setup, Executable
build_exe_options = {
"packages": ["os"],
"excludes": [""],
"include_files" : ["Config/"]
}
base = None
if sys.platform == "win32":
base = "Win32GUI"
setup(
name = "MyPythonApp",
version = "0.1",
description = "My Python Application!",
options = {"build_exe": build_exe_options},
executables = [Executable("main.py", base=base)]
)
</code></pre>
<p>To invoke the above setup script for building, use the below command:</p>
<pre><code>python setup.py build
</code></pre>
<h1 id="building-installer">Building Installer</h1>
<p>In Windows, you can build an installer out of the above executable using the below command:</p>
<pre><code>python setup.py bdist_msi
</code></pre>
<h1 id="references">References</h1>
<ol>
<li>For more example setup scripts, refer to <a href="https://github.com/marcelotduarte/cx_Freeze/tree/main/cx_Freeze/samples">https://github.com/marcelotduarte/cx_Freeze/tree/main/cx_Freeze/samples</a></li>
</ol>
Unknownnoreply@blogger.com0tag:blogger.com,1999:blog-4426390189809984591.post-70170694320607104282021-12-18T23:23:00.001+05:302021-12-18T23:23:33.172+05:30Zero to Hero: PPL Plugin Architecture in LabVIEW<p><em>Quick URL for this post:</em> <a href="http://go.computerandnet.com/PPL">go.computerandnet.com/PPL</a></p>
<p>A plugin architecture is a common design pattern where an executable supports dynamically adding new plugins without making any code changes or rebuilding the entire application. The most common and preferred way of creating a plugin architecture in LabVIEW is by using Packed Project Libraries (PPLs).<br>
<img src="https://i.imgur.com/jVKGthS.png" alt="LabVIEW, Plugins and Packed Project Libraries PPLs"></p>
<h1 id="what-is-a-ppl">What is a PPL?</h1>
<p>They are project libraries that package multiple files into a single file with a .lvlibp file extension. </p>
<h1 id="why-not-just-vis-as-plugins">Why Not Just VIs as Plugins?</h1>
<p>It is technically possible to use plain VIs as plugins - but it may not work in all cases. For example, if you are using a OpenG library in your VI, which was not part of your executable, the EXE will not be able to run the VI.</p>
<p>To avoid this and make it reliable, you would need to go with Source Distribution - which results in lot of files. Considering this a better option would be to use Packed Project Libraries (PPLs).</p>
<h1 id="how-are-ppls-different-from-llbs">How are PPLs different from LLBs?</h1>
<ol>
<li>LLBs are editable, while PPLs are compiled code (like a DLL) and are not editable.</li>
<li>PPLs support folder hierarchies to be maintained while LLBs don’t (which is a great help when dealing with classes)</li>
<li>LLBs are legacy and was created during LabVIEW 8.3. If one file in LLB is gets corrupted, the entire LLB becomes corrupted.</li>
<li>PPLs supports excluding dependent PPLs, which is great for plugin deployments</li>
</ol>
<p>Generally, PPLs are preferred over LLBs. PPLs are a good way of implementing plugin support to an executable and includes other advantages like:</p>
<ul>
<li>PPLs are compiled binary and are hence bit faster than running in source code</li>
<li>Fewer files to deploy (when compared to Source Distribution)</li>
<li>Reduces build time of big monolithic application by breaking them down to component PPLs.</li>
</ul>
<h1 id="how-to-use-labview-classes-in-ppls">How to Use LabVIEW Classes in PPLs?</h1>
<p>PPLs can be created only out of a top level LabVIEW library. <strong>So, is it possible to create a PPL out of a LabVIEW Class?</strong></p>
<p><strong>Yes, you can</strong> - by adding the LabVIEW Class to a LabVIEW Library and building a PPL out of the LabVIEW Library, as shown below.<br>
<img src="https://i.imgur.com/WMRXdD0.png" alt="LabVIEW Class under LabVIEW Library Namespace"><br>
For determining and loading the child classes within the PPL,</p>
<ol>
<li>Get the list of PPLs in the plugin directory,</li>
<li>Get the list of classes within each PPL</li>
<li>Use the usual “Get LV Class Default Value” to load the class object.<br>
<img src="https://i.imgur.com/Xa8fj2y.png" alt="Loading LabVIEW Class from a Packed Project Library PPL"></li>
</ol>
<h1 id="labview-plugin-challenge">LabVIEW Plugin Challenge</h1>
<p>Download the LabVIEW Plugin Challenge from <a href="https://drive.google.com/file/d/1O8q6-DQ3Gdi-vcNOTc-m-zNg3S1xyxRH/view?usp=sharing">here</a>.</p>
<p><strong>Goal</strong><br>
We want to create an executable that can support new instrument classes as plugins. The current code has this behavior in LabVIEW development environment but not when built as an EXE.</p>
<p><strong>How to Run</strong><br>
Open the project inside “Source” and run the “Load Instrument Plugins” VI. This would load up two instrument child classes.</p>
<p><strong>The Challenge</strong><br>
We have given basic build specs for the different modules, which can be built. But they are not in a working condition - the built EXE will not detect any child classes. The challenge is to make the built executable exhibit the same behavior - i.e. ability to add new instrument child classes dynamically without any code change/rebuild.</p>
<p>Sounds interesting? Try the challenge out before proceeding to the next section.</p>
<h1 id="labview-plugin-challenge-solution">LabVIEW Plugin Challenge Solution</h1>
<p>Here are the steps that needs to be done to make the starter code support plugins in EXE:</p>
<ol>
<li>Build the parent class PPL. Replace the parent class library with the built parent class PPL.</li>
<li>Now, build the child class and instrument manager PPLs. Replace the child class and instrument manager library with the corresponding PPLs.</li>
<li>Build and run the EXE.</li>
<li>(Optional) The updated code works only in EXE but not in source code. To make it work in source code, pass the Builds/Plugins directory path when run in source code.</li>
</ol>
<p>Download the LabVIEW Plugin Challenge Solution from <a href="https://drive.google.com/file/d/1FQKgU6AYuTEQ0oVP5LkLvNegLQSFBGcW/view?usp=sharing">here</a>.</p>
<h1 id="pain-points-with-traditional-ppl-solution">Pain Points with Traditional PPL Solution</h1>
<p>So, even though we have got the plugins to work in EXE in the above challenge, there are a few pain points:</p>
<ol>
<li>The entire source code is not open as PPLs are binaries. It is difficult for debugging and testing. Not a good developer experience (DX).</li>
<li>Complicated directory structure with inter-dependencies between source code and build outputs (PPLs)</li>
<li>Complicated manual build process where you need to keep track of the order in which you run the builds.</li>
</ol>
<h1 id="our-hero---lv-solution-builder">Our Hero - LV Solution Builder</h1>
<p>In the above LabVIEW PPL Challenge, what if I say that there is a magic tool that can straight-away make the starter code to be PPL EXE ready with zero code changes? Sounds awesome, right?</p>
<p>Let me introduce you to this magic tool - <a href="https://github.com/jovianarts/LVSolutionBuilder">LV Solution Builder</a>, an open source project architected by Phil Joffrain from NI. To this tool, you just need to give the source code directory and boom, it will take care of everything - doing in memory replacements, the order of builds and even capable of identifying code changes to determine which builds needs to happen.</p>
<h1 id="steps-to-use">Steps to Use</h1>
<ol>
<li>Download the latest release of LV Solution Builder LLB from <a href="https://github.com/jovianarts/LVSolutionBuilder/releases">github release page</a>.</li>
<li>Inside the LLB, open the <a href="http://SolutionBuilder.vi">SolutionBuilder.vi</a>. In this VI, specify the top level source code directory and run the VI.</li>
<li>LV Solution Builder will now determine the list of all projects and their build specifications and their inter-dependencies. Based on the dependencies, LV Solution Builder will determine the order of builds and execute them one by one, as seen below.<br>
<img src="https://i.imgur.com/s4Reeg9.png" alt="LV Solution Builder for Building PPLs"></li>
</ol>
<h1 id="advantages-of-lv-solution-builder">Advantages of LV Solution Builder</h1>
<p>The advantages of LV Solution Builder over traditional method are:</p>
<ol>
<li>Greatly improved Developer Experience (DX) when working with PPLs - Easier Debugging, Block Diagram of all dependencies are both viewable and editable.</li>
<li>No code bloat/unnecessary copies. No Separate Workspace required for each PPL – It can all easily co-exist in a single workspace since the dependency replacements happen in memory during building.</li>
<li>Automatically Builds in Required Order</li>
<li>Has intelligence to skip building a component if there is no code change :)</li>
</ol>
<h1 id="gla-summit-presentation">GLA Summit Presentation</h1>
<p>I had spoken about LV Solution Builder in GLA Summit 2021:</p>
<iframe src="https://docs.google.com/presentation/d/e/2PACX-1vR_MKdtfn48W_ZBCyGWCYUw9cDXi_plCvlYwRop_MWsKEv79MyZPRuLT4KkAd_3XA/embed?start=false&loop=false&delayms=3000" allowfullscreen="true" width="960" height="450"></iframe>
<p>A recording of the above GLA Summit Presentation is available in <a href="https://youtu.be/e2GGAuA_Ees?t=784">YouTube</a>.</p>
<p>Have you worked with PPLs in LabVIEW? Let us know in the comments :)</p>
Unknownnoreply@blogger.com0tag:blogger.com,1999:blog-4426390189809984591.post-47347956112072461752021-12-03T12:52:00.001+05:302021-12-03T12:52:49.087+05:30Python UI Frameworks with Screenshots<p>Python has a good ecosystem with a number of UI frameworks available. Here I am listing some of the popular UI frameworks available for Python along with their tutorial/getting started examples, which would be helpful for you to compare and choose one for your need.</p>
<h1 id="web-based-python-ui-frameworks">Web Based Python UI Frameworks</h1>
<h2 id="dash">Dash</h2>
<p>Built on top of Plotly.js, React and Flask, Dash ties modern UI elements like drop downs, sliders, and graphs directly to your analytical Python code.<br>
<img src="https://i.imgur.com/iRRDqZS.png" alt="Python Dash Framework Example"><br>
<strong>Github:</strong> <a href="https://github.com/plotly/dash">https://github.com/plotly/dash</a> | Stars: 15.2k+<br>
<strong>License:</strong> MIT</p>
<p><strong>Tutorials:</strong></p>
<ol>
<li><a href="https://dash.plotly.com/getting-started">https://dash.plotly.com/getting-started</a></li>
<li><a href="https://realpython.com/python-dash/">https://realpython.com/python-dash/</a></li>
<li><a href="https://towardsdatascience.com/beginners-guide-to-building-a-multi-page-dashboard-using-dash-5d06dbfc7599">https://towardsdatascience.com/beginners-guide-to-building-a-multi-page-dashboard-using-dash-5d06dbfc7599</a></li>
</ol>
<p><strong>Related Packages:</strong></p>
<ol>
<li><a href="https://github.com/facultyai/dash-bootstrap-components">https://github.com/facultyai/dash-bootstrap-components</a></li>
</ol>
<h2 id="eel">Eel</h2>
<p>A little Python library for making simple Electron-like HTML/JS GUI apps<br>
<img src="https://i.imgur.com/3PEbRvk.png" alt="Eel Python Demo"><br>
<strong>Github:</strong> <a href="https://github.com/ChrisKnott/Eel">https://github.com/ChrisKnott/Eel</a> | Stars: 4.6k+<br>
<strong>License:</strong> MIT</p>
<h2 id="remi">Remi</h2>
<p>Remi is a GUI library for Python applications that gets rendered in web browsers. This allows you to access your interface locally and remotely. There is also a drag n drop GUI Editor.<br>
<img src="https://i.imgur.com/GsQUNv3.png" alt="REMI - Platform Independent Python GUI Library">REMI GUI Editor allows you easily create GUIs using drag and drop.<br>
<img src="https://i.imgur.com/UImopSn.png" alt="REMI GUI Editor"><br>
<strong>Github:</strong> <a href="https://github.com/dddomodossola/remi">https://github.com/dddomodossola/remi</a> | Stars: 2.9k+<br>
<strong>Remi GUI Editor:</strong> <a href="https://github.com/dddomodossola/remi/tree/master/editor">https://github.com/dddomodossola/remi/tree/master/editor</a><br>
<strong>License:</strong> Apache 2.0</p>
<h2 id="flexx">Flexx</h2>
<p>Flexx is a pure Python toolkit for creating graphical user interfaces (GUI’s), that uses web technology for its rendering. Apps are written purely in Python; The PScript transpiler generates the necessary JavaScript on the fly.<br>
<img src="https://i.imgur.com/uHjFcue.png" alt="Flexx Interactive UI Example"><br>
You can use Flexx to create (cross platform) desktop applications, web applications, and export an app to a standalone HTML document.</p>
<p><strong>Github:</strong> <a href="https://github.com/flexxui/flexx">https://github.com/flexxui/flexx</a> | Stars: 2.8k+<br>
<strong>Interactive Example:</strong> <a href="https://flexx.readthedocs.io/en/latest/examples/demo_src.html">https://flexx.readthedocs.io/en/latest/examples/demo_src.html</a><br>
<strong>License:</strong> BSD 2-Clause</p>
<h2 id="pywebview">PyWebView</h2>
<p>pywebview can be used for building GUIs for your Python program using HTML, CSS and Javascript. It is a lightweight cross-platform wrapper around a webview component that allows to display HTML content in its own native GUI window. You can use pywebview with a lightweight web framework like Flask or Bottle.<br>
<img src="https://i.imgur.com/0rXD141.png" alt="PyWebView Example UI"><br>
pywebview uses native GUI for creating a web component window: WinForms on Windows, Cocoa on macOS and QT or GTK on Linux. If you choose to freeze your application, pywebview does not bundle a heavy GUI toolkit or web renderer with it keeping the executable size small. pywebview is compatible with Python 3.</p>
<p><strong>Website:</strong> <a href="https://pywebview.flowrl.com/">https://pywebview.flowrl.com/</a><br>
<strong>GitHub:</strong> <a href="https://github.com/r0x0r/pywebview">https://github.com/r0x0r/pywebview</a> | Stars: 2.6k+<br>
<strong>React Boiler Plate:</strong> <a href="https://github.com/r0x0r/pywebview-react-boilerplate">https://github.com/r0x0r/pywebview-react-boilerplate</a><br>
<strong>Platforms:</strong> Linux, Windows, macOS<br>
<strong>License:</strong> BSD 3-Clause License</p>
<h1 id="other-python-ui-frameworks">Other Python UI Frameworks</h1>
<h2 id="gooey">Gooey</h2>
<p>Turn (almost) any Python 2 or 3 Console Program into a GUI application with one line.<br>
<img src="https://i.imgur.com/Cq2xd2M.png" alt="Gooey Example"><br>
<strong>Github:</strong> <a href="https://github.com/chriskiehl/Gooey">https://github.com/chriskiehl/Gooey</a> | Stars: 14.9k+<br>
<strong>Usage:</strong> <a href="https://github.com/chriskiehl/Gooey#usage">https://github.com/chriskiehl/Gooey#usage</a><br>
<strong>Examples:</strong> <a href="https://github.com/chriskiehl/GooeyExamples">https://github.com/chriskiehl/GooeyExamples</a><br>
<strong>License:</strong> MIT</p>
<h2 id="pyqt">PyQt</h2>
<p>PyQt is a set of Python bindings for The Qt Company’s Qt application framework and runs on all platforms supported by Qt including Windows, macOS, Linux, iOS and Android. PyQt6 supports Qt v6, PyQt5 supports Qt v5. This is developed and maintained by Riverbank Computing.</p>
<p><strong>Website:</strong> <a href="https://riverbankcomputing.com/software/pyqt/intro">https://riverbankcomputing.com/software/pyqt/intro</a><br>
<strong>Tutorial:</strong> <a href="https://www.pythonguis.com/pyqt-tutorial/">https://www.pythonguis.com/pyqt-tutorial/</a><br>
<strong>Platforms:</strong> Linux, Windows, macOS, Android, iOS.<br>
<strong>License:</strong> Dual Licensed. GPL and Commercial License.</p>
<h2 id="qt-for-python-pyside">Qt for Python (PySide)</h2>
<p>Qt for Python is the project that provides the official set of Python bindings for Qt (PySide6). This is an alternative to PyQt, which is licensed under GPL, while PySide is licensed under LGPL v2.1</p>
<p><strong>Website:</strong> <a href="https://www.qt.io/qt-for-python">https://www.qt.io/qt-for-python</a><br>
<strong>Tutorial:</strong> <a href="https://www.pythonguis.com/pyside-tutorial/">https://www.pythonguis.com/pyside-tutorial/</a><br>
<strong>Platforms:</strong> Linux, macOS, Windows.<br>
<strong>License:</strong> LGPL v2.1</p>
<h2 id="kivy">Kivy</h2>
<p>Kivy is an open source Python library for rapid development of applications<br>
that make use of innovative user interfaces, such as multi-touch apps.<br>
<img src="https://i.imgur.com/6ilV4m2.png" alt="Kivy UI Example"><br>
<strong>Github:</strong> <a href="https://github.com/kivy/kivy">https://github.com/kivy/kivy</a> | Stars: 13.5k+<br>
<strong>Tutorial:</strong> <a href="https://kivy.org/doc/stable/tutorials/pong.html">https://kivy.org/doc/stable/tutorials/pong.html</a><br>
<strong>Material Design Theme:</strong> <a href="https://github.com/kivymd/KivyMD">https://github.com/kivymd/KivyMD</a><br>
<strong>Platforms:</strong> Linux, Windows, OS X, Android, iOS, and Raspberry Pi<br>
<strong>License:</strong> MIT License</p>
<h2 id="tkinter">tkinter</h2>
<p>Tkinter is a Python binding to the Tk GUI toolkit. It is the standard Python interface to the Tk GUI toolkit.</p>
<p><strong>Website:</strong> <a href="https://docs.python.org/3/library/tkinter.html">https://docs.python.org/3/library/tkinter.html</a><br>
<strong>Designer:</strong> <a href="https://github.com/ParthJadhav/Tkinter-Designer">https://github.com/ParthJadhav/Tkinter-Designer</a><br>
<strong>Platforms:</strong> Linux, macOS, Windows.<br>
<strong>License:</strong> Python License</p>
<h2 id="dearpygui">DearPyGUI</h2>
<p>Dear PyGui is a simple to use (but powerful) Python GUI framework. It is a library built with Dear ImGui which creates a unique retained mode API (as opposed to Dear ImGui’s immediate mode paradigm).<br>
<img src="https://i.imgur.com/ETdocCd.png" alt="Dear PyGUI Examples"><br>
<strong>Github:</strong> <a href="https://github.com/hoffstadt/DearPyGui">https://github.com/hoffstadt/DearPyGui</a> | Stars: 6.1k+<br>
<strong>Examples:</strong> <a href="https://github.com/hoffstadt/DearPyGui#usage">https://github.com/hoffstadt/DearPyGui#usage</a><br>
<strong>License:</strong> MIT</p>
<h2 id="toga">Toga</h2>
<p>A Python native, OS native GUI toolkit.<br>
<img src="https://i.imgur.com/lygYrXS.png" alt="Toga Python UI Example"><br>
<strong>Github:</strong> <a href="https://github.com/beeware/toga">https://github.com/beeware/toga</a> | Stars: 2.8k+<br>
<strong>Tutorial:</strong> <a href="https://toga.readthedocs.io/en/latest/tutorial/index.html#tutorial">https://toga.readthedocs.io/en/latest/tutorial/index.html#tutorial</a><br>
<strong>License:</strong> BSD 3-Clause</p>
<h2 id="pysimplegui">PySimpleGUI</h2>
<p>Transforms the tkinter, Qt, WxPython, and Remi (browser-based) GUI frameworks into a simpler interface. The window definition is simplified by using Python core data types understood by beginners (lists and dictionaries).<br>
Your PySimpleGUI code is simpler and shorter than writing directly using the underlying framework because PySimpleGUI implements much of the “boilerplate code” for you. Additionally, interfaces are simplified to require as little code as possible to get the desired result. Depending on the program and framework used, a PySimpleGUI program may require 1/2 to 1/10th amount of code to create an identical window using one of the frameworks directly.<br>
<img src="https://i.imgur.com/H3slzct.png" alt="PySimpleGUI based Example"><br>
<strong>Github:</strong> <a href="https://github.com/PySimpleGUI/PySimpleGUI">https://github.com/PySimpleGUI/PySimpleGUI</a> | Stars: 8.6k+<br>
<strong>License:</strong> LGPL v3.0</p>
<h1 id="list-of-other-python-gui-frameworks">List of Other Python GUI Frameworks</h1>
<p>Apart from what is listed above, there are other Python GUI Frameworks available, which is listed below.<br>
<a href="https://wiki.python.org/moin/GuiProgramming">https://wiki.python.org/moin/GuiProgramming</a></p>
<p><strong>What are the Python UI frameworks that you have used? If you know of any other major Python UI framework, let us know in the comments for us to add to this list :)</strong></p>
<h1 id="references">References</h1>
<ol>
<li><a href="https://stackoverflow.com/questions/61566560/is-it-possible-to-fully-customize-a-ui-application-in-python-3-using-a-free-and">https://stackoverflow.com/questions/61566560/is-it-possible-to-fully-customize-a-ui-application-in-python-3-using-a-free-and</a></li>
</ol>
Unknownnoreply@blogger.com0tag:blogger.com,1999:blog-4426390189809984591.post-2411790268483069152021-09-15T22:59:00.002+05:302021-09-15T22:59:51.656+05:30Creating gRPC Python Client with Intellisense<p>One issue with the default Python gRPC Client generation is, it doesn’t seem to support intellisense making it difficult code. But luckily we have an external tool that adds intellisense support to gRPC Client Code. Lets see how we can create intellisense supported gRPC client code in Python.</p>
<h1 id="using-default-grpc-io-tools-and-mypy">Using Default gRPC IO Tools and MyPy</h1>
<p>This method uses the default gRPC IO Tools along with the 3rd party package - mypy-protobuf, which provides intellisense support.</p>
<p>To start with, create a Python Virtual Environment - There are multiple ways to create Python Virtual Environment. Here we will use pipenv. To install pipenv, use:</p>
<pre><code>pip install pipenv
</code></pre>
<p>To create the Python Virtual Environment, use:</p>
<pre><code>pipenv shell
</code></pre>
<p>Now, lets install the required grpc packages. grpcio-tools is the official grpc package and mypy-protobuf is the 3rd party package that enables intellisense.</p>
<pre><code>pipenv install grpcio-tools
pipenv install mypy-protobuf
</code></pre>
<p>Let’s now generate python grpc client from the proto file:</p>
<pre><code>python -m grpc_tools.protoc -I. --python_out=. --grpc_python_out=. --mypy_out=. query_server.proto
</code></pre>
<p>Replace query_server.proto in above command with your proto file name.</p>
<p>Here is an example which uses the grpc client code generated by the above command:</p>
<pre><code>import grpc
import query_server_pb2 as queryTypes
import query_server_pb2_grpc as gRPCQueryServer
serverAddress = "localhost:50051"
# Create a channel and associate the channel to your service
channel = grpc.insecure_channel(serverAddress)
queryServer = gRPCQueryServer.QueryServerStub(channel)
# From the above service, make the required method call
# To the method, choose its input message type and pass its values
uptime = queryServer.Query(queryTypes.QueryRequest(query="Uptime"))
print(uptime)
# Close the channel
channel.close()
</code></pre>
<h1 id="using-better-proto">Using Better Proto</h1>
<p>Better Proto is an alternative implementation of gRPC implementation in Python with added features and done in a more “pythonic” way.</p>
<p>Similar to above, use below commands for creating a Python Virtual Environment using pipenv.</p>
<pre><code>pip install pipenv
pipenv shell
</code></pre>
<p>Install better proto using the below command. Here pip is used instead of pipenv as, pipenv is showing some errors with the below package installation.</p>
<pre><code> pip install "betterproto[compiler]"
pip install grpcio-tools
</code></pre>
<p>To generate python gRPC client code using better proto, use the below command:</p>
<pre><code>python -m grpc_tools.protoc -I . --python_betterproto_out=. query_server.proto
</code></pre>
<p>Replace query_server.proto in above command with your proto file name.<br>
Here is a Python gRPC client code using better protobuf:</p>
<pre><code>import asyncio
import queryserver
from grpclib.client import Channel
async def main():
# Create Channel and associate service to the channel
channel = Channel(host="127.0.0.1", port=50051)
qs = queryserver.QueryServerStub(channel)
# From above service, choose the required method and its arguments
response = await qs.query(query="Uptime")
print(response.message)
# Close the channel
channel.close()
if __name__ == "__main__":
# Run Main Loop
asyncio.run(main())
</code></pre>
<p>Do you have any questions or comments? Let us know in the comments.</p>
Unknownnoreply@blogger.com0tag:blogger.com,1999:blog-4426390189809984591.post-70038239839874287252021-09-06T01:14:00.007+05:302021-09-06T01:15:26.347+05:30Getting Started with Algorithms<h1 id="the-algorithms">The Algorithms</h1>
<p><a href="https://the-algorithms.com/">The Algorithms</a> contains the implementations of algorithms in various programming languages. You can either browse the different algorithms in the website or at Github.</p>
<p>Each Programming Language has its own repository where programmers contribute implementations of various algorithms under MIT License. For example, for Python: <a href="https://github.com/TheAlgorithms/Python">https://github.com/TheAlgorithms/Python</a></p>
Unknownnoreply@blogger.com0tag:blogger.com,1999:blog-4426390189809984591.post-27587667181316700722021-09-06T01:14:00.006+05:302021-09-06T01:15:14.920+05:30Getting Started with System Design<p>Learning how to design scalable systems is an essential trait to become a Software Architect. This article contains a collection of useful links for getting started and to learn more on System Design.</p>
<h1 id="system-design-primer-github-repo">System Design Primer Github Repo</h1>
<p>This is one of the most popular Github repo with over 143k stars, which is maintained by Donne Martin. It helps to learn on how to design large scale systems and help in System Design Interviews.</p>
<p>Github Link: <a href="https://github.com/donnemartin/system-design-primer">https://github.com/donnemartin/system-design-primer</a></p>
<p>Initially browsing the big document might be intimidating but this contains good set of images which makes understanding things easier. Just take things one at a time. Apart from having the core content, it also walks you through the preparation.</p>
<p>Some of the topics this covers are</p>
<ul>
<li><a href="https://github.com/donnemartin/system-design-primer#index-of-system-design-topics">Index of System Design Topics</a></li>
<li><a href="https://github.com/donnemartin/system-design-primer#additional-system-design-interview-questions">System Design Solutions for Popular Websites</a> like Dropbox and Google</li>
</ul>
<h1 id="system-design-basics-by-gaurav-sen">System Design Basics by Gaurav Sen</h1>
<p>Gaurav Sen from InterviewReady has a Youtube Channel where he has a series of videos on System Design basics.</p>
<p>Youtube Link: <a href="https://www.youtube.com/playlist?list=PLMCXHnjXnTnvo6alSjVkgxV-VH6EPyvoX">System Design Series by Gaurav Sen</a></p>
<h1 id="system-design-cheat-sheet-by-vasanth">System Design Cheat Sheet by Vasanth</h1>
<p>This is a Github gist article which specifies the steps to be followed by doing a System Design and the key concepts/terminologies that one might need to know.</p>
<p>Github Gist Link: <a href="https://gist.github.com/vasanthk/485d1c25737e8e72759f">https://gist.github.com/vasanthk/485d1c25737e8e72759f</a></p>
<p>Know of any other useful resource on System Design? Please let us know in the comments :-)</p>
Unknownnoreply@blogger.com0tag:blogger.com,1999:blog-4426390189809984591.post-2241509501227744912021-08-08T18:35:00.002+05:302021-08-08T18:35:53.228+05:30Windows Batch File Cheat Sheet<p>Whatever commands that you are manually performing in windows console window, can be automated using batch file. A Windows batch file is just a text file saved with *.bat extension.</p><p>A batch file is not as powerful as a programming language like Python, but in some cases can get the job done. The major advantage of batch file is that, it can be run in any Windows PC without installing any additional programs and it is fairly known among all programmers regardless of their programming language of choice.</p><p>This article is my reference guide for syntax whenever I want to do something in batch file. </p><h1 style="text-align: left;">Basics of Windows Batch File</h1><p>This covers some of the core basics of batch file.</p>
<script src="https://gist.github.com/KarthikAbiram/7abdc5eeb63023d46450c46d7f1e135d.js"></script>
<noscript>
<!-- HTML generated using hilite.me --><div style="background: #ffffff; overflow:auto;width:auto;border:solid gray;border-width:.1em .1em .1em .8em;padding:.2em .6em;"><pre style="margin: 0; line-height: 125%"><span style="color: #888888">:: Comments can be added to batch file using '::' at the beginning</span>
@REM This is another way to add comment to a batch file
<span style="color: #888888">:: Printing to Console</span>
<span style="color: #008800; font-weight: bold">echo</span> This prints anything to the console window
<span style="color: #888888">:: Use the "timeout" command to make the console wait for a specified timeout in seconds </span>
<span style="color: #888888">:: If user presses any key during the timeout, it will immediately proceed to the execution of next line</span>
<span style="color: #888888">:: If user has not pressed any key and the timeout period is elapsed, it will proceed to the execution of next line</span>
timeout <span style="color: #6600EE; font-weight: bold">60</span>
<span style="color: #888888">:: To pause indefinitely till user presses a key, use the "pause" command</span>
<span style="color: #008800; font-weight: bold">pause</span>
<span style="color: #888888">:: To call another batch file, use the call command</span>
<span style="color: #888888">:: File/Folder paths in batch file can either be absolute or relative to the current path</span>
<span style="color: #008800; font-weight: bold">call</span> SomeFolder\SubFolder\SomeBatchFileName.bat
<span style="color: #888888">:: Deleting a folder/directory</span>
RMDIR /S /Q FolderName
<span style="color: #888888">:: Deleting a file</span>
<span style="color: #008800; font-weight: bold">del</span> /f SomeFolder/SubFolder/RandomFile.txt
<span style="color: #888888">:: Copying file contents of one folder to another</span>
robocopy SourceFolder DestinationFolder
</pre></div>
</noscript>
<h1 style="text-align: left;">Loops and Structures in Windows Batch File</h1><p>This covers creation of arrays and usage of loops in batch file.</p>
<script src="https://gist.github.com/KarthikAbiram/b846c6460acae24285e4c6d2e5f436dd.js"></script>
<noscript>
<!-- HTML generated using hilite.me --><div style="background: #ffffff; overflow:auto;width:auto;border:solid gray;border-width:.1em .1em .1em .8em;padding:.2em .6em;"><pre style="margin: 0; line-height: 125%"><span style="color: #888888">:: Turning echo off to disable printing of each line of below file to console</span>
@<span style="color: #008800; font-weight: bold">echo</span> <span style="color: #008800; font-weight: bold">off</span>
<span style="color: #888888">:: Delayed expansion has to be enabled, to dynamically assign values for variables using "!VariableName!"</span>
<span style="color: #008800; font-weight: bold">setlocal</span> enabledelayedexpansion
<span style="color: #888888">:: You can use Windows environmental variables like %LocalAppData%</span>
<span style="color: #888888">:: If you want to get the path of a folder called "MyRandomFolder" inside an environmental variable like above, use as below.</span>
<span style="color: #008800; font-weight: bold">set</span> <span style="color: #996633">MyLocalPath</span><span style="color: #333333">=</span><span style="color: #996633">%LocalAppData%</span>/MyRandomFolder
<span style="color: #008800; font-weight: bold">echo</span> !MyLocalPath!
<span style="color: #888888">:: For list of more such variables, refer to the table at https://en.wikipedia.org/wiki/Environment_variable#Windows</span>
<span style="color: #888888">:: Assigning a value for a variable using "set" command</span>
<span style="color: #888888">:: Below is a string variable </span>
<span style="color: #008800; font-weight: bold">set</span> <span style="color: #996633">MyModeFlag</span><span style="color: #333333">=</span>dev
<span style="color: #888888">:: To define a variable as a number, use "/A" like below</span>
<span style="color: #008800; font-weight: bold">set</span> /A MyFavoriteNumber<span style="color: #333333">=</span><span style="color: #6600EE; font-weight: bold">2</span>
<span style="color: #888888">:: Example IF..ELSE Case</span>
<span style="color: #008800; font-weight: bold">IF</span> <span style="color: #996633">%MyModeFlag%</span><span style="color: #333333">==</span>dev (
<span style="color: #008800; font-weight: bold">echo</span> Dev Mode. Value of MyFlag was !MyFlag!
) <span style="color: #008800; font-weight: bold">ELSE</span> (
<span style="color: #008800; font-weight: bold">echo</span> Production Mode. Value of MyFlag was !MyFlag!
)
<span style="color: #888888">:: Defining Arrays in Batch File</span>
<span style="color: #888888">:: Technically arrays are not supported in batch file</span>
<span style="color: #888888">:: But we can statically define multiple variable names which will mimic an array, like below</span>
<span style="color: #008800; font-weight: bold">set</span> <span style="color: #996633">MyPaths</span>[<span style="color: #6600EE; font-weight: bold">0</span>]<span style="color: #333333">=</span>C:\Program Files\Mozilla Firefox\firefox.exe
<span style="color: #008800; font-weight: bold">set</span> <span style="color: #996633">MyPaths</span>[<span style="color: #6600EE; font-weight: bold">1</span>]<span style="color: #333333">=</span>C:\Program Files (x<span style="color: #6600EE; font-weight: bold">86</span>)\Notepad++\notepad++.exe
<span style="color: #008800; font-weight: bold">set</span> <span style="color: #996633">MyPaths</span>[<span style="color: #6600EE; font-weight: bold">2</span>]<span style="color: #333333">=</span>C:\Program Files\Google\Chrome\Application\chrome.exe
<span style="color: #888888">:: Using two other variables to denote the start index and end index of the array</span>
<span style="color: #008800; font-weight: bold">set</span> /A start<span style="color: #333333">=</span><span style="color: #6600EE; font-weight: bold">0</span>
<span style="color: #008800; font-weight: bold">set</span> /A step<span style="color: #333333">=</span><span style="color: #6600EE; font-weight: bold">1</span>
<span style="color: #008800; font-weight: bold">set</span> /A end<span style="color: #333333">=</span><span style="color: #6600EE; font-weight: bold">2</span>
<span style="color: #888888">:: Using For loop</span>
<span style="color: #888888">:: Use /L for Numeric Looping of For loop</span>
<span style="color: #888888">:: In below example, "%%a" is the iteration variable</span>
<span style="color: #888888">:: Single command For Loop. Replace echo with your desired command</span>
<span style="color: #008800; font-weight: bold">for</span> /L <span style="color: #996633">%%a</span> in (<span style="color: #996633">%start%</span>,<span style="color: #996633">%step%</span>,<span style="color: #996633">%end%</span>) <span style="color: #008800; font-weight: bold">do</span> <span style="color: #008800; font-weight: bold">echo</span> !MyPaths[<span style="color: #996633">%%a</span>]!
<span style="color: #888888">:: For multiline commands, use brackets as below</span>
<span style="color: #008800; font-weight: bold">for</span> /L <span style="color: #996633">%%a</span> in (<span style="color: #996633">%start%</span>,<span style="color: #996633">%step%</span>,<span style="color: #996633">%end%</span>) <span style="color: #008800; font-weight: bold">do</span> (
<span style="color: #008800; font-weight: bold">echo</span> This is iteration <span style="color: #996633">%%a</span>
<span style="color: #008800; font-weight: bold">echo</span> Current path is !MyPaths[<span style="color: #996633">%%a</span>]!
)
<span style="color: #888888">:: For other types of For Loop, refer to https://ss64.com/nt/for.html</span>
<span style="color: #888888">:: Pause - Wait for any key press</span>
<span style="color: #008800; font-weight: bold">pause</span>
</pre></div>
</noscript>
<p>Have you used batch file for any purpose? Have any useful tips/tricks related to batch file, let us know in the comments :-)<br /></p><div><script type="text/javascript">addthis_url='<data:post.url/>'; addthis_title='<data:post.title/>'; addthis_pub='YourPCInfo';</script><script src="http://s7.addthis.com/js/addthis_widget.php?v=12" type="text/javascript"></script></div>Unknownnoreply@blogger.com0tag:blogger.com,1999:blog-4426390189809984591.post-61137351684815004172021-06-13T16:53:00.009+05:302022-01-03T23:31:26.073+05:30Creating Python Virtual EnvironmentsThere are multiple ways for creating python virtual environments:<div><ol style="text-align: left;"><li>Using <b><i>venv</i></b> - a builtin module that is available from Python 3.6 (or)</li><li>Using <b><i>virtualenv</i></b> - a python plugin package</li><li>Using <i><b>pipenv</b></i> - a python plugin which combines pip and virtual environment <br /></li></ol>We will be using <b><i>pipenv</i></b> package for creating python virtual environments, as it would work for all versions of python. Alternatively, using virtualenv as a standalone is also specified at the end of the document. </div><h1 style="text-align: left;">How Python Virtual Environment Creation Works</h1><div>What basically happens is, a <b><i>complete copy of an existing python environment</i></b> is made. So this means that, whatever version of python virtual environment you would like to set up, <b><i>you need to install it in your system first</i></b>. Once installed, you can create as many virtual environments from it as you want. </div><h1 style="text-align: left;">Setting up Your Default Python</h1><div>For ease of use, I would recommend to have a default python environment. You can do this by adding the path of the python installation to environment variables. This option is available during python installation as "<b><i>Add Path to Environment Variables</i></b>", which would be unchecked by default. Check this option during installation. </div><h2 style="text-align: left;">How to Check if you have a Default Python Environment?</h2><div>Open Command Prompt and execute below command.</div><div><br /></div><div><b><i><span> </span>python --version</i></b></div><div><br /></div><div>If the above command returns a python version number, then that is your default python environment version. If it doesn't return a python version, then it either means python installation path is not added to environment variables or python is not installed.</div><div><br /></div><div>If you would like to know the location of the default python installation, use the below command (for Windows) and this would return the location of the default python installation.</div><div><br /></div><div><b><i><span> </span>where python</i></b></div><div><h1 style="text-align: left;">Creating Virtual Environment using pipenv</h1><div style="text-align: left;">pipenv
works as a combination of creating virtual environment as well as a
replacement for pip, which manages python packages. The virtual
environments created by pipenv are stored externally and there is a one
to one mapping between the folder and its virtual environment. pipenv
also maintains a pip file, which is a replacement for requirements.txt
with improved features and better dependency handling and upgrades.<br /></div><div style="text-align: left;"><br /></div><div style="text-align: left;">To install pipenv, use</div><div style="text-align: left;"><i><b><span> </span>pip install pipenv</b></i></div><div style="text-align: left;"><br /></div><div style="text-align: left;">To create/activate a python virtual environment for the current directory, use</div><div style="text-align: left;"><i><b><span> </span>pipenv shell</b></i></div><div style="text-align: left;"><br /></div><div style="text-align: left;">To install any packages, use pipenv instead of pip.For example, instead of <i><b>pip install flask</b></i>, use</div><div style="text-align: left;"><i><b><span> </span>pipenv install flask</b></i></div><div style="text-align: left;"><i><b> </b></i></div><div style="text-align: left;"><div style="text-align: left;">To install the list of packages specified in the pip file, use the below command:<br /></div><div style="text-align: left;"><i><b><span> </span>pipenv install</b></i></div><i><b></b></i></div><div style="text-align: left;"><br /></div><div style="text-align: left;">To uninstall a package, use</div><div style="text-align: left;"><i><b><span> </span>pipenv uninstall flask</b></i></div><div style="text-align: left;"><br /></div><div style="text-align: left;">To delete the python virtual environment for the current directory, use</div><div style="text-align: left;"><i><b><span> </span>pipenv --rm</b></i></div><div style="text-align: left;"><i><b> </b></i></div><div style="text-align: left;"><div style="text-align: left;">If you would like to set up the Python virtual environment inside your project folder, create a "<i><b>.venv</b></i>" folder parallel to pip file before sending the below command:<br /></div><div style="text-align: left;"><i><b><span> </span>pipenv shell<br /></b></i></div><i><b></b></i></div><b><i></i></b></div><h1 style="text-align: left;">[Alternative] Creating Python Virtual Environment using VirtualEnv</h1><div>Open command prompt and install virtualenv by using command below.</div><div><b><i><span> </span></i></b></div><div><b><i><span> </span>pip install virtualenv</i></b></div><div><br /></div><div>This would install the <b><i>virtualenv</i></b>
module in your default python environment. Using this, you can then
create python virtual environments (of any python version that is
installed in your system)</div><div> </div><div>Typically its recommended to create a python virtual environment for each project that you work on. The location of such virtual environments are usually setup in each project folder with name of <b><i>venv</i></b>.</div><div><br /></div><div>Go to the directory where you would like to create the python virtual environment (like the project directory) and type <b><i>cmd</i></b> in Windows Explorer path. This would open up the command prompt window at the current directory.</div><h2 style="text-align: left;">Virtual Environment for the Default Python Installation</h2><div>To create a virtual environment from the default python installation, use the below command in command prompt.</div><div><br /></div><div><b><i><span> </span>virtualenv <any_name></i></b></div><div><span> </span></div><div><b><i><span> </span>Eg:</i></b> <b><i>virtualenv venv</i></b></div><div>The above command creates a virtual environment with the name "venv" in the current directory.</div><h2 style="text-align: left;">Virtual Environment for Any Installed Python Version</h2><div>To create virtual environment for any python version installed in your system, the command format is </div><div><br /></div><div><b><i><span> </span>virtualenv -p <python exe path> <name/path for virtual environment></i></b></div><div><br /></div><div>For example, if you want to create a virtual environment for Python 2.7 which is installed at <b>C:\Python27,</b> the command would be:</div><div><br /></div><div><b><i><span> </span>virtualenv -p C:\Python27\python.exe venv</i></b></div><div><br /></div><div>Alternatively, you can specify the absolute path for the location of the virtual environment, as below.</div><div><br /></div><div><b><i> virtualenv -p C:\Python27\python.exe D:\PythonEnvironments\Proj1_venv</i></b></div><div><div style="text-align: left;"><i><b> </b></i><br /><div><i>Do you use python virtual environments in your
project? Where do you maintain the virtual environments? Let us know in
the comments.</i></div></div></div>Unknownnoreply@blogger.com0tag:blogger.com,1999:blog-4426390189809984591.post-19989812472041084622021-06-08T16:40:00.008+05:302022-04-19T22:10:39.090+05:30Adding Custom Layouts in PowerPointKindly note that this works only in the desktop version of PowerPoint and not in the web version.<div><script type="text/javascript">addthis_url='<data:post.url/>'; addthis_title='<data:post.title/>'; addthis_pub='YourPCInfo';</script><script src="http://s7.addthis.com/js/addthis_widget.php?v=12" type="text/javascript"></script></div><div><br /></div><div>1. Open a PowerPoint slide in desktop app and go to <b><i>View -> Slide Master.</i></b></div><div><div class="separator" style="clear: both; font-style: italic; font-weight: bold; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEh5gt0ufa3k4UTTub17Yc2zFMS3lBviPJl8VqaCVIuCXaYarcg2jqzbHXZJOa5QpAwnx3oqQKUuHUjY5b8DWVDalw_InyYBYxSBWPMd0XZ8BhknIaKj5Sb68eJAE2pZ_Dk0tOrm-xjVunw/" style="margin-left: 1em; margin-right: 1em;"><img alt="" data-original-height="343" data-original-width="760" height="289" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEh5gt0ufa3k4UTTub17Yc2zFMS3lBviPJl8VqaCVIuCXaYarcg2jqzbHXZJOa5QpAwnx3oqQKUuHUjY5b8DWVDalw_InyYBYxSBWPMd0XZ8BhknIaKj5Sb68eJAE2pZ_Dk0tOrm-xjVunw/w640-h289/image.png" width="640" /></a></div><br />2. This would then show the list of layouts present in the slide.</div><div><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEh-YtcX0TdJ7yobgzoqAA65eGWIwk9N3S50uPydsN0GScZXDZRp6w4wFvd14NQYFogytMkS9dYkslgP-GcrXerbVUIwKbeAJGgXuvyXQ7rpZEeBPsCREn_O8DIeTVFn40mghJV59yOq2TM/" style="margin-left: 1em; margin-right: 1em;"><img alt="" data-original-height="823" data-original-width="984" height="535" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEh-YtcX0TdJ7yobgzoqAA65eGWIwk9N3S50uPydsN0GScZXDZRp6w4wFvd14NQYFogytMkS9dYkslgP-GcrXerbVUIwKbeAJGgXuvyXQ7rpZEeBPsCREn_O8DIeTVFn40mghJV59yOq2TM/w640-h535/image.png" width="640" /></a></div><br /><br /></div><div>3. Use <b><i>Insert Layout</i></b> to add a new layout and use <b><i>Insert Placeholder</i></b> to add elements to the layout. </div><div><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgWjU9LL7lMC2T3jBMa__nUsvBYMDeF8lt-DMyH1J6EtO8WudDLtDdjWJU2nZiOELbzVRuh_50f9SsVXCgzt3rQUQWXtKwnwpeI-EUKWYkX3efuHNN3baOelu4oX1uE1q-NkbpJ5aGNeCI/" style="margin-left: 1em; margin-right: 1em;"><img alt="" data-original-height="964" data-original-width="1796" height="344" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgWjU9LL7lMC2T3jBMa__nUsvBYMDeF8lt-DMyH1J6EtO8WudDLtDdjWJU2nZiOELbzVRuh_50f9SsVXCgzt3rQUQWXtKwnwpeI-EUKWYkX3efuHNN3baOelu4oX1uE1q-NkbpJ5aGNeCI/w640-h344/image.png" width="640" /></a></div><div>Alternatively, you can right click an existing layout and duplicate to create a new layout from an existing layout and then edit it.</div><br />4. Right click on the newly created layout and click "<b><i>Rename Layout</i></b>" and specify a name for your layout.</div><div><br /></div><div>5. Save your changes. Click <b><i>Close Master View</i></b> to close and go back to normal slides view.</div><div><br />All done!</div>Unknownnoreply@blogger.com0tag:blogger.com,1999:blog-4426390189809984591.post-54372229227914973612021-02-17T21:04:00.002+05:302021-02-18T12:07:23.046+05:30How to Get Free Courses in Coursera without Credit Card<p><b>Question</b>: <i>How do I audit a course in coursera without using credit card? How do I audit a specialization course in coursera?</i><br /></p><p>Most of the courses in Coursera are free to view with the exception of not getting a certificate and not having access to graded assignments. This is called auditing a course.</p><p>Recently I was trying to audit the <a href="https://www.coursera.org/specializations/python" rel="nofollow" target="_blank">Python for Everybody specialization</a> course in Coursera, but was not able to find the audit link - the only option that I was provided was free trial, where I need to provide credit card details. I had to dig deeper to find how to audit the course, which is what I am going to share here.<br /></p><h1 style="text-align: left;">How do I audit a course in Coursera?</h1><p>1. Go to the course that you are interested in, like <a href="https://www.coursera.org/learn/python-data" rel="nofollow" target="_blank">Python Data Structures</a>. <br />2. Click on <i><b>Enroll for Free</b></i>.</p><p><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEj7S3t4HhDZzZqh25OutNW3VrjWArdaH-AKNE7vVh0P2QH7Xa9r_-2sivAaJOhERiNt4plwxLZAXXEKokLjkztTRA0VKBCws1W-So8ycPbmBuV3K9eZDdnYMDyAfmAH41vXpqAnhlgREiY/s930/Coursera+Course+-+Enroll+for+Free.png" rel="nofollow" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="539" data-original-width="930" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEj7S3t4HhDZzZqh25OutNW3VrjWArdaH-AKNE7vVh0P2QH7Xa9r_-2sivAaJOhERiNt4plwxLZAXXEKokLjkztTRA0VKBCws1W-So8ycPbmBuV3K9eZDdnYMDyAfmAH41vXpqAnhlgREiY/s16000/Coursera+Course+-+Enroll+for+Free.png" /></a><br />3. Choose the <i><b>Audit the Course</b></i> option, present below the "Start Free Trial" option, as shown below.<br /></p><div style="text-align: center;"></div><div style="text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgWK9iJ63E_Pasp1bOSZ3uAAwwNErplxoQBq344TuzMEKC7Nvq4JNih4I-ut1HiM8d2YnbbYjyeMBJRf4uQIrD0fmQef4dbKN_Ul8T79j8Ok4GdRlmog9FrobWlWRcbN23yMFpaVGWivlI/s723/Coursera+-+Audit+the+Course.png" rel="nofollow"><img border="0" data-original-height="622" data-original-width="723" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgWK9iJ63E_Pasp1bOSZ3uAAwwNErplxoQBq344TuzMEKC7Nvq4JNih4I-ut1HiM8d2YnbbYjyeMBJRf4uQIrD0fmQef4dbKN_Ul8T79j8Ok4GdRlmog9FrobWlWRcbN23yMFpaVGWivlI/s16000/Coursera+-+Audit+the+Course.png" /></a></div><div><div style="text-align: left;">If this option is not visible for your course, read the next section to see if and how you can view the course for free.<br /></div><h1 style="text-align: left;">Why can't I see the audit option in my course?</h1><p>There could be a couple of reasons:</p><ol style="text-align: left;"><li>Specialization Course (you can still watch it for free)<br /></li><li>Paid Course <br /></li></ol><h2 style="text-align: left;">Specialization Course <br /></h2>It is a specialization course like <a href="https://www.coursera.org/specializations/python#enroll" rel="nofollow" target="_blank">Python for Everybody Specialization</a>. A specialization is a collection of courses. You won't get the audit option in the specialization page <i><b>but you will usually get the audit option for each of the individual courses under specialization</b></i>. </div><div> </div><div>If you scroll down the page, you can view the list of individual courses under the specialization like below, which you can individually audit.<br /></div><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiwA0WDFWesJujUE48E2SA8np8hc41ygFVwF4mf-mERJBiwJYVw0BjGPkaQ5K2tv22AsN25YpsyrLNBNw-0qrlpRINpM7hoLLTOlugTuaRxZNFoMdvpltP-8Ygc9HBB_m5Kw27BIO1fFDQ/s1059/Specialization+Course.png" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="903" data-original-width="1059" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiwA0WDFWesJujUE48E2SA8np8hc41ygFVwF4mf-mERJBiwJYVw0BjGPkaQ5K2tv22AsN25YpsyrLNBNw-0qrlpRINpM7hoLLTOlugTuaRxZNFoMdvpltP-8Ygc9HBB_m5Kw27BIO1fFDQ/s16000/Specialization+Course.png" /></a></div><div><h2 style="text-align: left;">Paid Course </h2></div><div>Its a paid only course. There are few courses in coursea which are purely paid and doesn't have an audit option like <a href="https://www.coursera.org/learn/networking-gcp-defining-implementing-networks" rel="nofollow" target="_blank">Networking in Google Cloud</a>. In courses like this, you won't find the "Audit the course" option like above. In this case, there is no option to view the course for free.<br /><p></p><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEghXY7WvXgevJM-hgi-G0zFiN2j5a2RuXaSZDWBrib2hypJJUyoqlLRpQ4QnzcL-mQZKUyyDzsQx1zrk61rYWexl8RV7iFScOPYyfYA05lw8ONbKKrsj2P51cabbc_3M8sCSRrheuMV3AM/s699/Paid+Course+-+No+Audit.png" rel="nofollow" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="555" data-original-width="699" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEghXY7WvXgevJM-hgi-G0zFiN2j5a2RuXaSZDWBrib2hypJJUyoqlLRpQ4QnzcL-mQZKUyyDzsQx1zrk61rYWexl8RV7iFScOPYyfYA05lw8ONbKKrsj2P51cabbc_3M8sCSRrheuMV3AM/s16000/Paid+Course+-+No+Audit.png" /></a></div><p></p><h1 style="text-align: left;">Can I pay later and get certificate for a course that I have already audited?</h1><p>Yes! As per <a href="https://learner.coursera.help/hc/en-us/articles/209819053-Get-a-Course-Certificate#heading-2" rel="nofollow" target="_blank">coursera's FAQ</a>, you can pay later and get a certificate for a course that you have already audited but might need to complete the graded assignments.</p><p><b>Have you used Coursera? What is your favourite course? Let us know in the comments!</b><br /></p></div>Unknownnoreply@blogger.com0tag:blogger.com,1999:blog-4426390189809984591.post-72892539664466277502021-02-16T22:38:00.008+05:302021-02-16T23:28:36.249+05:30How to Use Multiple TestStand Environments<p><i><b>Question: Is it possible to have separate TestStand environment settings for each project in a single station?</b></i></p><p>The short answer is Yes! This is possible using the concept of TestStand Environment Settings, where you can have separate TestStand environment setting for each of your projects, without needing to go and tweak the default TestStand Environment settings everytime you switch from one project to another.</p><p>TestStand Environment settings can be accessed from TestStand menu <i><b>Configure -> Environment.</b></i></p><p><i><b></b></i></p><div class="separator" style="clear: both; text-align: center;"><i><b><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEg7JIelUKEHRVahOAgbp_KAwjEgtn7ZywJEfoNDEWMdRj3HoFtCv40G0msFEV0I9KnOt5_9N5Paz7Nfk7b1ZG5Xa3IFhdhqYBKY1JSow2ydyqflnjgjpmJ-udvwA1mJJalWfyqd8a4-bu8/s673/TestStand+Configure+Environment+Window.png" rel="nofollow" style="margin-left: 1em; margin-right: 1em;" target="_blank"><img border="0" data-original-height="274" data-original-width="673" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEg7JIelUKEHRVahOAgbp_KAwjEgtn7ZywJEfoNDEWMdRj3HoFtCv40G0msFEV0I9KnOt5_9N5Paz7Nfk7b1ZG5Xa3IFhdhqYBKY1JSow2ydyqflnjgjpmJ-udvwA1mJJalWfyqd8a4-bu8/s16000/TestStand+Configure+Environment+Window.png" /></a></b></i></div>There are 3 directories which together comprise the TestStand Environment. They are<p></p><p></p><ol style="text-align: left;"><li>CommonAppData</li><li>Public</li><li>LocalAppData<br /></li></ol><h1 style="text-align: left;">Creating a New TestStand Environment<br /></h1><p>Open Configure Environment via the menu item - <i><b>Configure -> Environment</b></i>. Use Save As option to create a new TestStand Environment file, which you can save inside your project directory. </p><p>Configure custom directories for the 3 environment variables.</p><ol style="text-align: left;"><li>CommonAppData </li><ul><li><i><YourProjectRoot>/TSEnv/CommonAppData</i><br /></li></ul><li>Public</li><ul><li><i><YourProjectRoot>/TSEnv/Public</i></li></ul><li>LocalAppData</li><ul><li><i><YourProjectRoot>/TSEnv/LocalAppData</i></li></ul></ol><p>Click Save and click on "<i><b>Set Engine Environment</b></i>" to relaunch TestStand with the selected TestStand Environment. Kindly note that any change to the TestStand Environment settings would require restart of TestStand to take effect.</p><h1 style="text-align: left;">Launching TestStand/OI with Custom TestStand Environment<br /></h1><p>Whenever TestStand application is launched directly, it will launch with the<i><b> <Global></b></i> TestStand Environment settings. </p><p>To manually switch to a different TestStand Environment, one option is to go to <i><b>Configure -> Environment</b></i>, choose the required TestStand Environment in the drop down and then click on "Set Engine Environment". This will relaunch TestStand with the chosen TestStand Environment.</p><p>The other option is to pass the TestStand Environment file path when launching the TestStand Application, like using a batch file.</p><p><b>Command line Syntax </b><br /></p>
<script src="https://gist.github.com/KarthikAbiram/3048b7632d392e51f0c0fa42a96b6993.js"></script>
<noscript><!-- HTML generated using hilite.me --><div style="background: #ffffff; overflow:auto;width:auto;border:solid gray;border-width:.1em .1em .1em .8em;padding:.2em .6em;"><pre style="margin: 0; line-height: 125%">:: Format
SeqEdit.exe /env <span style="color: #aa5500">"MyEnvironment.tsenv"</span>
:: Launching TestStand with Custom Environment
<span style="color: #aa5500">"C:\Program Files\National Instruments\TestStand 2020\Bin\SeqEdit.exe"</span> /env <span style="color: #aa5500">"D:\ProjectName\TSEnv\TS2020Env-1.tsenv"</span>
:: This method will also work <span style="color: #0000aa">for</span> TestStand OI Executables as well. Replace the SeqEdit.exe path with your TestStand OI EXE Path.
:: Launching OI with Custom Environment
<span style="color: #aa5500">"C:\Users\Public\Documents\National Instruments\TestStand 2020 (64-bit)\UserInterfaces\Full-Featured\LabVIEW\Source Code\TestExec.exe"</span> /env <span style="color: #aa5500">"D:\ProjectName\TSEnv\TS2020Env-1.tsenv"</span>
</pre></div>
</noscript>
<p>What if you don't want to do the extra step of passing the command line argument for this? We got that covered in the next section :-)<br /><b></b><i><b></b></i></p><h1 style="text-align: left;">Directly Specifying the TestStand Environment in your Operator Interface<br /></h1><p>If you are having a custom TestStand Operator Interface that you want it to always use a custom TestStand Environment, you can use explicitly specify the TestStand Environment path. </p><p> In the .NET Constructor, choose the Assembly <i><b>NationalInstruments.TestStand.Interop.API</b></i> and choose <i><b>EngineInitializationSettingsClass</b></i>'s constructor. Then use this class's method <i><b>SetEnvironmentPath</b></i> to set the TestStand Environment Path. If you pass a empty string, OI will use the TestStand Global Environment.</p><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEghaIC7oavI5XX02kyrQGUJu7xKnCijyCPCtvQaAM9A2jMWD8u-BhY66Ippjmz6g2VTQ0RCkd6D_TeSrOpwtbvVRmQZRZkWOf3tkklIlxzWlidh7piJ8tzKVeaTL5Xe4rLiakke5uQ2Ppo/s589/Setting+TestStand+Environment+in+OI.png" rel="nofollow" style="margin-left: 1em; margin-right: 1em;" target="_blank"><img border="0" data-original-height="589" data-original-width="587" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEghaIC7oavI5XX02kyrQGUJu7xKnCijyCPCtvQaAM9A2jMWD8u-BhY66Ippjmz6g2VTQ0RCkd6D_TeSrOpwtbvVRmQZRZkWOf3tkklIlxzWlidh7piJ8tzKVeaTL5Xe4rLiakke5uQ2Ppo/s16000/Setting+TestStand+Environment+in+OI.png" /></a></div><p></p><p>Kindly note that this needs to be done before the TestStand Engine is initialized and hence needs to be the first piece of code that gets executed when you launch your OI. If you need to change the TestStand Environment after the engine is initialized, you need to restart your OI.<br /></p><p><i><b> Have you used TestStand Environment in any of your projects? Let us know in the comments :-)</b></i><br /><b></b><i><b></b></i></p><div><script type="text/javascript">addthis_url='<data:post.url/>'; addthis_title='<data:post.title/>'; addthis_pub='YourPCInfo';</script><script src="http://s7.addthis.com/js/addthis_widget.php?v=12" type="text/javascript"></script></div>Unknownnoreply@blogger.com0tag:blogger.com,1999:blog-4426390189809984591.post-36932163596352523352021-02-08T23:52:00.005+05:302021-02-08T23:52:59.274+05:30Best Domain Name Markets for Seller<p>When it comes to selling of domain names, it all depends on finding the right buyer. So, if you are looking to sell any of your domain names, it will be a good idea to list them in a domain name market place, so that it can reach a wider audience.</p><p>Here are some of the notable domain name market places and the fees they charge. Some charge a listing fee + commission charges, while some of them are free to list and have only commission charges.</p><h3 style="text-align: left;">Table of Contents</h3><ol style="text-align: left;"><li><a href="#Sedo">Sedo</a></li><li><a href="#Flippa">Flippa</a></li><li><a href="#AfterNic">AfterNic </a><br /></li><li><a href="#BrandBucket">BrandBucket</a></li><li><a href="#Brandpa">Brandpa</a></li><li><a href="#SquadHelp">SquadHelp</a></li><li><a href="#Namerific">Namerific</a></li><li><a href="#MakerMonikers">MakerMonikers</a><br /></li></ol><p>1. <a href="https://sedo.com/us/sell-domains/?language=us&campaignId=323440" id="Sedo" name="Sedo" target="_blank">Sedo</a></p><p></p><div class="separator" style="clear: both; text-align: center;"><a href="https://sedo.com/us/sell-domains/?language=us&campaignId=323440" rel="nofollow" style="margin-left: 1em; margin-right: 1em;" target="_blank"><img border="0" data-original-height="504" data-original-width="912" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgqkeON41omHWsRvnh3YRjdW8CCXTb8oqUBjD8g9K96O5MhGkATgVfWWfb5_dO1p3CESt9oU6IgknGNJukHB8cyoLVpEaYGGnxfkZx7QQHzgwvbbOoloJzCycsKdh8PB9pTjiJRnFPtEEo/s640/Sedo.jpg" width="640" /> </a> <br /></div><p>With nearly 20 million listed domains, Sedo is world's largest trade platform for domain names. There are multiple ways to offer your domain for sale in Sedo.<br /></p><p></p><ol style="text-align: left;"><li><b>Market Place Listing: </b> </li><ul><li>Free to list with <i><b>Buy Now</b></i> or <i><b>Make Offer</b></i>. </li><li>Commission Charges: 10%<br /></li></ul><li><b>Direct Auction:</b> </li><ul><li>More Flexibility with ability to set minimum price. </li><li>Listing Charge: 59$. </li><li>Commission Charges: 15%</li></ul><li><b>Market Place Auction:</b> </li><ul><li>When a domain is at <i><b>Make Offer</b></i> and receives the 1st bid, we have option to release it to Market Place Auction with the minimum price of the 1st bid.<br /></li><li>Guaranteed sale <br /></li><li>Free to list (provided you have already got an offer). </li><li>Commission Charges: 15%</li></ul><li><b>Hire a Sedo Broker and Sell: </b> </li><ul><li>For premium domains. </li><li>No upfront cost. </li><li>Commission Charges: 15% </li><li><a href="https://sedo.com/us/services/broker-service/" target="_blank">Sedo Hire a Broken for Buying or Selling</a><br /></li></ul></ol><p>2. <a href="https://flippa.com/domains" id="Flippa" name="Flippa" target="_blank">Flippa</a></p><p></p><div class="separator" style="clear: both; text-align: center;"><a href="https://flippa.com/domains" rel="nofollow" style="margin-left: 1em; margin-right: 1em;" target="_blank"><img border="0" data-original-height="299" data-original-width="892" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEg7Cx4k0roDq6d6WDolwSjqGyui_qaeQLgXYgXhJPJFifJuHIXFnWoMw7UpCwTXQnt161BxLObJFmj2txTwNX-zm65FH-QL4thZ0BHD9Z4ROYfnriVzRrvJq40Jxj1zNA_VOyYf3Uy1_58/s640/Flippa_Domains.jpg" width="640" /></a></div><p></p><p>Flippa is a market place for buying and selling websites, apps and yes, domains.</p><p><b>Listing Fee: </b>10$ for domains. <br /></p><p><b>Commission Charges:</b></p><ul><li><span> 1</span>0% for domains upto $50,000 </li><li>7.5% for domains between $50,001 and $100,000</li><li>5% for domains more than and $100,000 </li></ul><p>3. <a href="https://www.afternic.com/sell-domains" id="AfterNic" name="AfterNic" target="_blank">AfterNic</a></p><p></p><div class="separator" style="clear: both; text-align: center;"><a href="https://www.afternic.com/sell-domains" rel="nofollow" style="margin-left: 1em; margin-right: 1em;" target="_blank"><img border="0" data-original-height="222" data-original-width="924" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhwMc4PDEe9FSCwakR_-JTTciAayjOcl2KZHyah5Qpi22vaEBuUDeSvNVnKKC1CuwnaiEtnOeEr6AIsW_qItk0Sh5oqA349jw1ICG1309Spainlj0SBL3-xSzpENQEFzckbJNY1gsdkBgc/s640/AfterNic.jpg" width="640" /></a></div><p></p><p>AfterNic has more than 5 million domain names listed for sale and they receive more than 75 million domain name searches - which they claim is the most for any domain name market place.</p><p><b>Listing Fee: </b>Free <br /></p><p><b>Commission Charges:</b></p><ul><li>20% of the cost till $5,000</li><li>15% of the cost over $5,000 to $25,000</li><li>10% of the cost over $25,000 <br /></li></ul><p>4. <a href="https://www.brandbucket.com/" id="BrandBucket" name="BrandBucket" target="_blank">BrandBucket</a></p><div class="separator" style="clear: both; text-align: center;"><a href="https://www.brandbucket.com/" rel="nofollow" style="margin-left: 1em; margin-right: 1em;" target="_blank"><img border="0" data-original-height="482" data-original-width="785" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjC3Sn6ibTgJIMlDATNxQNXnXSG4KddCDmoZAK56LbEYUqTpqup2COeLkFNPekT7K3LUQ5-QP97pY4-wccVdXjhvV-iGlnnmYlSxewoEgFEgJ0x-F7zxXcehLyt59bOqSNYNya-eAQQrjU/s640/BrandBucket.jpg" width="640" /></a></div><p>BrandBucket was founded by Margot Bushnaq in 2007 and it is one of the pioneers in the setting up of premium brandable domain name market place. </p><p><b>Listing Fee: </b>Requires a $1 appraisal fee and a $9 listing fee for approved names. </p><p><b>Commission Charges:</b></p><ul style="text-align: left;"><li>30% for domains below $10,000 </li><li>25% for domains between $10,000 and $49,999 </li><li>20% for domains between $50,000 and $99,999 </li><li>15% for domains above $100,000</li></ul><p><b>Other Charges:</b></p><p>Logo design charges will be deducted from the final selling price.<br /></p><p>5. <a href="https://brandpa.com/" id="Brandpa" name="Brandpa" target="_blank">Brandpa</a></p><div class="separator" style="clear: both; text-align: center;"><a href="https://brandpa.com/" rel="nofollow" style="margin-left: 1em; margin-right: 1em;" target="_blank"><img border="0" data-original-height="403" data-original-width="743" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgvcDam79USvVTPVklUkeGlsP6dBg7BW9FKJLXSkGWQYf_rvTwcQh9yjqwhJqB-edzuw6pr6nUTN5xDuPyDdetfxGaNnrEEvFs8NiT_YSTvfe7jZDta69dUgsU3LydLCWuKwgU5vrlXbIk/s640/Brandpa.jpg" width="640" /></a></div><p><b>Requirements: </b>Accepts only dot com with maximum length of 14 characters (before the dot). Minimum listing price is 1000 USD.</p><p><b>Payment Methods: </b>Paypal or Wire Transfer<br /><b></b></p><p><b>Listing Fee: </b>$8 (one time charge)<br /></p><p><b>Commission Charges:</b></p><ul style="text-align: left;"><li>25% for domains below $50K</li><li>20% for domains between $50K – $100K</li><li>15% for domains above $100K</li></ul><div><p><b>Other Charges: </b>None<b> <br /></b></p><p>6. <a href="https://www.squadhelp.com/r/PiGenie" id="SquadHelp" name="SquadHelp" target="_blank">SquadHelp</a></p><div class="separator" style="clear: both; text-align: center;"><a href="https://www.squadhelp.com/r/PiGenie" rel="nofollow" style="margin-left: 1em; margin-right: 1em;" target="_blank"><img border="0" data-original-height="593" data-original-width="812" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhB_HHHT3NKIGyRWB2nXTMC9E4XWC-Tj_sSvcij3RAenY3aGdX7zmoEIXR9MKPzyaRwSkpljwncMBNnuViUpUqMwVLx2bo9LRZW6-_jOcIaSerXZRNBZQRxyLDYajI3Bg7AdVGIf6yZmWY/s640/SquadHelp.jpg" width="640" /></a></div><p></p><p><b>Payment Methods: </b>Paypal or Payoneer</p><p><b>Listing Fee: </b>Free<br /></p><p><b>Commission Charges:</b></p><ul style="text-align: left;"><li>Below $2500: Variable Commission (Typically 30-35%)</li><li>$2500 to $5000: 30% Commission</li><li>$5000 to $50K: 25% Commission</li><li>$50K to $75K: 20% Commission</li><li>Above $75K: 15% Commission</li></ul></div><div><b>Other Charges: </b>None<b> </b><p>7. <a href="https://www.namerific.com/sell" id="Namerific" name="Namerific" target="_blank">Namerific</a></p><div class="separator" style="clear: both; text-align: center;"><a href="https://www.namerific.com/sell" rel="nofollow" style="margin-left: 1em; margin-right: 1em;" target="_blank"><img border="0" data-original-height="383" data-original-width="746" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgrkYBOe4sISsRr8GcSBz18hSIxE8-DciMtMV7rXGiTr3FT4fD5yyYJWRawKOuIf4U20yRt74_tIjAkWvTu2WvxQvFprrhRxq_yaCSRxr2iRwvBOMFcdZGjemepkB6zG7pap7Lv6BqyrW0/s640/Namerific.jpg" width="640" /></a></div><p></p><p><b>Listing Fee: </b>Free</p><p><b>Payment Methods: </b>Paypal, VISA, MasterCard, AmericanExpress, Discover <br /></p><p><b>Commission Charges: </b>Unknown.<br /></p><b>Other Charges: </b>None<p>8. <a href="https://makermonikers.com/sell/" id="MakerMonikers" name="MakerMonikers" target="_blank">MakerMonikers</a></p><p></p><div class="separator" style="clear: both; text-align: center;"><a href="https://makermonikers.com/sell/" rel="nofollow" style="margin-left: 1em; margin-right: 1em;" target="_blank"><img border="0" data-original-height="617" data-original-width="781" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEh2IVlAYJ0ymk0okPPkxqYaBUh-HY4_dWB09RI1IghVT02JEEuKTLytrB3wKGfjwR36Ep_d6rFM8TX-5wMG8CdDKe_VfkyTO1RPBDeAq2T6HuBvrDubd6DMnquiun_szgdzioLYJHhlnos/s640/MakerMonikers.jpg" width="640" /></a></div> <p><b>Requirements: </b></p><ul style="text-align: left;"><li>It must be .com, .co or .io</li><li>No hyphens or numbers (unless a number really, really makes sense)</li><li>No names which violate a known trademark</li><li>No offensive names or adult domains</li><li>No international character domains</li><li>Ideally, 1-2 dictionary words or a made up “brand” word that is easy to spell/say</li><li>Priced between $50-$500 </li></ul><div><p><b>Payment Methods: </b>Stripe<br /></p><p><b>Listing Fee: </b>Free<br /></p><p><b>Commission Charges: </b>Flat 10%<br /></p><b>Other Charges: </b>None</div><div><h4 style="text-align: left;">Other Domain Name Market Places</h4><h4 style="text-align: left;"></h4></div><div><ol style="text-align: left;"><li><a href="https://www.estibot.com/marketplace" target="_blank">Estibot Market Place - No Commission Charges</a><br /></li><li><a href="https://dan.com/users/signup" target="_blank">Dan.com</a></li></ol></div><div>That is it from us for now. <i><b>How is your experience in these market places and which one do you prefer? Do you use any other market place?</b></i> Do let us know in the comments section below.<b> <br /></b><p></p></div></div>Unknownnoreply@blogger.com0tag:blogger.com,1999:blog-4426390189809984591.post-81835196060369606132021-02-07T19:09:00.006+05:302022-02-04T16:35:47.207+05:30Free Mockup Tools<div dir="ltr" style="text-align: left;" trbidi="on"><div style="text-align: left;">A good mock up tool is highly useful for visualizing what we are thinking and for collaborating and brainstorming with others.<br /><br />Lets go over the list of free mock up tools, which are listed in the order of my personal preference. </div><div class="separator" style="clear: both; text-align: center;"><a href="https://www.blogger.com/blogger.g?blogID=2019272974978441262" style="clear: right; float: right; margin-bottom: 1em; margin-left: 1em;"></a><a href="https://www.blogger.com/blogger.g?blogID=2019272974978441262" style="clear: right; float: right; margin-bottom: 1em; margin-left: 1em;"></a></div><h3 style="text-align: left;">1. <a href="https://www.justinmind.com/" target="_blank">JustInMind </a>(Free, Pro - 19$/user/month)</h3><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjrSq_cK3l9BY_uTzb0GyNwgaq6skOsvWOZ_txwc7BUGLndsnwG5M0tKQ0g9w6-F1n2W91cCIkOugRjPaU5U3IaCP6_TtXaVSdtZXYoGMNn4m2qHiAxrrBJAtre_798fDx62U6Ie270aVc/s1040/JustInMind.png" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="670" data-original-width="1040" height="412" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjrSq_cK3l9BY_uTzb0GyNwgaq6skOsvWOZ_txwc7BUGLndsnwG5M0tKQ0g9w6-F1n2W91cCIkOugRjPaU5U3IaCP6_TtXaVSdtZXYoGMNn4m2qHiAxrrBJAtre_798fDx62U6Ie270aVc/w640-h412/JustInMind.png" width="640" /></a></div><div style="text-align: left;"><h4 style="text-align: left;">JustInMind Free vs Pro Version</h4> <div class="separator" style="clear: both; text-align: center;"><a href="https://www.justinmind.com/blog/justinmind-free-vs-pro-edition/" style="margin-left: 1em; margin-right: 1em;" target="_blank"><img border="0" data-original-height="384" data-original-width="760" height="324" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhr0V2pzEnXjanTD7iDTJs9JiFzd4WGOZooAI1mMrtljU0CUXPQZvtW079j03P1T7MnKwpgH09VhkIzEDAsbym7R8Q5JwDwawruCU7ZdthOSm7Hk6fSl8D5RhZpqgklJjMd9MtqCWrQSlo/w640-h324/JustInMind+Free+vs+Pro.png" width="640" /></a></div><h4 style="text-align: left;">Examples</h4><a href="https://www.justinmind.com/examples" target="_blank"></a><h4 style="text-align: left;"><div class="separator" style="clear: both; text-align: center;"><a href="https://www.justinmind.com/examples" style="margin-left: 1em; margin-right: 1em;" target="_blank"><img border="0" data-original-height="677" data-original-width="834" height="520" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhBkTWgKkLJhRqCfGxSGqRb_LAtpHHWMjlneTJEmcyD4cblUKzqSNCJA2h3zXQgzRrQ0BCUXkEiTsa88WBev1gZaEs56GBZ2X94mRpwlIzut316Dwgz0W7KH-CmO2lzJPZ3LcIutfMytww/w640-h520/JustInMind+Example.png" width="640" /></a></div><br /></h4><h4 style="text-align: left;">Free UI Kits</h4><h4 style="text-align: left;"><div class="separator" style="clear: both; text-align: center;"><a href="https://www.justinmind.com/ui-kits" style="margin-left: 1em; margin-right: 1em;" target="_blank"><img border="0" data-original-height="727" data-original-width="830" height="560" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhDP46c5zF7XPgunUjqJfruoF8qWwdQ4GkjhzxbL2KH1rBe2MIaRy91eJXCLvXvtcGLIts78DsU8WFTCyJEDpdCJ9TQ7m9Saje-peUQPcuqAT3CkvGsxSgjfNhgr_es5qBsXYeVw5LtBu0/w640-h560/JustInMind+Free+UI+Kits.png" width="640" /></a></div><span style="font-weight: normal;">It also has a good collection of Free UI Kits which can kickstart your mockup.</span><br /></h4></div><h3 style="text-align: left;">Other Mock Up Tools with Free Version</h3><ol style="text-align: left;"><li><a href="https://www.figma.com/pricing/" target="_blank">Figma</a></li><li><a href="https://miro.com/pricing" target="_blank">Miro</a></li><li><a href="https://www.mockplus.com/buy/mockplus-idoc" target="_blank">MockPlus</a></li><li><a href="https://www.uxpin.com/" target="_blank">UXPin</a></li><li><a href="https://marvelapp.com/" target="_blank">MarvelApp </a></li><li><a href="https://prottapp.com/" target="_blank">ProttApp</a></li><li><a href="https://wireframe.cc/" target="_blank">Wireframe.cc </a></li><li><a href="https://moqups.com/pricing/" target="_blank">Moqups</a> (Free Plan - 1 Project, 200 Objects)</li></ol>Know of any other good mock up tool? Please let us know in the comments :-)</div>Unknownnoreply@blogger.com0tag:blogger.com,1999:blog-4426390189809984591.post-89993939244331026402021-02-07T19:05:00.000+05:302021-02-07T19:05:04.082+05:30Free Image Editors<div dir="ltr" style="text-align: left;" trbidi="on"><h2 style="text-align: left;">Online Tools</h2><ol style="text-align: left;"><li><a href="https://pixlr.com/x/" target="_blank">Pixlr</a></li><li><a href="https://www.befunky.com/create/" target="_blank">Be Funky</a></li></ol><h2 style="text-align: left;">Offline Tools</h2><ol style="text-align: left;"><li>Paint.NET</li><li>GIMP </li></ol></div>Unknownnoreply@blogger.com0tag:blogger.com,1999:blog-4426390189809984591.post-13735903825395997062021-02-07T19:02:00.002+05:302021-02-07T19:02:43.778+05:30VSDC Video Editor Guide<h1 style="text-align: left;">Text Effects in VSDC<br /></h1><h2 style="text-align: left;">1. How to Make Introductory Title Animation in VSDC</h2><p></p><p></p><p></p><p></p><p></p><p></p><p></p><h2 style="text-align: left;"><iframe allow="accelerometer; autoplay; encrypted-media; gyroscope; picture-in-picture" allowfullscreen="" frameborder="0" height="315" src="https://www.youtube.com/embed/i-B-aHxivhQ" width="560"></iframe></h2><h2 style="text-align: left;">2. Push Text Effect in VSDC</h2><p></p><iframe allow="accelerometer; autoplay; encrypted-media; gyroscope; picture-in-picture" allowfullscreen="" frameborder="0" height="315" src="https://www.youtube.com/embed/7idlsuBEURY" width="560"></iframe>Unknownnoreply@blogger.com0tag:blogger.com,1999:blog-4426390189809984591.post-22120642457011300602021-02-07T19:01:00.002+05:302021-11-16T10:24:54.212+05:30Free Images, Ilustrations and Icons<div dir="ltr" style="text-align: left;" trbidi="on">For any post, having suitable images improves the reading experience of the user. Especially when scrolling, a good catchy image captures the attention of the reader. Its also equally important that we use images and icons whose license permits free use.</div><div dir="ltr" style="text-align: left;" trbidi="on"> </div><div dir="ltr" style="text-align: left;" trbidi="on">Here we are listing collection of sites where we can get free images and logos.</div><div dir="ltr" style="text-align: left;" trbidi="on"> <br /></div><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEj_n149kUe7PFigxrWuxoKhWbv2FG_18q1GXw0N11Equ8gfz2ulyKfLjy2h__VAgHvnUiZuT072SuGYc2dl05eeactYq5Nc1kFeQax2B0B53_PYQf3m7vmR04mkHt5KDm01BtviFn3FqSM/s760/Free+Images+and+Icons+List.jpg" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="570" data-original-width="760" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEj_n149kUe7PFigxrWuxoKhWbv2FG_18q1GXw0N11Equ8gfz2ulyKfLjy2h__VAgHvnUiZuT072SuGYc2dl05eeactYq5Nc1kFeQax2B0B53_PYQf3m7vmR04mkHt5KDm01BtviFn3FqSM/s320/Free+Images+and+Icons+List.jpg" width="320" /></a></div><div dir="ltr" style="text-align: left;" trbidi="on"></div><div dir="ltr" style="text-align: left;" trbidi="on"><h2 style="text-align: left;">Free Images</h2></div><div dir="ltr" style="text-align: left;" trbidi="on">Here is a collection of Free Stock Photo & Image Sources: <br /><ol style="text-align: left;"><li><a href="https://burst.shopify.com/" target="_blank">Burst from Shopify</a></li><li><a href="https://pixabay.com/" target="_blank">Pixabay</a></li><li><a href="https://morguefile.com/photos" target="_blank">Morgue File</a></li><li><a href="https://unsplash.com/" target="_blank">Unsplash</a></li><li><a href="https://www.pexels.com/" target="_blank">Pexels</a></li><li><a href="https://www.publicdomainpictures.net/en/" target="_blank">Public Domain Pictures </a></li><li><a href="https://pixy.org/" target="_blank">Pixy </a><br /></li><li><a href="https://www.publicdomainpictures.net/en/" target="_blank">LibreShot</a></li><li><a href="https://pxhere.com/" target="_blank">Pxhere </a><br /></li><li><a href="https://pixnio.com/" target="_blank">Pixnio <br /></a></li></ol><p>Kindly refer to the accompanying license on using the image - most of the free images would require an attribution, which is a fair price to pay for supporting the authors.</p><h2 style="text-align: left;">Free Illustrations</h2><div style="text-align: left;"> Here is a collection of Free Illustrations:</div><div style="text-align: left;"><ol style="text-align: left;"><li><a href="https://www.openpeeps.com/" target="_blank">OpenPeeps</a></li><li><a href="https://storyset.com/" target="_blank">StorySet </a><br /></li><li><a href="https://www.humaaans.com/" target="_blank">Humaaans </a><br /></li><li><a href="https://undraw.co/illustrations" target="_blank">Undraw</a></li><li><a href="https://www.drawkit.io/" target="_blank">DrawKit </a></li><li><a href="https://www.pixeltrue.com/free-illustrations" target="_blank">PixelTrue </a></li><li><a href="https://illlustrations.co/" target="_blank">Illustrations </a></li><li><a href="https://2.flexiple.com/scale/all-illustrations" target="_blank">Scale by Flexiple </a><br /></li><li><a href="https://iconscout.com/" target="_blank">Iconscout </a></li><li><a href="https://www.manypixels.co/gallery/" target="_blank">ManyPixels </a></li><li><a href="https://lukaszadam.com/illustrations" target="_blank">Lukaszadam </a><br /></li><li><a href="https://www.stickpng.com/" target="_blank">StickPNG </a><br /></li></ol></div></div><div dir="ltr" style="text-align: left;" trbidi="on"><h2 style="text-align: left;">Free Icons</h2><div style="text-align: left;"><ol style="text-align: left;"><li><a href="https://fonts.google.com/icons" target="_blank">Google Material Design Icons </a><br /></li><li><a href="https://www.flaticon.com/" target="_blank">Flat Icon </a><br /></li><li><a href="https://icons.getbootstrap.com/" target="_blank">Bootstrap Icons </a></li><li><a href="https://css.gg/" target="_blank">CSS Icons </a></li></ol>Know of any other good quality site which provides free images and icons? Let us know in the comments. </div><ol style="text-align: left;"></ol></div>Unknownnoreply@blogger.com0tag:blogger.com,1999:blog-4426390189809984591.post-30355936319024623552021-02-07T18:11:00.004+05:302021-02-07T18:12:10.091+05:30Quick Links for Blogger APIs<div dir="ltr" style="text-align: left;" trbidi="on"> This post has collection of useful links related to Blogger APIs.<br /><div><ol style="text-align: left;"><li><a href="https://developers.google.com/blogger/docs/3.0/getting_started">Blogger API 3.0</a></li><li><a href="https://developers.google.com/blogger/docs/3.0/using#auth" target="_blank">Authorization of Blogger APIs </a></li><ol><li><a href="https://console.developers.google.com/apis/dashboard?authuser=0" target="_blank">Google API Services Project & Dashboard </a></li><li><a href="https://developers.google.com/identity/protocols/OAuth2" target="_blank">OAuth 2.0 Flow </a></li></ol><li>Calling Styles</li><ol><li><a href="https://developers.google.com/blogger/docs/3.0/getting_started#REST">Using REST</a></li><li><a href="https://developers.google.com/blogger/docs/3.0/libraries">Using Client Libraries</a> </li><ol><li> <a href="https://developers.google.com/blogger/docs/3.0/libraries#python">Python</a></li><ol><li><a href="https://github.com/googleapis/google-api-python-client">Python Library - GitHub</a></li><li><a href="https://developers.google.com/resources/api-libraries/documentation/blogger/v3/python/latest/">Documentation </a></li><li><a href="https://github.com/googleapis/google-api-python-client/blob/master/samples/blogger/blogger.py">Python Blogger API Example </a></li></ol></ol></ol><li><a href="https://developers.google.com/apis-explorer/#p/blogger/v3/">Trying out the Blogger APIs directly from Browser </a></li></ol></div></div>Unknownnoreply@blogger.com0tag:blogger.com,1999:blog-4426390189809984591.post-11065931368358306582021-02-07T18:10:00.003+05:302021-02-07T18:10:33.065+05:30Quick Links for Blogger Customization<div dir="ltr" style="text-align: left;" trbidi="on"> This is a collection of useful links related to blogger customization. </div><div dir="ltr" style="text-align: left;" trbidi="on"></div><div dir="ltr" style="text-align: left;" trbidi="on"><h3 style="text-align: left;">Table of Contents</h3></div><div dir="ltr" style="text-align: left;" trbidi="on"> <ol style="text-align: left;"> <li> <a href="#NavigationMenu">Navigation Menu</a> </li> <li><a href="#ShortCodes" id="#ShortCodes" name="#ShortCodes">Short Codes</a></li> <li><a href="#TableOfContents">Table of Contents</a></li> <li><a href="#TopicListByLabel">Topic List by Label</a></li> <li><a href="#BloggerTags">Blogger Tags & Attributes</a></li> <li><a href="#BloggerThemeIdeas">Blogger Theme Styles and Ideas </a><br /></li> <li><a href="#UsefulLinks">Useful Links</a> <br /></li> </ol> <h2 style="text-align: left;">Basics of Blogger Theme</h2><div style="text-align: left;">Here are some useful getting started articles on how to create a blogger theme from scratch:</div><div style="text-align: left;"><ul style="text-align: left;"><li><a href="https://www.compromath.com/2017/07/create-blogger-template.html" target="_blank">Create Blogger Template</a><br /></li><li><a href="https://www.freshtechtips.com/2018/11/create-custom-blogger-template.html" target="_blank">How to Design a Custom Blogger (Blogspot) Template </a><br /></li></ul></div><h2 style="text-align: left;"><a href="#NavigationMenu" id="NavigationMenu" name="NavigationMenu">Navigation Menu</a> </h2> A navigation menu is required to provide an easy way for the users to navigate to different set of topics in a professional way.<br /> <br /> Below are some of the Navigation Plugins that you can use, in the order of my personal preference:<br /> <ol style="text-align: left;"> <li><a href="https://www.mybloggertricks.com/2012/01/css3-drop-down-menu-no-images-and-no.html" target="_blank">CSS3 Drop Down Menu</a></li> <li><a href="https://www.mybloggertricks.com/2012/09/colourful-tabs-jquery-menu.html" target="_blank">Multi Level Horizontal Tabs - MyBloggerTricks</a></li> <li><a href="https://www.mybloggertricks.com/2011/11/61-hot-drop-down-menus-for-blogger.html" target="_blank">Different Styles of Simple Drop Down Menus</a></li> </ol> <h2 style="text-align: left;"> <a href="#ShortCodes" id="ShortCodes" name="ShortCodes">Short Codes</a> </h2> Short codes are like macros which enables us to add/format content in a simple & easy way, instead of repeating the entire code each time, the same functionality is required.<br /> <div style="text-align: left;"><ul style="text-align: left;"><li><a href="https://www.mybloggertricks.com/2015/04/blogger-shortcode-plugin.html" target="_blank"> Blogger Short Code Plugin by MyBloggerTrick</a></li></ul><ol style="text-align: left;"><ul><li><a href="http://blogger-shortcode.blogspot.com/2015/05/blogger-shortcode-for-buttons.html" rel="nofollow" target="_blank">CSS3 Buttons </a></li><li><a href="http://blogger-shortcode.blogspot.com/2015/04/notification-boxes-shortcode.html" rel="nofollow" target="_blank">Notification Boxes</a></li><li><a href="http://blogger-shortcode.blogspot.com/2015/03/accordion-shortcode-for-blogger.html" rel="nofollow" target="_blank">Accordian Shortcode</a></li></ul></ol><ul style="text-align: left;"><li><a href="https://smag-soratemplates.blogspot.com/p/post-format-and-page-markup.html" rel="nofollow" target="_blank">Alert Boxes in Sora Templates</a><br /></li></ul></div> <h2 style="text-align: left;"> <a href="#TableOfContents" id="TableOfContents" name="TableOfContents">Table of Contents</a> </h2> Adding Table of Contents to a post provides easy navigation of different sections in the post as well as provides a bird's eye view of different sections in the post. </div><div dir="ltr" style="text-align: left;" trbidi="on"></div><div dir="ltr" style="text-align: left;" trbidi="on"></div><div dir="ltr" style="text-align: left;" trbidi="on"> <img alt="" src="data:image/png;base64,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" /> <p style="text-align: left;"> This <a href="https://www.pigenie.com/2020/08/creating-table-of-contents-in-blogger-without-code.html" target="_blank">article explains how you can create table of contents for your blog post without code</a>, although its a bit manual process. In case you would like to try an automated way, the article at the end lists few options that you can give it a go.<br /> </p></div><div dir="ltr" style="text-align: left;" trbidi="on"> <h2 style="text-align: left;"> <a href="#TopicListByLabel" id="TopicListByLabel" name="TopicListByLabel">Topic List by Label</a> </h2> <h2 style="text-align: left;"> <img alt="" src="data:image/png;base64,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" /> <br /> </h2> <a href="/2019/10/create-topic-list-by-label-in-blog-post.html" target="_blank">This article</a> explain the steps for creating a list of topics of a particular label in a widget or blog post dynamically.<br /> <h2 style="text-align: left;"><a href="#BloggerTags" id="BloggerTags" name="BloggerTags">Blogger Tags and Attributes</a><br /></h2> <ol style="text-align: left;"> <li><a href="https://support.google.com/blogger/answer/47270?hl=en" target="_blank">Blogger Data Tags</a> - List of blog & post tags like blogid, blog title, postid available in blogger.</li> <li><a href="https://bloggerbook.blakbin.com/2018/11/blogger-attribute-intro.html" target="_blank">Blogger Attributes</a> - List of useful blogger theme related articles from BloggerBook - Blakbin.</li> <li><a href="https://bloggerbook.blakbin.com/2018/11/blogger-tag-intro.html" target="_blank">List of Blogger Tags</a> (b Tags) - Details about blogger b-tags like section, widget, includable, include, loop, if, switch etc.</li> </ol> <h2 id="#BloggerThemeIdeas" style="text-align: left;">Notable Blogger Theme Styles and Ideas</h2> <div style="text-align: left;"> <h3 style="text-align: left;">Grouping Posts by Label in Main Page</h3> When you write about a variety of topics, it would make more sense to group posts by label instead of the displaying the posts by date which would be jumbled up.<br /> <br /> Here are some of the themes which does this: </div> <div style="text-align: left;"> <ol style="text-align: left;"> <li><a href="https://newsplus-templatesyard.blogspot.com/" rel="nofollow" target="_blank">NewsPlus by Template Yard </a><br /></li><li><a href="https://smag-soratemplates.blogspot.com/" rel="nofollow" target="_blank">SMAG Sora Template</a></li></ol><h3 style="text-align: left;"> Favorite Blogger Themes</h3></div><div style="text-align: left;"><ol style="text-align: left;"><li><a href="https://techwise-templatesyard.blogspot.com/" rel="nofollow" target="_blank">Techwise - Templates Yard</a></li><li><a href="https://newspro-themexpose.blogspot.com/" rel="nofollow" target="_blank">News Pro - Themexpose</a></li><li><a href="https://seo-boost-themexpose.blogspot.com/" rel="nofollow" target="_blank">Seo Boost - Themexpose </a><br /></li></ol></div><div style="text-align: left;"><ol style="text-align: left;"> </ol> </div> <ol style="text-align: left;"></ol> <h2 style="text-align: left;"> <a href="#UsefulLinks" id="UsefulLinks" name="UsefulLinks">Other Useful Links</a> </h2> <ol style="text-align: left;"> <li><a href="https://www.mybloggertricks.com/2013/12/automatically-open-all-external-links.html" target="_blank">Automatically Making External Links to Open in New Window</a></li> <li><a href="https://www.mybloggertricks.com/2014/01/17-best-search-techniques-in-blogger.html" target="_blank">Custom Label Search Options in Blogger </a></li> </ol> <div> <ol style="text-align: left;"></ol> </div></div>Unknownnoreply@blogger.com0tag:blogger.com,1999:blog-4426390189809984591.post-40444184169646778252021-02-07T17:48:00.011+05:302021-08-09T08:15:18.857+05:30Quick Start Guide to Tortoise SVN Client with File Lock Property<div dir="ltr" style="text-align: left;" trbidi="on"> Short URL:<i><b> go.computerandnet.com/svn</b></i><br /></div><div dir="ltr" style="text-align: left;" trbidi="on"> </div><div dir="ltr" style="text-align: left;" trbidi="on">Question: <i><b>How do I set up SVN with LabVIEW with lock property for files? </b></i><br /></div><div dir="ltr" style="text-align: left;" trbidi="on"> </div><div dir="ltr" style="text-align: left;" trbidi="on">This article contains below sections: <br /><ol style="text-align: left;"><li> <a href="https://wiki.pigenie.com/2019/08/quick-start-guide-to-svn.html#InstallSVN" target="">Download and Install TortoiseSVN</a></li><li> <a href="https://wiki.pigenie.com/2019/08/quick-start-guide-to-svn.html#LockNewFiles">Additional Steps to Configure Lock Mode for Binary Files</a></li><li><a href="https://wiki.pigenie.com/2019/08/quick-start-guide-to-svn.html#LockExistingFiles"> Procedure for Setting Lock Property for Existing Files in SVN</a></li></ol><h2 id="InstallSVN" style="text-align: left;"><b>Download and Install TortoiseSVN</b></h2><a href="https://tortoisesvn.net/downloads.html" target="_blank">Download Tortoise SVN Client</a>. Choose the 32-bit or 64-bit version of TortoiseSVN based on your system's bitness. Follow the onscreen instructions for installing the TortoiseSVN Client.<br /><h2 id="LockNewFiles" style="text-align: left;"><b>Configure Lock Mode for New Binary Files</b></h2>Kindly note that the below steps would be applicable only for new files that are submitted from that particular client system. For any files that are already present, a separate one time procedure needs to be followed, which is explained in the next section.<br /><br />Kindly note that the below steps needs to be done in every client system, where you would be submitting files to SVN.<br /><br />1. Right click on any folder in Windows Explorer and go to TortoiseSVN -> Settings as shown in image below.<br /><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgzIVFvMMg_jFuJ5HbHlL8U5AcDD2y8ICGPJ-u0TeIpzv3jwz3HxOT1gJ53_PBtEe4y7W8QdVxegdlLKMA3X0x9aDRe8aHAVVPAsrrUnFBmr7mA68dOJiINLykp5EuDLQ_5m9iVw_33Lhg/s1600/Tortoise+SVN+Settings+Menu.png"><img alt="TortoiseSVN Settings Option" border="0" data-original-height="324" data-original-width="516" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgzIVFvMMg_jFuJ5HbHlL8U5AcDD2y8ICGPJ-u0TeIpzv3jwz3HxOT1gJ53_PBtEe4y7W8QdVxegdlLKMA3X0x9aDRe8aHAVVPAsrrUnFBmr7mA68dOJiINLykp5EuDLQ_5m9iVw_33Lhg/s1600/Tortoise+SVN+Settings+Menu.png" title="TortoiseSVN Settings Option" /></a></div><br />2. Click on the "Edit" button for the subversion configuration file.<br /><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjKj5xDG6WhAJdlmkTxYtcS3x92Xi4fsKoCUGNhfC4-w-DLl9Ue_U7D3E3SpaMjhUKJbVaPieUoIh2QGElk5qZmvaL2PA9Sa0ZjhyphenhypheniCoXJ6qN06FdBLPdGzmFHpVZn4jS0PIGNk7F5_Hyc/s1600/TortoiseSVN+Edit+Configuration+File.png"><img alt="TortoiseSVN Settings Window" border="0" data-original-height="536" data-original-width="773" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjKj5xDG6WhAJdlmkTxYtcS3x92Xi4fsKoCUGNhfC4-w-DLl9Ue_U7D3E3SpaMjhUKJbVaPieUoIh2QGElk5qZmvaL2PA9Sa0ZjhyphenhypheniCoXJ6qN06FdBLPdGzmFHpVZn4jS0PIGNk7F5_Hyc/s1600/TortoiseSVN+Edit+Configuration+File.png" title="TortoiseSVN Settings Window" /></a></div><br />3. This opens the TortoiseSVN configuration file in Notepad.<br />4. Make the below edits to the configuration file.<br /><ol style="text-align: left;"></ol>Under the section "[miscellany]", add the below text. <span style="color: blue;"><br /><i>[miscellany]<br />enable-auto-props = yes</i></span><br /><br />Under the section "[auto-props]", add the below lines for setting up "Needs Lock" property for *.doc files and *.ppt files.<br /><span style="color: blue;"><i>[auto-props]<br />*.doc = svn:needs-lock=*<br />*.ppt = svn:needs-lock=*</i></span><br /><br />Similarly, for all binary files, please add a line for each. For LabVIEW files, please add below files in [auto-props] section.<br /><i><span style="color: blue;">[auto-props]<br />*.vi = svn:mime-type=application/labview.vi;svn:needs-lock=*<br />*.ctl = svn:mime-type=application/labview.ctl;svn:needs-lock=*<br />*.lvlib = svn:mime-type=application/labview.lvlib;svn:needs-lock=*<br />*.lvproj = svn:mime-type=application/labview.lvproj;svn:needs-lock=*<br />*.lvclass = svn:mime-type=application/labview.lvclass;svn:needs-lock=*<br />*.xctl = svn:mime-type=application/labview.xctl;svn:needs-lock=*</span></i><br /><br />For locking any file type, you can use<br /><i><span style="color: blue;"> * = svn:needs-lock=*</span></i><br /><br /><i><span style="color: red;">Kindly note that placing # infront of any line is equivalent to commenting out the line!</span></i><br /><br /><h2 id="LockExistingFiles" style="text-align: left;"><b>Procedure for Setting Lock Property for Existing Files in SVN</b> </h2>1. Right Click on TortoiseSVN folder, go to TortoiseSVN -> Properties.<br /><br /><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhYucvdyUYh9ttygu3eb7w9A61zdBDUoC4ikqrc-7X8QbgS9Tmb3PqHVu4GoON6I4SwkofCMnRt3aRY01kkeDMo-gJsGmr33dWvgM8lTDlnJXGSBqNYs8LxR8roHqp3VNIHf5eUkI7QeeE/s1600/TortoiseSVN+Properties+Menu+Selection.png" style="margin-left: 1em; margin-right: 1em;"><img alt="TortoiseSVN -> Properties" border="0" data-original-height="159" data-original-width="568" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhYucvdyUYh9ttygu3eb7w9A61zdBDUoC4ikqrc-7X8QbgS9Tmb3PqHVu4GoON6I4SwkofCMnRt3aRY01kkeDMo-gJsGmr33dWvgM8lTDlnJXGSBqNYs8LxR8roHqp3VNIHf5eUkI7QeeE/s1600/TortoiseSVN+Properties+Menu+Selection.png" title="TortoiseSVN -> Properties" /></a></div>2. In the window that opens, Go to New -> Needs Lock.<br /><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEi1HJDWhMHOokoCw_J9QvI8tPfG8SpFoHzzd5zq_VqB92jmSFV536fxnwAE0rigMFYxi2WoSCIoyUjflYvhDwVg1lrmFcMxfPhNGuJs63MMk9GtecuFx643yNGc4WnKCQ0vcRoUr7L9GRo/s1600/SVN+-+New+-+Needs+Lock+Property.png" style="margin-left: 1em; margin-right: 1em;"><img alt="SVN - New -> Needs Lock" border="0" data-original-height="291" data-original-width="498" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEi1HJDWhMHOokoCw_J9QvI8tPfG8SpFoHzzd5zq_VqB92jmSFV536fxnwAE0rigMFYxi2WoSCIoyUjflYvhDwVg1lrmFcMxfPhNGuJs63MMk9GtecuFx643yNGc4WnKCQ0vcRoUr7L9GRo/s1600/SVN+-+New+-+Needs+Lock+Property.png" title="SVN - New -> Needs Lock" /></a></div><br />3. Select "Locking Required" and click "Ok".<br /><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjTnkwBsBaVOol3ROnjEOy15K206xf0-BUUMpKNoY9XPqM0UeSPN1XVCZKX3c9qrOwTeaJlyZYU0yiHcttXspV_U6qENEW0YgtgEuApO3gd4ZnjhcdYM-1SKKlTIS91AT3rCrPyEYdwA18/s1600/SVN+-+Locking+Required.png" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="99" data-original-width="534" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjTnkwBsBaVOol3ROnjEOy15K206xf0-BUUMpKNoY9XPqM0UeSPN1XVCZKX3c9qrOwTeaJlyZYU0yiHcttXspV_U6qENEW0YgtgEuApO3gd4ZnjhcdYM-1SKKlTIS91AT3rCrPyEYdwA18/s1600/SVN+-+Locking+Required.png" /></a></div><br />4. Commit the files/folders to SVN by right clicking on the SVN folder and choosing "SVN Commit". <br /><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgiuy-0PAsXmImPRQyCCqTabQyfP8Zx6sNf-KpU1v3cP08xSU2H5S5GM4PXegWPhayhRUSV78D9I04YoW-uzuHg0Imdt0rRkadyrYgq-cjumN_3PKjLNbT_6KRnvkUl646hy5D6YusSR6k/s1600/SVN+Commit.png" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="105" data-original-width="293" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgiuy-0PAsXmImPRQyCCqTabQyfP8Zx6sNf-KpU1v3cP08xSU2H5S5GM4PXegWPhayhRUSV78D9I04YoW-uzuHg0Imdt0rRkadyrYgq-cjumN_3PKjLNbT_6KRnvkUl646hy5D6YusSR6k/s1600/SVN+Commit.png" /></a></div>This would have modified all the files/folders and you need to submit them to SVN for the locking to take effect.</div>Unknownnoreply@blogger.com0