Virtual Environment for Python Workspace – Part 3/3 – venv

In the earlier two posts of this series, I discussed about virtualenv  and conda  and their usage along with some examples. I this post I am going to introduce you guys with another package and environment manager called venv  which comes with standard Python3.X by default. So, nothing to worry about its installation.

Virtual Environment for Python Workspace – Part 1/3 – virtualenv
Virtual Environment for Python Workspace – Part 2/3 – conda

Creating an Environment
For example, If you have Python3.X installed in your system and you can run it’s REPL by issuing python3 in the terminal, then you can create a virtual environment based on this Python version by issuing the following command:

This will create the myvenv  directory if it doesn’t exist, and also create directories inside it containing a copy of the Python interpreter, the standard library, and various supporting files. By the way, you got the idea of using different versions of Python to use its venv  module for creating different environments, right? Just find out an exact Python 3.X (I showed how, in earlier posts) and use its binary/executable in the command <active python> -m venv <environment name> .

Activating the Environment
Its similar to the previous two workarounds and again simple as below. I assumed you are inside the newly created myvenv  directory.

Managing Packages with pip
As venv  is native with Python, you can use pip  for installing packages in your virtual environment which will pull down packages from Python’s official package repository, PyPI. For example, to install our very favorite package numpy , use the following command,

Also, for sure you can use commands like pip search <packagename> , pip list in each newly created virtual environment.

Did you know, you can use pip show <packagename>  to see detail of an installed package in an active environment?

Sharing Environment
In the earlier post, I have discussed why and how you can share your environment made using  conda  with others. If you are using venv  or virtualenv  then you can export an environment’s state/configuration to a file, issuing the following command,

Here, the file name requirements.txt , that contains environment’s package information could be anything. But people have been using this name conventionally for a long time.

So, after exporting the environment information, you can share this file to any one who can install exact same packages in his newly created virtual environment by using the following command:

By the way, sharing environment in this way is similar if you use virtualenv

Resources
https://docs.python.org/3/tutorial/venv.html

Do you love Watching than Reading? Subscribe & Get Connected with my YouTube channel for Video version of all my Blog posts.

Virtual Environment for Python Workspace – Part 1/3 – virtualenv

If you are planning to work or have been working in Python stack for web development, machine learning, data analysis etc. then you must have already come through the term “virtual environment”. In this article I will try to explain what it is, why its needed and how to acheive this workaround in three different ways. I will give you a basic overview of creating and managing Python virtual environment with virtualenv , venv  and conda  (with miniconda). So, lets start.

What is Python virtual environment and why it’s needed?
Suppose, you have only one computer for development or even a single VPS for deployment. Obviously you will not develop a single application in your whole life, right? As a software developer you will have to develop bunch of tools, modules, softwares, scripts in your entire lifecycle. Let’s not go that much deeper for now 😛

Assume that, you are developing an application which needs version 1.0 of a certain library/package and so far its working nice based on its dependency(s). Here by dependency, I mean that specific library/package. What if, you start developing another app or got responsibility to contribute in an ongoing application and fortunately you found that, this app also uses that exact same library/package you already have installed in your system; and unfortunately you also found that it works only for a different version of that so called library? So, its quite normal that, an application can depend on different packages of different versions and there is nothing wrong with this situation. Even, different app can depend of different versions of Python (interpreter), seems fair, right?

Here comes the necessity of app specific dependency management. This dependency is not only on library or packages but also could on Python versions. Another important issue arises while developing in Python stack is, the chance of messing up your system’s native Python installation. Every *Nix like operating system comes with Python pre-installed. You already know that 🙂 Even, recent distributions are coming with two or more versions of Python pre-installed (You can access those different REPL by issuing commands like python  or python3  in the terminal).

But why so? Because, it could be happened that, some OS specific tools or programs use Python 2.X for their own needs. On the other hand users can expect to have an updated version of Python in that system for their custom development. Now, if you install all your required libraries and packages in global package (in site-packages  directory if specifically said) scope, then very soon it will be a mess up. What you could do is to install needed packages to the location where Python 3.X resides. Still that above mentioned situation could be raised where you may need different versions of libraries for different developing apps.

So, need for having isolated Python environments is so casual. If we can make different Python environments; based on different versions of Python and install very specific libraries and packages in it, then everything will be more organized and loosely coupled with the native system. virtualenv  is such a package that helps you to make unlimited number of virtual environments and configure them according to your various needs. It creates an environment that has its own installation directories, that doesn’t even share libraries with other virtualenv  environments (and optionally doesn’t access the globally installed libraries either).

Installing virtualenv
To install globally with pip (if you have pip 1.3 or greater installed globally), issue the following command in your terminal:

Creating New Virtual Environment(s)
To create a virtual enviornment named myenvironment  for example, issue the following command in the terminal:

As soon as the above environment is created, several directories and files are also created inside the myenvironment  folder. You will see directory like myenvironment/bin where the python interpreter or executeable for this specific environment is placed. Directories like myenvironment/lib & myenvironment/include  contains supporting libraries for this python environment. Thus, for obvious reason – packages that will be installed in this new environment will live under myenvironment/lib/pythonX.X/site-packages/ directory. Its worth mentioning that, with each new virtual environment creation, it automatically installs the pip , wheel  & setuptools  package.

Activating a Virtual Environment
If you are inside the environment directory which means inside the myenvironment  folder as per this example, then issuing the following command will activate the virtual environment:

The activate script will also modify your shell prompt to indicate which environment is currently active. If you see the following terminal activity then you will understand what I am talking about.

In the above logs, first I created the virtual environment. Then while creating the environment, pip , wheel , & setuptools  are also being installed in the new environment. After that, I issued command to activate the environment and it prepended the environment name infront of the command prompt which indicates that the shell has been updated to use the new python environment from now on.

As this environment is now active, why not check what packages are installed and ready to use in this brand new fresh python environment? For that, issue the following command:

Which will output something like below,

Which clearly shows that we have only three packages installed in this new environment. By the way, would you like to check which pip  it is? I mean is this pip  belong to this environment or its something else? Check that by:

and you will see something like following,

that clearly shows that, its belong to the newly created virtual environment. Even you can check whats the responsible Python here in this environment by the following command:

and you will see output similar to below,

which indicates that the python in this context is also belongs to the virtual environment. You are already feeling isolation, right? 🙂 So, lets install few packages here inside the virtual environment using it’s pip.

Again, lets check package list of this new environment:

Impressed? We are installing only our needed packages in this new virtual environment without messing around the native python environment or global package scope.

Using the Environment
Just after activating the environment, its ready to use. For example, lets create a Python script like following:

Keep in mind that, you are not bound to create Python scripts/apps inside the environment. You are free to create those files anywhere in your system. You just make use of a virtual environment by activating it and run any Python scripts/apps through it’s python executable. Check the following terminal activity:

Here I have moved to Desktop, created a file called test.py  and put the above code in it. Finally run it with python interpreter and got expected output. Keep in mind, my virtual environment is still in active mode.

Deactivating the Environment
It’s as easy as issuing the following command:

Did you notice, how the prepended environment just gone? It means you are now back not the normal shell.

Creating Environment based on Different Python Versions
So far have you ever think when we are creating a virtual environment, we are not downloading Python from anywhere? Still we are getting python executable inside the virtual environment. How does it happen? Well, it’s actually making a symbolic link of the Python  to which this  virtualenv  package belongs to. Lets check this out – enter into the virtual environment folder and look into all the files including hidden ones by issuing the command:

I hope, you can see a link to my system’s default Python which is located in /System/Library/Frameworks/Python.framework/Versions/2.7/Python . But, just like you, I don’t also want to use that old Python for my fresh new virtual environment, rather I want to use Python 3 with some fresh packages that I need for a project.

Fortunately its possible. Say, you have downloaded Python 3.X from the official website and installed it in your computer. Its also possible that, you downloaed anaconda or miniconda and that also installed another version of Python in your computer. But so far, you have come to know that, you just need the Python executable and you are free to make isolated environments. But, may be you don’t know where all the different Python versions actually reside. Let’s find those.

Yeah, I found some 2.X versions of Python. Lets try to find more:

Lets say, we want to make a new virtual environment based on Python 3.6 & from the above search, we know that our system has that installed already (or may be I once installed and forgot). So, issuing the following command will make a brand new Python virtual environment that will be based on Python 3.6:

Now, activate the new environment and check it’s Python’s version and identity,

Here, we can clearly see that, this environment’s Python is actually a Python3.6 that we wanted it to be. Sure, we can also check whether this is an isolated Python or not. Also, we can check which is the base of this Python interpreter.

and lastly, as its a new virtual environment and totally separated from the earlier one named myenvironment , is should show us nothing but some default package installed in a fresh mode ( I mean it should not contain the numpy  package that we installed on myenvironment  environment).

Managing an Environment
As we made a new virtual environment with our desired Python 3.6 and started again with a fresh ecosystem, let’s delete the old virtual environment. Oh yes, its as simple as deleting a directory:

As, I mentioned before, you are not supposed to put your actual app files inside the environment’s folder. Environment is just an environment definition, it should not contain your actual files and scripts. So, by deleting that unnecessary environment folder, you can get rid off that messed up Python environment. Is not it easy to throw away a messed up virtual environment that throwing away a full OS?

In the next two posts, I will discuss about conda  & venv  for similar purpose 🙂

Resources
https://virtualenv.pypa.io/en/stable/

Do you love Watching than Reading? Subscribe & Get Connected with my YouTube channel for Video version of all my Blog posts.

ম্যাক এর জন্য ডেভেলপার বা প্রো-ইউজারদের প্রয়োজনীয় ৩০টি অ্যাপ সাজেশন

  1. Xcode যারা iOS, watchOS বা macOS এর জন্য অ্যাপ্লিকেশন ডেভেলপ করতে চান তাদের জন্য একান্ত প্রয়োজনীয় একটি IDE যার সাথে বিল্ট ইন আছে ইমুলেটর গুলোও। ম্যাক ইউজাররা ফ্রি তেই ডাউনলোড করতে পারবেন।
  2. chrome বর্তমান ওয়েব দুনিয়ায়, সব ব্রাউজারের ব্যবহার জরিপ অনুযায়ী শতকরা ৭০ ভাগেরও বেশি ব্যবহৃত হয় গুগলের তৈরি এই ব্রাউজারটি। বিশাল এক্সটেনশন এবং অ্যাপ মার্কেটপ্লেস এই ব্রাউজারকে করেছে আরও সমৃদ্ধ। এই ব্রাউজারে যেমন ক্লায়েন্ট সাইড ডিবাগিং, ইন্সপেকশন টুল বিল্ট আছে তেমনি এর জন্য এক্সটেনশন বা প্লাগিন তৈরি করাও বেশ সহজ। সবার জন্য ফ্রি।
  3. PhpStorm জেট ব্রেইন্স এর তৈরি সবচেয়ে পপুলার একটি IDE যার মাধ্যমে PHP -তে ওয়েব অ্যাপ ডেভেলপমেন্ট হতে পারে খুবি প্রোডাক্টিভ। স্টুডেন্টদের জন্য ফ্রি। এছাড়াও স্টার্ট আপ, ট্রেনিং সেন্টার বা ওপেন সোর্স প্রোডাক্ট ডেভেলপারদের জন্যও ফ্রি/ছাড়।
  4. PyCharm জেট ব্রেইন্স এর তৈরি আরেকটি বহুল পরিচিত পাইথন IDE যার একটি কমিউনিটি এডিশন আছে যেটি সবসময় বিনামূল্যে পাওয়া যায়। পাইথন অ্যাপ ডেভেলপার বা পাইথন স্ট্যাকে কাজ করেন এমন ইউজারদের জন্য খুবি প্রোডাক্টিভ একটি টুল। যারা Anaconda এর মত রেডি মেড প্ল্যাটফর্ম এর জন্য বাধ্য না, সেরকম ডাটা সায়েন্স ইঞ্জিনিয়াররাও এটায় কাজ করতে পারেন স্বাচ্ছন্দ্যে. এর প্রফেশনাল এডিশনটি স্টুডেন্টদের জন্য ফ্রি। এছাড়াও স্টার্ট আপ, ট্রেনিং সেন্টার বা ওপেন সোর্স প্রোডাক্ট ডেভেলপারদের জন্যও ফ্রি/ছাড়।
  5. Webstorm যাদের জাভাস্ক্রিপ্ট স্ট্যাক খুব পছন্দ এবং ক্লায়েন্ট সাইড অ্যাপ ডেভেলপমেন্টে ফোকাসড তাঁরা ব্যবহার করতে পারেন এই IDE টি. এমনকি MEAN স্ট্যাকে ডেভেলপমেন্ট করতে চাইলেও এই IDE হতে পারে প্রথম পছন্দ। স্টুডেন্টদের জন্য ফ্রি।
  6. IntelliJ IDEA জাভা ডেভেলপারদের জন্য অত্যন্ত চমৎকার ফিচার সমৃদ্ধ একটি IDE. স্কালা, গ্রুভি, কটলিন ল্যাঙ্গুয়েজের সাপোর্ট থেকে শুরু করে গিট সাপোর্ট এবং স্প্রিং এর মত ফ্রেমওয়ার্ক সাপোর্ট সবই আছে এতে। Android অ্যাপ ডেভেলপমেন্ট থেকে শুরু করে ওয়েব অ্যাপ ডেভেলপমেন্ট, সবই সম্ভব এই প্রোডাক্টিভ টুলটি ব্যবহারের মাধ্যমে। স্টুডেন্টদের জন্য ফ্রি।
  7. Android Studio অ্যান্ড্রয়েড অ্যাপ ডেভেলপমেন্ট এর জন্য একমাত্র অফিসিয়াল IDE. কোড এডিটিং, ডিবাগিং থেকে শুরু করে পারফরমেন্স টেস্টিং, ডিপ্লয়েমেন্ট, ইনস্ট্যান্ট বিল্ড ও অনেক অনেক ফিচার সমৃদ্ধ IDE টি অ্যান্ড্রয়েড অ্যাপ ডেভেলপারদের প্রথম পছন্দ। ফ্রি।
  8. Visual Studio Code মাইক্রোসফট এর তৈরি ফ্রি, ওপেন সোর্স এবং সুন্দর ইন্টারফেইস সমৃদ্ধ এই মাল্টি প্ল্যাটফর্ম কোড এডিটরটি লাইট ওয়েট এবং সাথে গিট ও ডিবাগিং ফিচার বিল্ট ইন। আরও আছে কমিউনিটির ডেভেলপ করা মারাত্মক সব এক্সটেনশন। ফ্রি.
  9. Docker এটি বর্তমানের সব চেয়ে পপুলার সফটওয়্যার কন্টেইনার প্ল্যাটফর্ম। মাল্টি প্ল্যাটফর্মে ডেভেলপমেন্ট, ফুল ডেভেলপমেন্ট এনভায়রনমেন্ট পোর্ট, অতঃপর দ্রুত ডেপ্লয়মেন্ট এবং সহজ স্কেল্যাব্লিটির জন্য সবাই এখন ব্যবহার করছে এই টুলটিকে। কমিউনিটি এডিশন ফ্রি।
  10. VirtualBox ম্যাকের মধ্যেই Windows বা Ubuntu বা অন্য কোন OS ইন্সটল দিতে চাইলে ভার্চুয়াল বক্স হতে পারে সলিড একটি সমাধান। এছাড়া ম্যাকে Vagrant ব্যবহার করতে হলেও এটি আগে ইন্সটল থাকতে হবে। ফ্রি তেই পাওয়া যাবে এই সফটওয়্যারটি।
  11. Vagrant ভার্চুয়াল বক্স ইউজ করে অন্য OS ইন্সটল দেয়ার পরেও কিছু সীমাবদ্ধতা থেকে যায় যেগুলো দূর করতে পারে এই কমান্ড লাইন অ্যাপটি। এটি ব্যবহার করে খুব দ্রুত যেকোনো হেড লেস OS ইন্সটল দেয়া এবং সাথে সাথে IP, Memory, Sync Folder, SSH ইত্যাদি কনফিগার করা যায় সহজেই। ফ্রি.
  12. Sequel Pro গ্র্যাফিক্যালি MySQL ডাটাবেজ ম্যানেজমেন্টের জন্য ম্যাকের উপযোগী খুব সুন্দর একটি অ্যাপ। ম্যাকের জন্য ফ্রিতেই পাওয়া যায়।
  13. Robomongo ক্রস প্ল্যাটফর্ম এবং ন্যাটিভ একটি গ্রাফিক্যাল টুল যা দিয়ে সহজেই MongoDB ম্যানেজ করতে পারেন।
  14. iTerm2 ম্যাকের বিল্ট ইন টার্মিনাল অ্যাপ এর চেয়ে অনেক বেশি কনফিগারেবল এবং অনেক অনেক ফিচার সমৃদ্ধ একটি টার্মিনাল ক্লায়েন্ট। ওপেন সোর্স এবং সম্পূর্ণ ফ্রি।
  15. Postman বর্তমানে সফটওয়্যার ডেভেলপমেন্ট এবং API ডেভেলপেমণ্ট প্রায় ওতপ্রোতভাবে জড়িত। আর পোষ্টম্যান হচ্ছে সেখানে অবশ্য প্রয়োজনীয় একটি অ্যাপ যার মাধ্যমে আপনার ডেভেলপ করা API এন্ডপয়েন্ট গুলোকে টেস্ট করতে পারবেন সহজেই।
  16. Homebrew এক কথায় একে বলা হয় The missing package manager for macOS. অর্থাৎ, যারা উবুন্টু বা এরকম ইউনিক্স সিস্টেমের বিল্ট ইন প্যাকেজ ম্যানেজার গুলোকে পছন্দ করেন এবং ম্যাকে এরকম একটি টুলকে মিস করেন তাদের জন্য লাইফ সেভার একটি টুল এটি। মজার বিষয় হচ্ছে, এটি কোন টুল ইন্সটল করার সময় এর নিজের একটি আলাদা লোকেশন ইন্সটল করে এবং সেটির একটি সিম্বোলিক লিঙ্ক ম্যাকের /usr/local ডিরেক্টরিতে তৈরি করে. আর তাই আপনার সিস্টেম ক্লিন থাকে।
  17. Github Desktop যদি আপনি একজন ওপেন সোর্স কন্ট্রিবিউটর হয়ে থাকেন এবং বিভিন্ন github রিপজিটরিতে খুব দ্রুত একটি গ্রাফিক্যাল টুল ইউজ করে কোলাবরেট করতে চান তাহলে এটি আপনার জন্য। এটি ফ্রি। Tower হচ্ছে এরকমই আরেকটি অ্যাপ যা আপনার সব গিট রিপজিটরির জন্য কিন্তু এটি পেইড অ্যাপ।
  18. FileZilla নানা কারণেই আপনার একটি FTP ক্লায়েন্ট দরকার হতে পারে যে ক্ষেত্রে এই ফ্রি, ওপেন সোর্স এবং ক্রস প্ল্যাটফর্ম অ্যাপটি হতে পারে প্রথম পছন্দের। FTP, SFPT সাপোর্ট রয়েছে এতে।
  19. Caffeine ছোট একটি টুলবার অ্যাপ যার মাধ্যমে নির্দিষ্ট সময়ের জন্য আপনার ম্যাককে স্লিপ মুডে যাওয়া থেকে বিরত রাখতে পারেন. ফ্রি।
  20. Spectacle ম্যাক ইউজারদের কাছে অনেক সময় বিরক্তির কারণ হয়ে দাড়ায় বিভিন্ন অ্যাপ উইন্ডোর সাইজকে ঠিক ঠাক করা। এই টুলবার অ্যাপ এবং এর কিবোর্ড শর্ট কাট এর মাধ্যমে খুব সহজেই কোন রানিং অ্যাপকে ফুল সাইজ করা, অর্ধেক ডানে বা অর্ধেক বামে করা ইত্যাদি নানা রকম প্লেসমেন্ট করা যায়। ফ্রি।
  21. Skype নতুন করে বলার কিছু নাই স্কাইপি নিয়ে। মার্কেটে অনেক সময় অনেক রকম কমিউনিকেশন টুল আসলেও এর অবস্থান অনড়। এখনও অনেক ইউজাররা মিটিং, স্ক্রিন শেয়ারিং, গ্রুপ কনভারসেশন এমনকি কলিং এর জন্য এর উপরেই ভরশা করে থাকেন. ফ্রি.
  22. Slack এটি আধুনিক একটি যোগাযোগের মাধ্যম যা চ্যাটিং ইন্টাফেইসকে ঘিরেই তৈরি। এটি বিশেষ করে ব্যবহৃত হয় অফিস বা টিমের মধ্যে। বিভিন্ন গ্রুপ বা চ্যানেল তৈরির মাধ্যমে মেম্বাররা নিজেদের মধ্যে চ্যাট, মেনশন, ফাইল শেয়ারিং ইত্যাদি করতে পারেন। এর জন্য বিভিন্ন বট তৈরি করেও একে আরও বেশি প্রয়োজনীয় এবং উপযোগী করে নিতে পারেন যে কেউ। ফ্রি.
  23. Dropbox ক্লাউড স্টোরেজের জন্য অত্যন্ত নির্ভরযোগ্য একটি প্ল্যাটফর্ম। এর ম্যাক অ্যাপটি টুলবারে থেকে খুব সহজেই আপনার প্রয়োজনীয় ফাইলকে ক্লাউডে সিঙ্ক করে নেয়। ম্যাক যেকোনো ফাইল তৈরি করার পর শুধু সেভ করার লোকেশনটি দেখিয়ে দিবেন Dropbox এর সিঙ্ক করা যেকোনো একটি ফোল্ডারে। সাথে সাথে এটি ক্লাউডে আপলোড হয়ে যাবে। অন্য ইউজারদের সাথে ফাইল শেয়ার করতেও ব্যবহার করা যায় এদের সার্ভিসকে। নির্দিষ্ট জায়গা পর্যন্ত ফ্রি।
  24. Office 365 যে যাই বলুক, মাইক্রোসফট এর তৈরি এই অফিস স্যুটটির ভাল কোন বিকল্প এখনও নেই। এর মধ্যে থাকে MS Word, MS Excel, MS Power Point এবং আরও কয়েকটি অত্যন্ত দরকারি অ্যাপ যা একাধারে ছাত্র, শিক্ষক, লেখক, হিসাবরক্ষক, চাকুরীজীবী সবার কাছেই গুরুত্বপূর্ণ। ছাত্রদের জন্য ফ্রি।
  25. Sketch অ্যাপ, ওয়েব পেইজ বা লে-আউট ডিজাইনাদের জন্য Photoshop এর বিকল্প এবং ম্যাকের জন্য বহুল ব্যবহৃত একটি অ্যাপ। যাদের Photoshop এর সব ফিচার দরকার নাই বা শুধুমাত্র অ্যাপ ডিজাইন নিয়েই ফোকাস করতে চান তাদের জন্য। এটি একটি পেইড অ্যাপ।
  26. VLC Media Player সবার অত্যন্ত পরিচিত একটি মিডিয়া প্লেয়ার। এটি ফ্রি এবং ওপেন সোর্স।
  27. uTorrent ম্যাকের জন্য একটি টরেন্ট ক্লায়েন্ট দরকার হলে এটি হতে পারে পছন্দের। যদিও অনেকে এই পারপাজে Transmission ব্যবহার করে থাকেন।
  28. Dash লিস্টের শেষের দিকে লিখছি মানেই যে এটি কম গুরুত্বপূর্ণ একটি অ্যাপ, বিষয়টি তা নয়। বরং, এটি লিস্টের শুরুতেও থাকতে পারতো। আপনার মাথায় যতরকম প্রোগ্রামিং ল্যাঙ্গুয়েজ, ফ্রেমওয়ার্ক বা ডেভেলপমেন্ট টুল এর নাম থাকতে পারে- প্রায় সবগুলোর ডকুমেন্টেশন অফলাইনেই ব্রাউজ করতে চাইলে এই অ্যাপের কোন বিকল্প নাই। এছাড়াও এতে আছে সুন্দর একটি snippet ম্যানেজার। ব্যাসিক ভার্সন ফ্রি.
  29. Dr. Cleaner ম্যাকের জন্য প্রয়োজনীয় একটি ইউটিলিটি অ্যাপ। এর মাধ্যমে একাধারে ডিস্ক ক্লিন আপ, মেমরি ক্লিনআপ এবং সিস্টেম অপটিমাইজেশনের মত কাজ গুলো সহজেই করা যায়। এর মাধ্যমে- সাইজ মোতাবেক পুরো ম্যাকের সব ফাইলকে লিস্ট করা যায় যাতে করে কোন ফাইল বা অ্যাপ কেমন জায়গা নিচ্ছে তার একটা আইডিয়া পাওয়া যায় এবং প্রয়োজনে সেটা ডিলিট বা রিমুভ করা যায়.
  30. AppCleaner ম্যাক থেকে যেকোনো রকম অ্যাপ, উইজেট বা প্লাগিন পুরোপুরি আনইন্সটল করতে চাইলে এই ছোট্ট অ্যাপটি আপনাকে সলিড কাজ করে দেখাবে।
বিঃ দ্রঃ এই লিস্টের বাইরেও আরও অনেক প্রয়োজনীয় এবং গুরুত্বপূর্ণ অ্যাপ/টুল আছে যেগুলো নির্দিষ্ট কাজের জন্য নির্দিষ্ট ইউজারের কাছে দরকারি।

macOS -এ আপনি কি কি অ্যাপ ব্যবহার করে থাকেন এবং কোন সাজেশন থাকলে কমেন্ট করুন নিচে

Laravel4 Migrations and Seeding

So far we have created the virtual host for our laravel4 application named “thisdayinbangladesh.dev” and also set up the basic laravel4 installation. Now in this lesson we will create the migrations and seeders needed for our application.

“Migrations are a type of version control for your database. They allow a team to modify the database schema and stay up to date on the current schema state. Migrations are typically paired with the Schema Builder to easily manage your application’s scheme.”

“Laravel also includes a simple way to seed your database with test data using seed classes.”

First thing first. Open up the Mac Terminal and enter inside the “thisdayinbangladesh” folder under MAMP’s “htdocs” directory. All of the following commands should be executed from inside the project folder.

Create migration files for all of our currently needed tables:
Execute these commands one by one,

These commands set up the basic migration scripts that we’ll be using to create the database tables

Update the migration files:
Edit “database/migrations/TODAYS_FULL_DATE_create_days_table.php” file and update the “up()” method to include a new column on the “days” table and to remove the “timestamp” column.

Update the “up()” method of “database/migrations/TODAYS_FULL_DATE_create_facts_table.php” file to the following,

Update the “up()” method of “database/migrations/TODAYS_FULL_DATE_create_types_table.php” file to the following,

Update the “up()” method of “database/migrations/TODAYS_FULL_DATE_create_fact_type_table.php” file to the following,

Prepare the Seeder files to add sample data to those tables:
Create a file within the “app/database/seeds” folder that has the same name as the table. So, for our “days” table create a file named “DayTableSeeder.php” inside “seeds” folder containing the following full code,

Here I am inserting some “day-month” patterned days rows in the “days” table using a simple loop. Please, don’t judge my PHP knowledge on this. This is not about showing optimized, minimal, smell free coding.
Also, create other seeder files for those remaining tables into which we want to push some sample data even before launching the app.
Create “FactTableSeeder.php” with following code. Here we are inserting some sample facts that holds the fact’s sample title and sample description just for checking out data retrieval with proper relations later on the next lesson.

Now create the “TypeTableSeeder.php” file with the following code,

And finally create the “FactTypeTableSeeder.php” file with,

As you can see, we are assigning some “facts” to some “types” and making rows in the “fact_type” table pairing “fact_id” with “type_id” as for our sample data.

Update the DatabaseSeeder file:
Update the “run()” method of the “DatabaseSeeder.php” file. That should already be there inside “app/database/seeds” folder with the following code,

Run Migration and Seed:
Execute the following commands one by one.

If the commands executed successfully then you should see those tables along with an extra tables named “migrations” under your “thisdayinbangladesh” database. Also there should be our sample data in each table if the Seeding happens successfully!

Note:
As one “fact” will have multiple “types” and vise versa. You should name the Pivot table (“fact_type” in this case) of the “facts” and “types” table by taking the singular name of the alphabetically first table then the second table with an underscore in the middle.
Also there should be two columns at least, to hold the relation which should be named by taking the singular name of one table with its primary key along with an underscore in the middle. Such as “fact_id”, “type_id”.
But wait, don’t be scared. There is still flexibility while naming those tables and columns for using with Eloquent ORM. You will have to just pass those non-conventional table names or column names as parameters in corresponding methods while creating ORM relations among tables or while creating migrations tables.
We just followed the conventional naming pattern in this lesson to make thing simple and understandable.

What next?:
The next step is to make proper Routing for our application. Which is ready now!

Simple URL sharing technique for social sites

Well, this is a very simple technique if you want to put a share button/text for a specific URL to be shared on social sites like facebook, twitter, google+

If you want to share the site thisdayinbangladesh.com to any of the above mentioned social site then just click on the following texts. The technique behind it, is simply passing the URL and/or text with specific pattern as parameter(s) to the share processor URL of one of those social sites.

Example:
Share this site in facebook
Tweet this site in twitter
Publicize this site in Google+

Code behind these examples:

Setup Auto Deployment with Git & Shell Script

Few days ago I found a nice post on the web about a trick for auto deploying sources/files to server from inside local development repository using shell script. I mean, you don’t need to log in into the server each time the code status is changed and pull the changes from a repository to make the server’s files updated. You can do all of these from inside the local repository by assigning several remotes to it & by using the Hook feature of git on the server end. I have just tried that out and made a screencast with some detail descriptions.

Following is a diagram of what I am going to show you detail on the video below it. Hope it might be helpful for some one who wants to watch a demo even before trying out few commands 🙂

Untitled drawing

Live Demo [watch in 720p at least]

Setup a custom domain for your appfog application

www
On a previous post we saw how to deploy a PHP application in appfog using appfog CLI. appfog gives you a domain for your newly created aaplication which is not so beautiful at all. Such as (http://YOUR-APP-NAME.aws.af.cm/) or something like that according to your choosen region/infrastructure while creating the app.

Today we will point a godaddy domain to a appfog application. For this you will have to first go to your app under your appfog account. Then select the Domain Names from left navigation. Here you can see the domain name already assigned to your application and few more blank fields for domain names to be added.

Also you can see the DNS instructions for custom domains” below that form. Here it will show what “A” record and CNAME record you should add on your own domain control panel.

Screen Shot 2013-02-14 at 7.24.46 PM

I have added www.nuhil.net as the second domain name. Then I added a “A” record and a “CNAME” record under my godaddy domain management panel using the DNS manager.

godaddyIf you wait few hours after changing the records in your domain end, then this will point the full domain for example http://www.nuhil.net to the appfog application but if you type the naked one like, http://nuhil.net then it will show a 404 not found appfog message. For the solution I did a forwarding under my godaddy account using the “forwarding domain tool” to forward the naked domain to full domain.

Screen Shot 2013-02-14 at 7.39.38 PM

This forwarding may cause a change on your “A” record you just created manually according to appfog’s suggestion. But no need to worry. The “CNAME” can take care of all the rest.

Deploy Application in Amazon Beanstalk inside free EC2 Instance with RDS

aws-beanstalk
Amazon has virtual cloud server (instance) and many other web services. They offers a 1 year free micro tier to be used by anyone who own an international currency Debit/Credit card like Payoneer debit master card. There are several services included with the free tier that can be used along with the EC2 instance without any extra charge. Beanstalk deployment framework is one of the free services you are eligible for.

For no additional charge, AWS Elastic Beanstalk allows you quickly and easily deploy your Java, PHP, Python, Ruby, and .NET applications using many of the services offered in the free usage tier.” -Amazon. Beanstalk is similar to other deployment frameworks like appfog, pagodabox etc. Moreover if you use Beanstalk then you will still have access to your virtual cloud server in which the deployment will be running. “Behind the scenes, Elastic Beanstalk handles the provisioning of a load balancer and Amazon EC2 resources.” -Amazon. Thats why I prefere Beanstalk than others who are in my knowledge.

In this post we will cover the steps of creating an account for Amazon EC2 free tier, configuring local machine for Amazon CLI tools, creating a sample app locally, creating an elastic beanstalk php environment, deploying a sample php app, creating an Amazon RDS and connecting to it via PHP and mySQL workbench, git version controlling of the deployed app, setting up a custom classified domain to our newly deployed app environment. Tired to read these ? I am sure you will feel best after having this journey 🙂

1. Create an account for Amazon web service from here . You can see the service list that will be included with your free tier for your further using. Note that, the sign up process is simple and you will be asked to provide your card detail on the second step and finally you will have to verify your phone number. You will have to put your phone number then to click “call now” button then a 4 digit pin number will be appeared on your browser. After that an automated call will reach your phone. You should either speak the pin number slowly or input the pin number in your mobile keypad if it supports touchtone functionality. I always spoke the pin after listening the bot girl’s voice 🙂 Continue reading Deploy Application in Amazon Beanstalk inside free EC2 Instance with RDS

Deploy apps on pagodabox with git version controlling

In the very last two posts we saw how to deploy apps in appfog. Today we will see how to deploy such apps in pagodabox. pagodabox is another deployment platform/framework like appfog. I found something good feature here such as you can have a free SSL certificate for your instance under the free scheme and you can see all your git commits under you app’s dashboard and simply deploy any version from your commit history just by clicking a button. Their punch line is “An Object Oriented Hosting Framework”

To start deploying your app on the cloud, just sign up in pagodabox obviously without any requirement of valid payment method as like appfog 🙂

Step A: You need to install the pagodabox command line tool just like you did for appfog according to the last post. For this, type the following command on Mac terminal:

Ruby and RubyGems come pre-installed on Mac OSX. As long as you are running v10.6 or later. For windows or any other issue you can check here. Also you should add an SSH key of your local machine to your pagodabox account. Just follow this simple process. Continue reading Deploy apps on pagodabox with git version controlling

How to host/deploy a PHP app from local machine to appfog

On the previous post we deployed a wordpress site along with a mySQL service by appfog’s built-in installation process in a very fast way. In this post we will describe the process of deploying again a wordpress site but from our local machine like as our own custom PHP app.

Step A: Sign up in appfog and it will show no app under your account. Just leave the browser. Nothing to to do there now. We will use appfog command line tool to both create and upload the files to appfog.
For that, enter the following command in your Mac OSX terminal

After successful installation of “af” you can write the following command and provide your appfog account detail to login to the service.

Note: “af” requires Ruby 1.8.7 or newer. You should Ruby installed already in your Mac 10.6+ . If any problem occurs or you are using Windows then follow this link to resolve. Continue reading How to host/deploy a PHP app from local machine to appfog