2015年2月1日 星期日
2015年1月23日 星期五
Dual/Multiple OS Installation
We often need to install multiple OS in one system, for example
- Windows 8 & Ubuntu 12
- Ubuntu 12 & Ubuntu 14
- Windows 8 & Ubuntu 12 & Ubuntu 14...
- Navigate to the BIOS, set the USB Ubuntu stick as the booting machine
- Turn off the security boot to prevent the laptop not loading the USB (subjected to change on different BIOS)
- Turn off the EUFI boot specifically for Windows 8 to avoid always booting to Windows instead of Ubuntu
- Boot overriding the USB drive (subjected to change on different BIOS), if no boot overriding exists, just follow the old school boot priority function
- Make a new partition for your Ubuntu, remember if you lack disk space, you will need to do partition resizing and be-careful not to override the Windows partition or you may not be able to boot into Windows again!! Before installing the new OS, make sure you which partition which OS refers to.
- After adding/resizing the partition, format it with ext4
- You will need to provide the mounting point (I usually pick "/") and create a very small bootloader partition called "Reserved BIOS Boot Area" for GRUB's code, this is VERY IMPORTANT, grub provides a boot menu for you to navigate to different OS, we need to provide it with some space (normally as small as 1MB), after creating both partitions, you are okay to proceed to the installation processes.
- Follow the Ubuntu install guide to finish the installation.
- In the final step, Ubuntu will ask you to restart the machine, just do so.
- Luckily you will find a Linux boot menu listing all the partitions included (e.g. /dev/sda1,sda2.... etc.) but we will miss our newly installed OS partition, we need to update the grub file to reflect the changes (OS addition)
- Boot into the pre-installed Ubuntu (the one before our third OS installation), navigate to /etc/default/grub and use text editior to edit it.
- We only interest in GRUB_DEFAULT, this controls which OS the default OS should boot in, choose the one you want and save the setting
- Remember after updating the file, you will need to UPDATE by sudo update-grub , if not the newly installed OS will not appear in the grub menu
- Reboot the machine and you will see the newly installed OS appeared.
- http://askubuntu.com/questions/16042/how-to-get-to-the-grub-menu-at-boot-time
- http://askubuntu.com/questions/343268/how-to-use-manual-partitioning-during-installation
2015年1月16日 星期五
[requireJS] define VS require
Difference between define and require
We often see define and require in requireJS, but what's their difference? I try to elaborate as below.
require
define
This is official explanation
/**
* The function that handles definitions of modules. Differs from
* require() in that a string for the module should be the first argument,
* and the function to execute after dependencies are loaded should
* return a value to define the module corresponding to the first argument's
* name.
*/
We often see define and require in requireJS, but what's their difference? I try to elaborate as below.
require
- When you want to load some stuff, you need to use require, like jquery, bootstrap etc.
- It has NO return statement
require(["jquery", "bootstrap", "bootstrap_select"], function() {
//requirejs sugar function
var angular = require('angular');
});
define
- As the name implies, it helps you define module that will be depend by other modules or applications
- It has return statement for inclusion by other modules
define(["angular", "angular-route", "angular-animate"],function(angular){
var insiderApp = angular.module("insiderApp",["ngRoute", "ngAnimate"]);
//routing
insiderApp.config(['$routeProvider','$locationProvider',function($scope,$routeProvider,$locationProvider){
}]);
return insiderApp;
});
This is official explanation
/**
* The function that handles definitions of modules. Differs from
* require() in that a string for the module should be the first argument,
* and the function to execute after dependencies are loaded should
* return a value to define the module corresponding to the first argument's
* name.
*/
2015年1月15日 星期四
[requireJS] Case Study: Working With AngularJS
Struggling for 2 days, I finally make myself clear with the combination of angularJS and requireJS. I will note down with examples.
Target
Files Included
Coding
main.js
controller.js
Points to Note
Others
References
Target
- To load controllers, directives of AngularJS through requireJS.
- Enjoy the benefits of requireJS on AngularJS
Files Included
- main.js
- Centralize all the js loading by one single main js file.
- Specifying the dependencies of each module when loaded. E.g.: Bootstrap depends on jQuery
- insiderApp.js
- To define the Angular main insiderApp module
- controller.js
- To define the Angular controller module
- step0.html
- The Angular view
Coding
main.js
require.config({
paths: {
'jquery' : 'lib/jquery.min',
'bootstrap' : 'lib/bootstrap.min',
'bootstrap_select' : 'lib/bootstrap-select',
'stepOne' : 'core/stepOne',
'angular' : 'lib/angular',
'angular-animate' : 'lib/angular-animate',
'angular-route' : 'lib/angular-route',
'controller' : 'controllers/controller'
},
//we do not add AMD-compliant script here!!
shim: {
"bootstrap" : { "deps" : ['jquery'] },
'bootstrap_select' : { "deps" : ['jquery', 'bootstrap'] },
'stepOne' : { "deps" : ['jquery','bootstrap_select'] },
'angular' : {
exports : 'angular'
},
'angular-animate' : {
"deps" : ['angular'],
exports : 'angular-animate'
},
'angular-route' : {
"deps" : ['angular'],
exports : 'angular-route'
},
},
//for debug
urlArgs: "bust=" + (new Date()).getTime()
});
require(["jquery", "bootstrap", "bootstrap_select", "stepOne", "insiderApp", "angular", "controller"], function() {
//requirejs sugar function >> Avoid putting all modules to the parameters
var angular = require('angular')
var csArr = ["/css/bootstrap-select.min.css", "/css/bootstrap.min.css", "/css/psliteM.css"];
//manually start over insiderApp for angularJS, no need to put ng-app in html file
angular.bootstrap(document,["insiderApp"]);
});
insiderApp.js
define(["angular", "angular-route", "angular-animate"],function(angular){
var insiderApp = angular.module("insiderApp",["ngRoute", "ngAnimate"]);
//routing
insiderApp.config(['$routeProvider','$locationProvider',function($scope,$routeProvider,$locationProvider){
}]);
return insiderApp;
});
controller.js
//controller
define(['insiderApp'],function(insiderApp){
insiderApp.controller('insiderControl', ['$scope', function($scope){
//store all the required images path here
$scope.menuImages = [
{
lm : './images/info.png',
width : '200px',
},
{
mid : './images/setting.png',
width : '200px',
},
{
rm : './images/tv.png',
width : '200px',
},
];
}]);
});
step0.html
Smart Moment (Menu)
Points to Note
- main.js
- Some tutorials will use require.config and we may also have requirejs.config, they are basically the same
- Requirejs object is used to setup
- Dependencies of different modules
- Remember only non-AMD script is allowed to put in the deps parameters for dependency loading.
- Module exports as global variables for use of other modules
- Define the exact path of the js files
- require(["jquery", "bootstrap", "bootstrap_select", "stepOne", "insiderApp", "angular", "controller"]....
- jquery, bootstrap etc. is the self-defined name of js scripts to load, they are loaded in order
- We must load the controller module for the AngularJS controller to work properly
- Inside require function we have a second require function,which is called sugar function, it only loads the required modules for use inside the function, if you don't need it, you are NOT required to include in function parameters.
- angular.bootstrap is to manually trigger the start of angularJS, which is highly recommended to use when cooperate with requireJS
- When this was set, NO
exists in the html view or AngularJS will throw errors - insiderApp.js
- define(["angular", "angular-route", "angular-animate"],function(angular){
- Normally, we will ignore the first parameter of the define function and let requireJS to use the file name as the module name (recommended)
- Second array parameter tells requireJS that insiderApp module requires angular, angular-route and angular-animate to be loaded before executing the insiderApp module
- function parameter "angular" is returned by the angular function, this object is for the implementation of insiderApp
- Return the insiderApp variable or not depends on whether or not other modules need insiderApp, normally you need to return it.
- var insiderApp = angular.module("insiderApp",["ngRoute", "ngAnimate"]);
Just like usual, start the angular module, we can do any configuration of the angular object in this file. - controller.js
- Just like usual, controller of the Angular object
- define(['insiderApp'],function(insiderApp)...
- Controller rely on insiderApp for adding controller to the Angular module, so we need to put insiderApp to the array and use it inside the function
- insiderApp.controller('insiderControl', ['$scope', function($scope){...
- Do all the work of Angular controller as usual
- step0.html
- Main view
- NO
here as we have already bootstrapped it manually in main.js
Others
- How to determine whether a module is AMD-compatibile module
- Check the source code to see whether it has keyword like "define", "require"
References
- http://segmentfault.com/blog/moejser/1190000000492238
- http://camnpr.com/archives/1563.html
- http://tech.pro/blog/1561/five-helpful-tips-when-using-requirejs
- http://stackoverflow.com/questions/17366073/requirejs-define-vs-require
- http://kielczewski.eu/2013/04/integrating-angularjs-with-requirejs/
- http://stackoverflow.com/questions/14619239/require-js-shim-not-working-for-this-code
2015年1月14日 星期三
[AngularJS] Basic Concepts
Here are the basic concepts of Angularjs, these concepts are barely well documented by the officials.
- angular.config only accepts providers
- Every service and factory are the instances of the providers
e.g.
angular.module('myApp') .service('FooService', function(){ //...etc }) .config(function(FooServiceProvider){ //...etc });Reference: http://stackoverflow.com/questions/17485900/injecting-dependencies-in-config-modules-angularjs
2015年1月13日 星期二
[Openwrt] Secure Your uhttpd Server
Sometimes you will need some http authentication for the uhttpd server, if it is so, we can follow the below steps to achieve.
- Set up the uhttpd config file
config uhttpd 'main' list listen_http '0.0.0.0:80' list listen_http '[::]:80' list listen_https '0.0.0.0:443' list listen_https '[::]:443' list interpreter '.php=/usr/bin/php-cgi' /*Use php as interpreter, add it if you want to load php correctly*/ option home '/www' /*Actual web file is placed in this folder*/ option rfc1918_filter '1' option max_requests '3' option max_connections '100' option cert '/etc/uhttpd.crt' option key '/etc/uhttpd.key' option cgi_prefix '/cgi-bin' option script_timeout '60' option network_timeout '30' option http_keepalive '20' option tcp_keepalive '1' option ubus_prefix '/ubus' option listen_http '8080' /*listen to http 8080, you can make your own listening port*/ option config '/etc/httpd.conf' /*Specify the config for username and password for http auth*/
- Make a file called "httpd.conf" under /etc directory
- Modify the file with the following, basically, the first parameter is the directory you want to protect
/:username:password
2015年1月12日 星期一
[jQuery] Datatable: Some Hints
Be careful when using datatables, the following should take into account
I will update this doc if any new hints of datatables found.
- If you try to do some column visible/invisible work, you need to clear cookies to take effect or you may not see any differences
$('#example').dataTable( { "columnDefs": [ { "visible": false, "targets": 0 } ] } );
For the above, we specify the column 0 to be invisible, but when I refresh my page, I cannot see anything, we need to clear the cookies to achieve the changes, the only reason for this I guess would be the bState parameter which use the cookie to save the sorting history and other datatable profiles.
***And usually you may need to restart the chrome browser with the private mode to reflect the changes***
I will update this doc if any new hints of datatables found.
訂閱:
文章 (Atom)
