Friday, July 31, 2015

first day of last month in PHP

<?php
$m0 = new DateTime("first day of last month");
echo $m0->format('Y-m-d') . PHP_EOL;

$m1 = new DateTime("last day of last month");
echo $m1->format('Y-m-d') . PHP_EOL;

$m2 = new DateTime("first day of February 2012");
echo $m2->format('Y-m-d') . PHP_EOL;

$m3 = new DateTime("first day of 2012-02");
echo $m3->format('Y-m-d') . PHP_EOL;
?>

Reference:

http://stackoverflow.com/questions/9735604/the-best-way-to-get-the-first-and-last-day-of-last-month

Thursday, July 30, 2015

Symfony - Allow HTML instead of plain text for form choice label

            <div class="form_field">
                {{ form_label(form.acceptpolicytermofuse, null, {label_attr: {style: 'vertical-align: top;'}}) }}

                <div id="form_acceptpolicytermofuse" style="display: inline-block; width: 520px;">
                  {% for child in form.acceptpolicytermofuse %}
                    {{ form_widget(child, {attr: {style: 'float: left;'}}) }}

                    <label for="{{ child.vars.id }}" class="required">
                    {% autoescape false %}
                      {{ child.vars.label }}
                    {% endautoescape %}
                    </label><br>
                  {% endfor %}
                </div>
            </div>

Wednesday, July 29, 2015

Show invalid or valid icon in form input field

The following demo will show the icon in the form input field when it's valid or invalid:

<style>
input:required:invalid {
  background-image: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAwAAAAMCAYAAABWdVznAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAT1JREFUeNpi/P//PwMpgImBRMACY/x7/uDX39sXt/67cMoDyOVgMjBjYFbV/8kkqcCBrIER5KS/967s+rmkXxzI5wJiRSBm/v8P7NTfHHFFl5mVdIzhGv4+u///x+xmuAlcdXPB9KeqeLgYd3bDU2ZpRRmwH4DOeAI07QXIRKipYPD35184/nn17CO4p/+cOfjl76+/X4GYAYThGn7/g+Mfh/ZZwjUA/aABpJVhpv6+dQUjZP78Z0YEK7OezS2gwltg64GmfTu6i+HL+mUMP34wgvGvL78ZOEysf8M1sGgZvQIqfA1SDAL8iUUMPIFRQLf+AmMQ4DQ0vYYSrL9vXDz2sq9LFsiX4dLRA0t8OX0SHKzi5bXf2HUMBVA0gN356N7p7xdOS3w5fAgcfNxWtn+BJi9gVVBOQfYPQIABABvRq3BwGT3OAAAAAElFTkSuQmCC);
  background-position: right top;
  background-repeat: no-repeat;
  box-shadow: none;
}

input:required:valid {
  background-image: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAwAAAAMCAYAAABWdVznAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAZZJREFUeNpi/P//PwMpgImBRMAy58QshrNPTzP8+vOLIUInisFQyYjhz98/DB9/fmT48/+35v7H+8KNhE2+WclZd+G0gZmJmYGThUNz1fUVMZtvbWT59eUXG9wGZIWMUPj993eJ5VeWxuy8veM/CzPL3yfvH/9H0QBSBDYZyOVm4mGYfn6q4cory5lYmFh+MrEwM/76/YsR7mk2ZjbWP///WP37/y8cqIDhx58fjvtu7XV6//ndT34G/v8FasUsDjKO/+A2PP3wpGLd+TVsfOz8XH6KAT+nHpokcu7h6d9q/BoMxToVbBYqlt9///+1GO4/WVdpXqY/zMqXn13/+vTjI9mj94/y//v9/3e9ZRObvYbDT0Y2xnm///x+wsfHB3GSGLf41jb3rv0O8nbcR66d+HPvxf2/+YZFTHaqjl8YWBnm/vv37yly5LL8+vuLgYuVa3uf/4T/Kd8SnSTZpb6FGUXwcvJxbAPKP2VkZESNOBDx8+9PBm4OwR1TwmYwcfzjsBUQFLjOxs52A2YyKysrXANAgAEA7buhysQuIREAAAAASUVORK5CYII=);
  background-position: right top;
  background-repeat: no-repeat;
}
</style>


<form name="testForm">
    <input type="text" name="firstname" required="required" minlength="3" maxlength="10" pattern="^[a-zA-Z ]+$" />
    <input type="text" name="lastname" required="required" minlength="3" maxlength="10" pattern="^[a-zA-Z ]+$" />
</form>

Symfony - Add custom validation and business logic checking

<?php
use Symfony\Bundle\FrameworkBundle\Controller\Controller;

use Symfony\Component\HttpFoundation\Request;
use Symfony\Component\HttpFoundation\JsonResponse;

use Symfony\Component\Validator\Constraints\NotBlank;
use Symfony\Component\Validator\Constraints\Length;

use Symfony\Component\Form\FormError;

class ContactController extends Controllerl
{
  public function addAction(Request $request)
  {
    $formId = 'warranty-registration-form';
    $formDefault = array();
    $formAttr = array('attr' => array(
        'class' => $formId,
        #'files' => TRUE,
    ));

    $form = $this->createFormBuilder($formDefault, $formAttr)
    #$form = $this->get('form.factory')->createNamedBuilder($formId, 'form', $formDefault, $formAttr)
      ->add('name', 'text', array(
        'data' => 'another dummy name', // default value can be set from here, too.
        'label' => 'Your Name:',
        'attr' => array('maxlength' => 5),
        'required' => TRUE,
        'constraints' => array(
          new NotBlank(),
          new Length(array('min' => 3)),
          new Expression(['expression' => 'value >= 5 and value <= 10', 'message' => 'not a valid value']),
        )
      ))
      ->add('joindate', 'date')
      ->getForm();

    $form->handleRequest($request); // handleRequest() recognizes whether the form is submitted and writes the submitted data.

    if ($form->isSubmitted() === TRUE) {
      $status = FALSE;

      if ($form->get('name')->getData() === 'asdf') {
        $form->get('name')->addError(new FormError('this is a fake name'));
      }

      if ($form->isValid() === TRUE) {
        $status = TRUE;

        return new JsonResponse(array(
          'status' => $status,
        ));
      }
      else {
        $errors = array();

        foreach ($form->all() as $fieldName => $formField) {
          foreach ($formField->getErrors(true, true) as $error) {
            $errors[$fieldName][] = $error->getMessage();
          }
        }

        return new JsonResponse(array(
          'status' => $status,
          'errors' => $errors,
        ));
      }
    }
    else {
      return $this->render('DemoBundle:Contact:index.html.twig', array(
        'form' => $form->createView(),
      ));
    }
  }
}
?>

Reference:

http://symfony.com/doc/current/cookbook/validation/custom_constraint.html
http://api.symfony.com/2.7/Symfony/Component/Form/FormInterface.html#method_getData
http://symfony.com/doc/current/components/form/form_events.html

Triggering HTML5 Form Validation

HTML:

<a href="#" id="validateFieldBtn">Validate a field</a>
| <a href="#" id="validateFormBtn">Validate a form</a>
<br /><br />

<form id="testForm">
    First Name: <input type="text" name="firstname" id="firstname" placeholder="Enter your name"/>
</form>

JavaScript:

$(document).ready(function () {
    $('#validateFieldBtn').on('click', function(e){
        e.preventDefault();
        
        if ($('#firstname').val() !== 'Bot') {
            // mark this field invalid by setting an error message.
            $('#firstname').get(0).setCustomValidity('Please enter a valid name');
        }
        
        // checks whether the element has any constraints and whether it satisfies them. If the element fails its constraints, the browser fires a cancelable invalid event at the element, and then returns false.
        if ($('#firstname').get(0).checkValidity() != true) {
            // triggering the browser's native validation UI.
            $('#firstname').get(0).reportValidity();
        }
    });
    
    $('#validateFormBtn').on('click', function(e){
        e.preventDefault();
        
        if ($('#firstname').val() !== 'Bot') {
            $('#firstname').get(0).setCustomValidity('Please enter a valid name');
        }
        
        if ($('#testForm').get(0).checkValidity() != true) {
            $('#testForm').get(0).reportValidity();
        }
    });
});

Demo: http://jsfiddle.net/Lz17jbr5/1/

Tuesday, July 28, 2015

Symfony - Add custom common library and business logic

In the Symfony2 world, this is clearly belonging to a service. Services are in fact normal classes that are tied to the dependency injection container. You can inject them the dependencies you need.

Create a LibraryBundle:

# php app/console generate:bundle --namespace=Foo/LibraryBundle --format=yml

Create the Utils directory:

# mkdir -p src/Foo/LibraryBundle/Utils

Create the Common.php class:

# vim src/Foo/LibraryBundle/Utils/Common.php

<?php

namespace Foo\LibraryBundle\Utils;

class Common
{
    public function helloWorld()
    {
        return 'Hello World!';
    }
}

Register the service to symfony dependecy container:

# vim app/config/services.yml

services:
    service_foo_lib:
        class: Foo\LibraryBundle\Utils\Common

Call your custom function in a controller:

# vim src/Foo/DemoBundle/Controller/DefaultController.php

$str = $this->get('service_foo_lib')->helloWorld();

Reference:

http://stackoverflow.com/questions/10336401/symfony2-global-functions
http://symfony.com/doc/current/cookbook/bundles/best_practices.html
http://symfony.com/doc/current/best_practices/business-logic.html
http://stackoverflow.com/questions/9759096/symfony2-where-to-place-custom-helper-classes

Symfony - to disable browser's validation

Generated forms take full advantage of this new feature by adding sensible HTML attributes that trigger the validation. The client-side validation, however, can be disabled by adding the novalidate attribute to the form tag or formnovalidate to the submit tag.

{{ form_start(form, {'attr': {'novalidate': 'novalidate'}}) }}
    <!-- start -->
    {{ form_widget(form) }}
    <!-- end -->
{{ form_end(form) }}

Reference:

http://symfony.com/doc/current/book/forms.html

to center a DIV on the screen

<style>
.center {
  position: absolute;
  width: 64px;
  height: 64px;
  left: calc(50% - 64px/2); /* width divided by 2*/
  top: calc(50% - 64px/2); /* height divided by 2*/
}
</style>

Note: calc() allows you to do basic calculations in css.

Reference:

http://stackoverflow.com/questions/210717/using-jquery-to-center-a-div-on-the-screen

Thursday, July 23, 2015

JQuery - get input file type file info name size type last modified date

<input name="imageUpload" id="imageUpload" type="file" value="" class="text"/>
<input name="submit" type="submit" id="submitForm" value="Submit Photo" />

$('#submitForm').bind("click",function() {

    var imgVal = $('#imageUpload').val();
    var file = $('#imageUpload')[0].files[0];

    console.log(imgVal);
    console.log(file);

    return false;
});

To create completely custom validation rules and to assign any validation errors to specific fields on your object

The purpose of the Callback constraint is to create completely custom validation rules and to assign any validation errors to specific fields on your object. If you're using validation with forms, this means that you can make these custom errors display next to a specific field, instead of simply at the top of your form.

Reference:

http://symfony.com/doc/current/reference/constraints/Callback.html

Wednesday, July 22, 2015

Validation is not working

Enable it:

# vim app/config/config.yml

framework:
    validation:    { enabled: true }

Reference:

http://stackoverflow.com/questions/12601104/yml-validation-file-is-ignored

What does ~ tilde symbol mean in the YML configuration file in Symfony 2

What does ~ tilde symbol mean in the YML configuration file in Symfony 2

In Yaml, ~ means null.

The actual meaning in Symfony 2 depends on what you are configuring. Most likely it will mean "use defaults" or it will be used where it is needed to put a configuration key but there is nothing to actually configure for that key (as in the NotBlank example).

Reference:

http://stackoverflow.com/questions/8667766/what-does-mean-in-the-yml-configuration-file-in-symfony-2

How to set up an SFTP user and restricted access to user home directory on CentOS

How to set up an SFTP user and restricted access to user home directory on CentOS

Add a new group called sftponly:

# groupadd sftponly

Edit sshd_config file:

# vim /etc/ssh/sshd_config

Match Group sftponly
 ChrootDirectory %h
 X11Forwarding no
 AllowTcpForwarding no
 ForceCommand internal-sftp

# systemctl restart sshd

Add a new user called sftp_user1:

# useradd sftp_user1 -m -c 'sftp only user' -s /sbin/nologin

Reset sftp_user1 password:

# passwd sftp_user1

Add the sftp_user1 user to sftponly group:

# usermod -a -G sftponly sftp_user1

The chroot directory needs to be owned by root so that the user/group can log in:

# chown root:sftponly /home/sftp_user1
# chmod 750 /home/sftp_user1

Create a new directory within the users home directory where files can be uploaded. Change the ownership of this directory to the new user and the sftponly group:

# cd ~sftp_user1
# mkdir shared_files
# chown sftp_user1:sftponly shared_files
# chmod 750 shared_files
# touch shared_files/index.html

Reference:

http://blog.ijun.org/2014/09/how-to-set-up-sftp-user-and-restricted.html

How to set up an SFTP user and restricted access to user home directory on FreeBSD

How to set up an SFTP user and restricted access to user home directory on FreeBSD

Do you need a secure way to give people access to files on your FreeBSD server? While FTP is not a good option because passwords are transferred in plain text, you should use the more secure SFTP. SFTP is based on SSH which encrypts all passwords and data. With this option there is no need to install a separate service as SSH is on almost every server.

All you need to do is to configure SSH properly. In this tutorial we show you to give users limited access to your system. Shell login will be disabled for these users, so they cannot run commands or play around with files they shouldn't.

Create a new group:

# pw groupadd sftponly

Add these lines at the bottom of the file and change the chroot directory to your needs:

# vi /etc/ssh/sshd_config

Match Group sftponly
 ChrootDirectory %h
 X11Forwarding no
 AllowTcpForwarding no
 ForceCommand internal-sftp

Restart the SSH server:

# /etc/rc.d/sshd restart

Add www user to the sftponly group:

# pw groupmod sftponly -m www

Create a new user:

# pw useradd -n sftp_user1 -s /usr/sbin/nologin -w yes -c "sftponly user" -m
# passwd sftp_user1

Add a user to a group:

# pw groupmod sftponly -m sftp_user1

The chroot directory needs to be owned by root so that the user/group can log in:

# chown root:sftponly /home/sftp_user1
# chmod 750 /home/sftp_user1

Create a new directory within the users home directory where files can be uploaded. Change the ownership of this directory to the new user and the sftponly group:

# cd ~sftp_user1
# mkdir shared_files
# chown sftp_user1:sftponly shared_files
# chmod 750 shared_files
# touch shared_files/index.html

# vim /usr/local/etc/apache22/extra/httpd-vhosts.conf

<VirtualHost *:80>
    ServerAdmin webmaster@dummy-host.example.com
    DocumentRoot "/home/srv/web-sftp/apache22/sftp.mydomain.com"
    ServerName sftp.mydomain.com

    ErrorLog "/var/log/apache22/sftp.mydomain.com-error_log"
    CustomLog "/var/log/apache22/sftp.mydomain.com-access_log" common
</VirtualHost>

# cd /home/srv/web-sftp/apache22/sftp.sftp.mydomain.com

# ln -s /home/sftp_user1/shared_files sftp_user1

Use browser to access:

http://sftp.sftp.mydomain.com/sftp_user1/ + FileName

Reference:

http://bin63.com/how-to-set-up-an-sftp-user-on-freebsd

Tuesday, July 21, 2015

MySQL - get the first day of the current quarter

SELECT MAKEDATE(YEAR(CURDATE()), 1) + INTERVAL (QUARTER(CURDATE()) - 1) QUARTER

Monday, July 20, 2015

李嘉誠:自己不做出點樣子,人家想拉你一把都不知你的手在哪裡。

李嘉誠:自己不做出點樣子,人家想拉你一把都不知你的手在哪裡。

15 點 成功要訣

1、自己不做出點樣子,人家想拉你一把都不知你的手在哪裡。

2、你若將過去抱的太緊,怎麼能騰出手來擁抱現在?

3、人最值得高興的事:

父母健在、知己兩三、盜不走的愛人。

其他都是假象,別太計較。

連李嘉誠 都說:自己不做出點樣子,人家想拉你一把都不知你的手在哪裡。

要怎麼把手伸出來,讓人看到你呢...?

接下去看看

4、時間,讓深的東西越來越深,讓淺的東西越來越淺。

5、人生中最永恆的幸福就是平凡,最長久的擁有需懂得珍惜。

6、人生不是要按別人的想法去過,而是要跟隨內心,做自己想做的那個人。

7、有時,一個笑就擊敗了一輩子,一滴淚就還清了一個人。

8、這一次,你敢不敢,像第一次戀愛那樣愛,像最後一次愛那樣愛?

搶得走的東西,原本就不屬於你。

9、每個人都有一個死角,自己走不出來,別人也闖不進去。

10、真心愛你的人永遠不會放你走,不管遇到多大的困境。

11、做別人,做得再好也不過是「某人第二」;做自己,卻永遠是自己的第一。

12、孤單,是你心裡面沒有人。寂寞,是你心裡有人卻不在身邊。

13、微笑不用花一分錢,卻永遠價值連城。

貪心是最猛烈的火,憎恨是最壞的執著

迷惑和錯誤的見解是最難逃脫的網,愛是最難渡過的河。

14、在說話之前,先聽;在回應之前,先想;

在消費之前,先掙;在退出之前,先試。

15、在這個世界上,

沒有人真正可以對另一個人的傷痛感同身受。

你萬箭穿心,你痛不欲生,也僅僅是你一個人的事,

別人也許會同情,也許會嗟嘆,

但永遠不會清楚你傷口究竟潰爛到何種境地。

經典中的經典:

一、當你能夠忘記你的過去,

看重你的現在,樂觀你的未來時,你就站在了生活的最高處。

二、當你明白成功不會顯赫你,

失敗不會擊垮你,平淡不會淹沒你時,你就站在了生命的最高處。

三、當你修鍊到足以包容所有生活之不快,

專注於自身的責任而不是利益時,你就站在了精神的最高處。

四、當你以寬恕之心向後看,

以希望之心向前看,以同情之心向下看,以感激之心向上看時,

你就站在了靈魂的最高處。

年輕時看遠,中年時看透,年老時看淡。

看遠。看遠才能攬物於胸,只看眼前美景,難見山外之山;

看透。天下熙熙,皆為名來,天下攘攘,皆為利往;

看淡。看淡不是不求進取,也不是無所作為,

更不是沒有追求,而是平和與寧靜,

坦然和安祥,離塵囂遠一點,離自然近一點。

告誡自己:

越是有故事的人:越沉靜簡單;

越膚淺單薄的人:越浮躁不安。

強者:不是沒有眼淚,而是含著眼淚依然奔跑。

人最先衰老的:不是容貌,而是那份不顧一切的闖勁。

有時候:要敢於背上,超出自己預料的包袱,

經歷一段努力后,發現自己比想象的優秀很多。

成功的人:一般不是才華橫溢的人

而是,最能以親切和藹的態度給人以好感的人。

一個人,不能改變自己的形象:卻能改變自己的氣質;

一個人,不能達到理想的高度:卻能提高自己的水平。

人際交往中:善良、熱情、誠信更容易給人以好感。

微笑:比禮貌更親切! 會給人陽光般的溫暖。

人一定要在一方面很努力,才讓其他的看起來毫不費力,

請記住 : 生活不會什麼都給你,

尤其在你什麼功夫都不想下的時候!!

Reference:

http://www.cmoney.tw/notes/note-detail.aspx?nid=25003

Sunday, July 19, 2015

Firewall access control works on development mode but not production mode

I have set up the roles restriction to the admin page. It has successfully blocked the users on development mode, but not on product mode.

# vim app/config/security.yml

# app/config/security.yml
security:
    access_control:
        - { path: ^/admin, roles: [ROLE_ADMIN, ROLE_MANAGER] }

Try to clear the cache:

# php app/console cache:clear --env=prod

Append content to block from the other template

To include a template, you need to use the include keyword, not the use keyword:

{% block appendable %}

    {# Assuming your sub1 template is in AcmeDemoBundle/Resources/views/MySub/sub1.html.twig #}
    {% include "AcmeDemoBundle:MySub:sub1.html.twig" %}

{% endblock appendable %}

Using Inheritance:

If you wish, you can use the {{ parent() }} keyword to use inheritance. For example, if you want to include sub1.html.twig by default but append sub2.html.twig in your child template, you can do the following:

base.html.twig

{% block content %}

    {% include "AcmeDemoBundle:MySub:sub1.html.twig" %}

{% endblock %}

site.html.twig

{% extends base.html.twig %}

{% block content %}

    {# render what happens in the parent content block #}
    {{ parent() }}

    {# and append sub2.html.twig as well #}
    {% include "AcmeDemoBundle:MySub:sub2.html.twig" %}

{% endblock content %}

Reference:

http://stackoverflow.com/questions/14564351/append-content-to-block-from-multiple-subtemplates

Symfony - Redirect to a page after login

Method 1:

# vim app/config/security.yml

# app/config/security.yml
security:
    firewalls:
        main:
            form_login:
                default_target_path: /home
                always_use_default_target_path: false

Method 2:

You can also override where the user is redirected to via the form itself by including a hidden field with the name _target_path.

<input type="hidden" name="_target_path" value="/home" />

Reference:

http://symfony.com/doc/current/cookbook/security/form_login.html

Symfony - logout target is not working

Make sure the logout: true line that described in FOSUserBundle document has been replaced with:

# vim app/config/security.yml

# app/config/security.yml
security:
    firewalls:
        main:
            logout:
                path:   /logout
                target: /home
                invalidate_session: false

Symfony granting path access to multiple roles in security.yml

Method 1:

# vim app/config/security.yml

# app/config/security.yml
security:
    access_control:
        - { path: ^/admin, roles: [ROLE_ADMIN, ROLE_TEACHER] }

Method 2:

Use the role hierarchy in security.yml

# vim app/config/security.yml

# app/config/security.yml
security:
    role_hierarchy:
        ROLE_ADMIN: [ROLE_TEACHER]

    access_control:
        - { path: ^/admin, roles: ROLE_TEACHER}

So all of this roles will have access to that path.

Reference:

http://stackoverflow.com/questions/19453299/symfony-granting-path-access-to-multiple-roles-in-security-yml

Symfony - How to logout a user

# vim app/config/security.yml


# app/config/security.yml
security:
    firewalls:
        main:
            logout:
                path:   /logout
                target: /
                invalidate_session: false

Reference:

http://symfony.com/doc/current/reference/configuration/security.html
http://stackoverflow.com/questions/11043672/symfony-logout-handler

Symfony 2 - 404 Not Found Error when tryes to open /app_dev.php

I had the same error, but I found out that the message was output when I typed app_dev.php/ but not when requesting app_dev.php (Notice the trailing slash /).

I think it has to do with the Router, but Its just an educated guess

Reference:

http://stackoverflow.com/questions/12424864/symfony-2-404-not-found-error-when-tryes-to-open-app-dev-php

Thursday, July 16, 2015

How to revert back / to restore to a previous SVN commit?

This will rebase your working copy at revision 45:

# svn update -r45

or:

This will update (by reverse-merging) your working copy by removing all the changes between 45 and 50. Now if you make changes and commit, it will be like you have removed 46-50 from the repository and made the HEAD revision (51?) to be r45 + your change:

# svn merge -c -50,-49,-48,-47,-46

Reference:

http://stackoverflow.com/questions/3155535/how-do-i-revert-back-to-a-previous-svn-commit

find near by locations by distance on Google Map

Here's the SQL statement that will find the closest 20 locations that are within a radius of 25 miles to the 37, -122 coordinate. It calculates the distance based on the latitude/longitude of that row and the target latitude/longitude, and then asks for only rows where the distance value is less than 25, orders the whole query by distance, and limits it to 20 results. To search by kilometers instead of miles, replace 3959 with 6371.

SELECT id, ( 3959 * acos( cos( radians(37) ) * cos( radians( lat ) ) * cos( radians( lng ) - radians(-122) ) + sin( radians(37) ) * sin( radians( lat ) ) ) ) AS distance FROM markers HAVING distance < 25 ORDER BY distance LIMIT 0 , 20;

Reference:

https://developers.google.com/maps/articles/phpsqlsearch_v3#createmap

Tuesday, July 14, 2015

get and set cookie in Magento

Method 1:

$TestCookie = Mage::getModel('core/cookie')->get('TestCookie');
Mage::getModel('core/cookie')->set('TestCookie', 'My Value', 3600);

Method 2:

$cookie = Mage::getSingleton('core/cookie');
$cookie->get('TestCookie');
$cookie->set('TestCookie', 'My Value', 3600);

To move virtual machine from ESXi to VMware Workstation

If you want to move virtual machine from ESXi to VMware Workstation or to convert from a physical machine to a virtual machine, use:

VMware vCenter Converter Standalone

Friday, July 10, 2015

原來我們的都錯了! 科學家揭示真正讓人恢復精力的『休息模式』

原來我們的都錯了! 科學家揭示真正讓人恢復精力的『休息模式』

為什麽你睡了11個小時仍然覺得疲累?為什麽你花了好幾萬去島國度假並沒有增加生活的熱情?
都說要去KTV,去夜店,去遊樂園就能忘掉不快,更帶勁地開始新的一天,但是盡興歸來心裡只剩空虛?

我們真的明白休息的含義嗎?我們休息對了嗎?你理解的休息是什麽?一個飽覺?一陣瘋玩?到KTV釋放飯後的一串飽嗝?

休息的真正含義是什麽?是恢覆疲勞,放鬆神經,當你重新投入工作與學習的時候覺得又是一個精力充沛的新人。

如果你的休息方式並不能為你帶來這些,那麽,無論這些活動的名字聽起來有多輕鬆,看上去有多High,它都是一種錯誤。

拋棄它們,來一場休息革命!

首先,來看看我們對休息有哪些誤解

一、腦力勞動者,補瞌睡對你沒什麽用
你寫了一天的文案,主持了一天的會議,當一切都結束了,你嘆到:太累了,這一天我要睡個好覺。我們的常識使得我們對疲勞的第一反應就是“去躺躺吧”。但這是一個陷阱。

睡眠的確是一種有效的休息方式,但它主要對睡眠不足或體力勞動者適用。對體力勞動者來說,“疲勞”主要是由體內產生大量酸性物質引起,如果十分疲勞,應采取靜的休息方式。通過睡覺,可以把失去的能量補充回來,把堆積的廢物排除出去。如果不是很累,也可以在床上先躺一躺,閉目靜息,讓全身肌肉和神經完全放鬆後,再起來活動活動。

但如果你是坐辦公室的,大腦皮層極度興奮,而身體卻處於低興奮狀態,對待這種疲勞,睡眠能起到的作用不大,(除非你是熬夜加班,連正常睡眠時間都達不到)因為你需要的不是通過“靜止”恢覆體能,而是要找個事兒把神經放松下來。這樣你可以理解為什麽你周末兩天不出門依舊無精打采,而只需下班後遊泳半小時就神采奕奕。

二、不必停下來,只是換一下
既然睡覺不能幫助我們休息大腦,那什麽辦法才可以?答案是不停止活動,而只是改變活動的內容。大腦皮質的一百多億神經細胞,功能都不一樣,它們以不同的方式排列組合成各不相同的聯合功能區,這一區域活動,另一區域就休息。

所以,通過改換活動內容,就能使大腦的不同區域得到休息。心理生理學家謝切諾夫做過一個實驗,為了消除右手的疲勞,他采取兩種方式——一種是讓兩只 手靜止休息,另一種是在右手靜止的同時又讓左手適當活動,然後在疲勞測量器上對右手的握力進行測試。結果表明,在左手活動的情況下,右手的疲勞消除得更 快。這證明變換人的活動內容確實是積極的休息方式。

比如你星期五寫了5個小時的企劃案,最好第二天去給你的盆栽們剪枝而不是睡到太陽曬屁股。還有一點,當你無法選擇由腦力勞動轉入體力勞動時,你不妨在腦力勞動內部轉換。

法國傑出的啟蒙思想家盧梭就講過他的心得:“我本不是一個生來適於研究學問的人,因為我用功的時間稍長一些就感到疲倦,甚至我不能一連半小時集中精力於一個問題上。

但是,我連續研究幾個不同的問題,即使是不間斷,我也能夠輕松愉快地一個一個地尋思下去,這一個問題可以消除另一個問題所帶來的疲勞,用不著休息一 下腦筋。於是,我就在我的治學中充分利用我所發現的這一特點,對一些問題交替進行研究。這樣,即使我整天用功也不覺得疲倦了。”所以,這天你要是有好幾個 問題要處理,最好交替進行,而不要處理完一個再開始的二個,那樣會很快被耗盡。

三、最好的休息,是讓你重燃生活的熱情
我們的疲憊主要來自對現有的一層不變的生活的厭倦。所以最好的休息項目就是那些讓我們重新找到生活和工作熱情的活動。如果你幹完一件事,能夠幸福地感嘆“明天又是新的一天。”那這件事對你來說就是最好的恢覆熱情,調節情緒的方法。但可惜,我們缺乏對“休息”的想象力。我們能想出來的休息方法不是癡睡就是傻玩。

我們給你開了下面一些活動清單,基本思路是以“做”來解決“累”,用積極休息取代消極放縱。當然,最適合你的方法還是要你自己探索。事實上如果你覺得打掃衛生比坐過山車是更好的放松,那麽就去吧,別管世界上的其他人都在玩什麽。

也許你可以:
1.用看兩小時讓你開懷的漫畫或小說代替去KTV唱那些一成不變的口水歌。

2.試著放棄在周六晚上去酒吧,10點入睡,然後在7點起床,去沒有人的街上走走,或是看看你從來沒有機會看到的早間劇場,你會發現這一天可以和過去的千萬個周末都不相同。

3.不要再去你已經去過無數次的度假村找樂子了。找一條你你從沒去過的街道,把它走完。你會發現這個你感到膩味的城市結果你並沒有完全體會到它的妙處。

4.旅行,而不是換個地方消遣。去一個地方對那個地方本身心存好奇,對自己這趟行程心存美意,感受自己經驗範圍以外的人生樣貌。而不是坐了5小時飛機,只是換個地方打麻將,換個地方遊泳,換個地方打球……

5.從這個周末起學習一項新的技藝,比如彈電子琴,打鼓……每周末練習1小時以上。

6.去社交。不要以為它總是令人疲憊的。雖然和看書比起來,它稍有點令人緊張,但也能讓你更興奮,更有認同感。你必須每周有兩三天是和工作圈子和親 戚外的人打交道。它讓你在朝九晚五的機械運行中不至失去活潑的天性。女性朋友們尤為需要走出去和朋友聚會,這些時刻你不再是滿臉寫著“效率”的中性人,而 是一個裙裾飛揚的魅力焦點。

7.做點困難的事,如果你是精神超級緊張的人。心理學家發現解除神經緊張的方法,是去處理需要神經緊張才能解決的問題。曾經一位精神即將崩潰的總經理找到一位醫師給出治療建議,結果他得到的處方是去動物園當馴獅師。一個月以後完全康覆。所以壓力特別大的時候你可以為自己再找分工作,但不要是和你職業類似的。比如去孤兒院做義工,或者去一個覆雜的機械工廠從學徒幹起,或者做一道超級覆雜的數學題。

往往珍惜生命的人,會不顧任何代價,去求得一個休息。休息十天、半個月,他們回來了。再看呀,是多麽神奇的一種變化!他們簡直是一個新生的人了。生機勃勃,精神飽滿,懷著新的希望,新的計劃,新的生命憧憬,他們己消除疲勞,獲得了從新起航的動力---燃料。

花些時間休息,可以使你獲得大量的精力、體力,使你取得從事任何工作,應付各種問題的力量,使你對於生命,能有一個愉快正確的認識,天下還能有其它時間的投資對於你更加有利嗎?

當我聽到有人說,他工作太忙,沒有時間去休息,我覺得這個人有些反常。或是他的能力不夠應付他的業務,他的工作缺乏系統性;或是他不善於支配他的員工,以致自己離開時事業就無法運行;或是他生性就太吝嗇,沒有部下或團隊。

連上廁所的時間都不肯犧牲。當然,假如他工作沒有計劃、沒有系統,本人一離開崗位,一切事務就要無法運行的話,他自然不能休息了。但是假如他是一個有組織協調能力的人,假如他的工詐有系統、有計劃,適度休息,這正是業務中的有利投資,因為休息回來,他的精力會更加集中、精神會更加飽滿。由此他的生命會延續的更長。人生的價值才能得到更加充分的體現與發揮。

每一個人都應該拋棄只顧工作不顧休息的念頭。那種“生命不止,奮鬥不休”的觀念是錯誤的,應立刻從腦海中消除掉。否則,你還沒有走完你應走完的生命旅程你就長眠於地下了。到那時你的理想、前途、事業不就都成了泡影了嗎?因此舍不得時間休息的人,絕對不是一個聰明人。

從人性的立場上來說,休息一事,利大於弊。古語說得好:“在患病的時候,任何人都是壞人。”即使是心底最善良的人,在身體疲憊不堪、神精衰弱的時 候,也會變得不通情理、脾氣暴噪。因此,當需要休息的候,你應該休息。不然的話,你的行為正如革命導師列寧同志所指出的那樣:“不會休息就不會工作。”

目前不論你是學生還是從事各種職業的男女老少,都不能忽視自然的警告,命令你適當延長你的休息時間,暫時停止你的學習或工作,否則你將受到自然規律的嚴厲處罰。無論你的地位有多高、金錢有多少、還是平頭百姓,在生命面前是一律平等的。這是蒼天賦與自然法官的權力。是人類無法改變的自然法則。

有一種感覺我們叫它無聊,這幾天不經意間我就在體驗無聊。

成年累月忙碌的節奏造就了頑固、可笑的生物節律,它總是讓我無法享受休息時的些許寧靜,閑暇時總覺得生活中缺了什麽、無所事事,甚至還以為知道了什麽是空虛?

前些天偶然看了一篇文章,破天荒知道了還有一種說法叫“享受無聊”。

傳統的教育告誡我們“無聊”是一種消極的情緒,一個奮發向上的人絕對不該有這種情緒,甚至不應該留給自己產生這種情緒的機會。

背負了太多的責任,於是我們活得好累,冠冕堂皇的說壓力來自外界,但我覺得更多的壓力是我們自找,因為在這個充滿壓力的社會我們沒有學會給自己減壓。

看看那些靜靜躺在海灘休假的人們,我們應該懂得無聊是一種難得的境界,或許比兢兢業業、勤勤懇懇的工作更難得。因為它需要你有好的心態、長遠的眼 光,要先接受它,讓自己的心靜下來,然後你才會真正的享受它。它絕不是一種頹廢,它是一種休整、一種積蓄,它會讓我們戒除“只會工作”的毒癮。

很早以前就有人告訴過我們:不會休息的人就不會工作。可我們由於功利的原因,早已將這一說法忘記。於是我們忙碌,我們努力,於是也就害怕無聊、害怕無事可做,甚至會因為閒暇而幾乎惶惶不可終日。

工作不應該成為生活的全部,工作只是為了更好的生活。我們應該是工作的主人,絕不是工作的奴隸。千萬不要以為無聊是消極、是不敬業。

所以忙碌的人們應該去學會享受生活、去習慣感受無聊,習慣這一種新奇的美妙的感受!悠哉樂哉!

Reference:

http://likea.ezvivi.com/m/166214.asp?_=2

Wednesday, July 8, 2015

How to remove tabs at start and end of varchar field in MySQL?

The trim() function only removes the leading and trailing spaces by default. However, you can specify the optional character to trim.

To remove all tabs and spaces in a string:

UPDATE mytable SET email = REPLACE(TRIM(email), '\t', '');
UPDATE mytable SET email = REPLACE(TRIM(email), CHAR(9), '')

To remove tabs and spaces from leading and trailing:

UPDATE mytable SET email = TRIM(CHAR(9) FROM TRIM(email));

Reference:

http://stackoverflow.com/questions/13979169/how-to-remove-tabs-at-start-and-end-of-varchar-field-in-mysql
http://dev.mysql.com/doc/refman/5.0/en/string-functions.html#function_trim

Add a second disk on Amazon AWS EC2

Add a second disk on Amazon AWS EC2

To check the partition file:

# cat /proc/partitions

major minor  #blocks  name

 202        0    8388608 xvda
 202        1    8387584 xvda1
 202       80    1048576 xvdf

To see the filesystem type:

# df -hT

Filesystem     Type      Size  Used Avail Use% Mounted on
/dev/xvda1     xfs       8.0G  1.4G  6.7G  17% /
devtmpfs       devtmpfs  482M     0  482M   0% /dev
tmpfs          tmpfs     497M     0  497M   0% /dev/shm
tmpfs          tmpfs     497M   13M  484M   3% /run
tmpfs          tmpfs     497M     0  497M   0% /sys/fs/cgroup

Or

# blkid -o value -s TYPE /dev/xvda1

xfs

Or

# file -Ls /dev/xvda1

/dev/xvda1: SGI XFS filesystem data (blksz 4096, inosz 256, v2 dirs)

Or

# ls -l /dev/block/

lrwxrwxrwx. 1 root root 7 Feb 25 22:05 202:0 -> ../xvda
lrwxrwxrwx. 1 root root 8 Feb 25 22:05 202:1 -> ../xvda1
lrwxrwxrwx. 1 root root 7 Feb 26 01:04 202:80 -> ../xvdf

# file -Ls /dev/block/202:1

/dev/block/202:1: SGI XFS filesystem data (blksz 4096, inosz 256, v2 dirs)

To format the disk:

# mkfs.xfs /dev/xvdf

meta-data=/dev/xvdf              isize=256    agcount=4, agsize=65536 blks
         =                       sectsz=512   attr=2, projid32bit=1
         =                       crc=0
data     =                       bsize=4096   blocks=262144, imaxpct=25
         =                       sunit=0      swidth=0 blks
naming   =version 2              bsize=4096   ascii-ci=0 ftype=0
log      =internal log           bsize=4096   blocks=2560, version=2
         =                       sectsz=512   sunit=0 blks, lazy-count=1
realtime =none                   extsz=4096   blocks=0, rtextents=0

# file -Ls /dev/xvdf

/dev/xvdf: SGI XFS filesystem data (blksz 4096, inosz 256, v2 dirs)

To find the UUID of the disk:

# ls -l /dev/disk/by-uuid/

total 0
lrwxrwxrwx. 1 root root 11 Feb 25 22:05 0f790447-ebef-4ca0-b229-d0aa1985d57f -> ../../xvda1
lrwxrwxrwx. 1 root root 10 Feb 26 18:23 49c0828c-0827-4d0b-82cd-19d75d293ddf -> ../../xvdf

Create a directory without access permissions (mode 000) so that nobody will write anything to the directory when the filesystem is not mounted:

# mkdir -m 000 /vol

To mount the disk:

# mount -t xfs /dev/xvdf /vol

If you wish this device to mount automatically when you reboot the server make sure you add this to your fstab file:

# vim /etc/fstab

UUID=49c0828c-0827-4d0b-82cd-19d75d293ddf /vol xfs defaults 0 2

Monday, July 6, 2015

做大事人的特征,很準!

一、忍得住孤獨

人生想要獲得成功,必須忍得住孤獨,尤其是在創業之初,很多時候為了達成目標,可能別人在休息時,我們還一個人在默默無聞的付出,這種過程是非常孤獨的,但如果能挺得過去,我們將會比別人取得更大的成功。

二、耐得住寂寞

為了生活、為了工作、為了事業,往往很多時候我們都不能陪在親人朋友的身邊,而是必須占用很多的休息時間和與家人團聚的時間。我們是否能夠耐得住這種寂寞?

三、挺得住痛苦

人生道路并非一帆風順,一路上難免會有很多坎坷、淚水、痛苦。痛苦之后往往會有兩種結果:一是委靡不振;二是更加強大,我們在經歷了痛苦之后究竟是委靡不振還是更加強大?取決于我們是否能挺得住痛苦?

四、頂得住壓力

沒壓力就會沒動力,大家都知道這個簡單的道理,但是很多人卻在遇到壓力時選擇了逃避和放棄。只有當我們擺正心態,坦然的面對壓力時,才會給我們的成長和發展注入無限動力。

五、擋得住誘惑

做人做事必須堅守自己的理想和原則。只要我們所堅守的是正確的事情,哪怕會有短暫的痛苦,也應該堅持下去;如果我們所做的是錯誤的事情,哪怕會得到短暫的快樂,也應該堅決拒之!

生活中處處都會存在著各種各樣的誘惑,如果定力不強,這些誘惑會隨時影響并阻礙著我們前進的步伐,甚至會讓自己迷失前進的方向,陷入短暫利益的漩窩中。在種種誘惑面前我們要一如繼往的堅持自己正確的原則和理想。

六、經得起折騰

每一次的失敗、每一次的淚水和汗水總是在不斷的折騰著我們,因此讓我們的發展道路充滿荊棘,但經過無數次的折騰才會讓我們從中深刻的體會到生活的真諦,我們試問自己能一而再、再而三的經得起折騰嗎?當經歷無數次的折騰后,我們還能堅持嗎?

七、受得起打擊

當面對他人一次又一次的冷嘲熱諷、當面對客戶對我們一次又一次的打擊時,我們能經受得起嗎?我們是否還能保持最初的激情,同時堅守自己的目標?我們是否還能保持不下降指標而是持續不斷的增加措施?

在市場開發中,當客戶毫不客氣的讓我們“滾”時,我們會保持一種什么樣的心態呢?我們是繼續爭取還是馬上灰溜溜的離開而從此不再爭取面談?無論是個人還是集體不在打擊中成長,就在打擊中消亡!

八、丟得起面子

面子是自己給自己的,不是別人給的。害怕丟面子會讓自己丟一輩子的面子,害怕失敗會失敗一輩子!害怕丟面子往往帶來的結果是打腫臉充胖子,會讓自己更加痛苦,從而丟掉更大的面子,讓自己陷入一種惡性循環!

九、擔得起責任

“責任”一詞在生活、工作中都隨時被我們掛在嘴邊,屢見不鮮。新華詞典中關于對“責任”的解釋:份內應做而未做或者未做好應當為此承擔的過失。責任分為三種:家庭責任、企業責任、社會責任。

在家庭中我們扮演著兒女、父親、丈夫、妻子、等角色;在企業中我們扮演著員工、管理者、領導或者老板的角色;在社會中我們扮演著公民、律師、老師、企業家等等角色,總之每個人在不同的場合都扮演著不同的角色,然而我們是否能真正的用行動來承擔起自己在各種場合下的角色?

十、提得起精神

當我們在連續多天加班或超負荷工作后,是否能提起精神為了自己目標而繼續沖刺?

Reference:

http://tw.anyelse.com/article/6253.html#006

Saturday, July 4, 2015

建置產生被動收入的系統,你才能自由

前幾篇文章有提到
建置一個自動運轉的系統有多麼重要
而 " 系統 " 這個詞,我想大家可能還是會覺得模稜兩可

其實最簡單的概念就是 " 躺著賺 "

講詳細一點,就是建構一個SOP標準化流程,OPM及OPT的方式(運用別人的時間及金錢)
本身不用參與其中,則這個系統會自動幫你帶來源源不絕的收入
而所帶來的收入是" 不用主動工作帶來的收入 " ,又稱做 " 被動收入 "
系統的規模可大可小,小至一個滷味攤,大至可以是一個統一企業
且建構時間因人而異,端看你付出多少心血及努力在初期的建置

其最大的特點就是一開始收入不穩定,就像管道影片裡的布魯諾一樣
初期忍受居民的嘲笑,但他知道當水管建起來,一輩子都能靠這源源不絕的收入生活
像統一企業的高清愿先生,架構7-11統一超商這個系統,前後整整賠了七年才開始獲利
期間忍受了多少股東的責罵分歧,但他知道,當7-11被架構起來,就不得了了,後來事實也如他所預期

清崎曾在富爸爸系列書中提到,你可以先找份工作,但你必須將資產及時間配置,逐步取得資產,擁有被動收入
這樣你才能早日脫離 " 永無止盡為錢追逐 " 的老鼠賽跑

這裡大概舉幾個例子給大家參考:

1. yahoo 奇摩拍賣
早期Max 本身有經營潮流衣服拍賣,但充其量只能算是自營商,因為全部進貨出貨都是自己處理
但是假如你做到一定規模後,請個秘書或助理幫你做出貨動作,還有買賣詢問
基本上,他可以算是一個基本的小型系統了
或者你可以慢慢做到中盤甚至大盤,做中間者賺取價差,但每季就負責中小盤批貨即可
這樣算是半自動化系統,因為你本身屬於中間商,只是有一大筆名單可以做迅速批貨
同樣的,請個助理,負責跑訂單,也能算個自動系統了

2. 各類小吃或飲料攤
相信大家在夜市或者商圈,常常會看到很多小吃攤或者飲料攤
這種模式初起建立是需要自己本身去瞭解SOP流程
差不多跑個3-5個月,熟稔整個環節後再請人代店,自己脫離出來
就能算是個小型系統了,這種特色是成本低廉,但是地點選對的話
能有不錯的收益及被動收入

3. 傳直銷(保險)
傳直銷我想大家都不陌生,他其實也是一種系統的模式
只不過他做的是 " 人 " 的生意,你的目標就是建立起" 人 " 的組織系統
基本上,目前傳直銷都是雙軌制
你的目標就是在兩線各別找到1-2隻老鷹,或者是優秀的領導者
你這個組織系統就架構起來了
剩下要做的是帶心,及適時給予組織支援,然後透過積分,帶來被動收入
而保險是靠保戶的重複消費,跟帶團隊,來創造系統

4. 中古屋隔 套/雅 出租(商辦)
在房地產生意這一塊,系統建立從套雅房出組,商瓣,店面等
都是同一個模式,只是細節各有不同
其被動收入的模式就是 " 租金收益 "
但如果你本身自己管理,基本上還稱不上是系統
透過代租管,讓他自動化,你只要每個月存摺上會自己有錢匯進來
這就是真正的系統化了

5. 存股票
在股票市場這一部分,是以 " 逢低買進,長期持有 "的策略
持續加碼高配息的股票,通常都會操作傳產龍頭股為主,像是中鋼,台塑
就像存錢在銀行,不過是存股票
當你存到一定程度,就會有每年的股利收入進來
這也是一種微型系統的被動收入模式

6. 會員制
如果你有一個產品或著課程或者APP
可以架構一個網站加入會員制度
像現在的健身俱樂部就是這個道理,網路實體都有類似的商業模式
與其讓你一次消費,不如讓你長期支付小額支出

7. 專利金/版稅
如果你有一個好的想法
可以申請專利,只要有人使用就要付你權利金
比方說: 知名的漫畫海賊王,你可以想像它的周邊年產值10億日幣嗎?
出書也可以創造被動收入
每賣出一本,你都能有版稅的收入(前提要賣得好XDD)
比方說: 哈利波特的作者羅琳


這樣大家瞭解了嗎? 如果你能朝建構系統的目標邁進
隨著系統的增加,你會越來越自由
當然還有很多被動收入的例子
全看你自己有沒有花心思去執行而已

聰明的工作,聰明的運用金錢
已經是現在這個時機歹歹的社會不可或缺的技能
努力架構屬於自己的系統為自己賺錢吧!!

Reference:

http://maxwu168.pixnet.net/blog/post/1362127-%E5%BB%BA%E7%BD%AE%E7%94%A2%E7%94%9F%E8%A2%AB%E5%8B%95%E6%94%B6%E5%85%A5%E7%9A%84%E7%B3%BB%E7%B5%B1%EF%BC%8C%E4%BD%A0%E6%89%8D%E8%83%BD%E8%87%AA%E7%94%B1

年輕時打造這四種被動收入,完成你的退休生活

這幾天的冷氣團,真的是冷到讓人受不了,
週六晚上接到一位老朋友阿榮的電話,
說什麼跟老婆為了小孩的教育問題,
還有一些貸款的壓力,直說快要活不下去了,
我就請他過來住家附近的居酒屋,喝個暖暖的清酒。

每天朝九晚五的公務員阿榮買房在新店,兩個還在念國小的孩子,
房貸、車貸,都常常讓他煩惱到睡不著覺。

阿榮愁眉苦臉的說:
「老畢啊!前兩天新聞看到央行10A總裁彭淮南說,
台灣生育率過低將大幅影響勞動參與率,
還鼓勵媒體朋友早日成婚,要年輕人多生baby,
呼籲年輕人不要只想到享受,不養孩子,
父母養我們,我們也有責任養孩子。」

我一邊點菜,一邊聽他抱怨吐苦水。
烤鯖魚、生魚片、炙燒干貝、醬燒雞肉串...
天氣冷就想多吃點...

我說:「彭總裁這樣說沒錯啊!不過重點你放錯了!
這次的央行會議,主要是說台灣不需要像美國、日本採取印鈔政策(量化寬鬆),
因為台灣沒有通縮的問題,另外目前也還沒有要升息。」

阿榮這時候不等菜還沒上就先喝了幾口酒苦笑的說:
「政府要我們生小孩用講的很簡單,
我一個月48K,剛結婚存款原本還有85萬,
生了兩個小孩後,每年存款越來越少,
他們現在國小還沒畢業,我存款剩下20萬...
剛生的時候還好,保母費我找便宜的一個月1萬4,
兩個小孩也要快3萬,上了幼稚園開銷越來越大,唉..」

我疑惑的問說:「你老婆不是也有在上班嗎?
雙薪家庭應該還過得去吧!
會不會是你平常亂玩股票賠掉的吧?」

阿榮講到股票眼睛瞪大的說:
「自從我婚前那次面板股大賠之後,早就沒在碰股票了,
連基金也都沒有再碰了,想說專心上班好好把家庭顧好就好,
老婆雖然也有工作,多少補貼一些,但有時收入也沒這麼穩定。」

阿榮說:「我知道朋友總覺得至少我還是個公務人員,
前幾年買了這間老公寓,似乎帳面也有賺錢,
但是這是我的窩,我賣了也不知道能去哪?」

「台北市就別提了,換新的房子更是當作夢。
朋友覺得我生活應該不餘匱乏,尤其跟現在時下的年輕人相比,
比我辛苦的人多的是,但是我現在已經40幾歲了,
真的很擔心未來的生活。」

阿榮這樣唉聲嘆氣,為了讓他心情好一些,
我認真的對他說:「我講一個現在會賺很慢,但是未來會越來越輕鬆的觀念,
應該可以解決你的煩惱,你想聽聽看嗎?」

阿榮笑著說:「你該不會要我去買威力彩吧!我知道已經連26槓了,
你要我定時定額去買彩券嗎?」

我想起之前與地產軍師紅色子房聊天時,
我們都認為被動收入是很重要的,
但大家仍覺得很抽象模糊。
子房兄把被動收入分為四種簡項,
我覺得相當不錯,就跟阿榮分享這個概念,
並加入了我一些解釋與想法。

最後我對阿榮說:「別鬧了,你需要的不是彩券,而是《被動收入》的概念。」

被動收入分為四種--股權、債權、物權、版權

什麼是被動收入?
大部分這個名詞被大量用在直銷業、保險業...
其實被動收入並不是代表簡單就能賺到的錢。

事實上被動收入就是
在有限的工作生涯中,建立未來你睡覺都有錢進來的現金流

因為人的體力有限,你25歲可以工作12小時,
30歲或許可以繼續拼,但是你40歲~50歲的時候呢?

暫且不論是否生病或者失業問題,
你的年幼小孩與逐漸老邁的爸爸媽媽,
你還能每天沒日沒夜的上班拼事業嗎?

如果你沒有富裕老爸可以靠的話,
那請把下列四種被動收入記在心裏!

第一、股權收入

投資一家賺錢的公司,每年會有股息配發給你,
如果公司經營的好,股價甚至會有大幅度的上揚,
這十年來台灣興盛的「定存股概念」就是這樣的概念,
但如果投資的公司不好,你為了高股息反而賠掉了價差
那就有點慘了。

過去曾有許多台灣的老闆,熟知台灣股民喜歡表面的配息,
所以左手發股息,右手去跟銀行借錢或者發公司債
利用高股息來掩飾經營不善的公司現況,
然後隔了一年你發現價差賠大了...

解決方案:直接買進與大盤同步的ETF,如0050,
或者是高股息的ETF,如:0056。

缺點:要有很大的耐心作等待,如現在台股9000點的高點,
你買進後也很難有大的利潤,如果大幅回檔的話,
你也必須有足夠的資金繼續投入才行。
再不然就是你乾脆等到大盤跌到5000點以下再買進。

第二、債權收入

許多壽險公司或大戶,
過去幾年會買進相當大的債券部位,
尤其是公債,因為前幾年利率不斷下跌過程中,
債券價格就會往上漲,
即使沒有賣掉,每年也能分配到很不錯的債息。

而一般投資朋友最常作的就是購買「高收益債」,
不過跟銀行或基金公司購買還需要很多的手續費與「多餘的費用」。
如果你想要省下這些手續費用,
直接的方法就是買進美股當中的高收益債ETF。
每個月都會配息,這種ETF成交量也很大,
即使妳有三千萬、五千萬要進出,完全不成問題,
例如:JNK、HYG
不過要注意最近市場動盪變大,
高收益債基金此時應多觀望注意風險。

不知道美股ETF代號可以參考這篇:
買下地球系列--美股ETF國際代碼整理(前進海外必備)
美股券商去下單,成本不到10塊美元
擁有一個海外的帳戶,已經是未來不得不學的一件事。

如果你是跟銀行購買3000萬的高收益債基金,
手續費要多少?絕對不是10塊美金搞得定。
自己有興趣可以去銀行問問看。

當然債息收入也包含了你借錢給親戚朋友,
如果你借給別人10萬元,
你要求每年年底要還給你5000塊錢的利息,
這樣也算是一種債息收入。

把錢存在郵局領取利息,這也算是一種債息的概念。

解決方案:買近類似定存的年金險,或者定時定額買進優質的公司債。

缺點:公債利息往往非常的低,想要高利息就要冒更大的倒債風險。
投資人不能只看利潤而忽略風險。
例如:俄羅斯目前把銀行定存利率拉高到17%
看似很吸引人,但是風險也不小。

第三、物權收入

這一點算是台灣人最喜歡作的一項被動收入。
物權收入就是把東西出借給別人,
但是每個月或每年要給你錢。

房租收入算是這一點的代表性收入,
小一點的像是出租車位給別人,
一個月多拿個3000或4000元也不錯。

有認識幾位40歲不到的朋友,
早期股票、期貨有賺到錢後,
立刻把錢轉去買屋收房租。
房屋總價漲或是跌,其實並沒有很關心。

這類族群關心的是房客會不會想不開(自殺)?
會不會延遲繳交房租?
會不會破壞房屋還要麻煩房東來修?

房價的漲跌牽扯的因素很多,
如果說「投機客」是造成台灣房價上漲的原因,
倒不如說「長期置產客」才是更龐大的一群人
因為100個人當中沒幾個人會每年買來賣去,
但這100個人當中卻有相當大的比率會把賺到的錢拿去買第二間房屋收租。
重點是「長時間都不拿出來賣」。
擁有三間以上或更多出租套房的專職包租公,我們就不討論了...

這一項被動收入,算是較多投資朋友都在作的。

解決方案:趁年輕拼下一些頭期款,利用低廉的銀行資金購屋並出租給別人,
自己暫時租小一點的空間或者是較遠的地點...
有多少錢就做多少事,資金不夠就先放棄精華區

缺點:未來的政策轉向,政府可能收取更多的稅金
景氣大幅下滑的時候,你能否保住你的房子。(失業繳不出貸款)

第四、版權收入

專輯大賣的知名歌手、知名暢銷作家算是這一類型的代表。
例如:你到KTV唱歌,你點歌的同時,歌手也會有版權收入。
而知名的暢銷作家也是同樣的道理,
書寫好之後,每一年都還是有人買,
所以每一年都還是有一些收入。

對於一般人來說,版權收入不是很容易作到,
有一部分程式設計師,也會寫出好玩的小遊戲,
或者是工具軟體供人下載,
寫好一個軟體程式或許要花很多的時間,
但是完成之後有5個人使用跟500人使用你並不會比較辛苦,
而之後的版權收入就會產生。

解決方案:設計一些有趣的軟體,或者是開始練習唱歌,
有朝一日像蕭敬騰一樣,大紅特紅。

缺點:進演藝圈當藝人,比開一家公司賺錢還要難,
因為除了你要有才藝之外,還要有「觀眾緣」...
而寫書當作家,如果你沒辦法出10本以上的書,
其實作家收入是很少的,一兩本書並不會賺。

花了很多時間寫完這篇文章,
希望對更多朋友有幫助,
被動收入並不是投機的、也不是速成的
而是「利用有限的體力與時間,來完成老年時的財務自由。」

希望今天這篇文章對你會喜歡,
如果覺得有幫助請分享給你的朋友。
謝謝你們!
看過很多終其一生勤勞工作的長者,因為沒有趁年輕打造自己的被動收入,當主動收入隨著年齡增長而下降的時候,憂愁與煩惱會壞了原本美好的老年生活。四種被動收入你選哪一種呢?

Reference:

http://www.bituzi.com/2014/12/4income.html