Meteor


Access record[Graph / PV Info.(Past 1 day / Past 1 week) / Access from outside (Yesterday / Past 1 week) / Vistors's list]
ProfilePmail(Mail)
Inbox   /Send   /Sent
Reviews(List   /Limit)
Poll   /Agree:Got   /Sent
Fan
Works/Music
Blog
[Write]
Links
My Play List
 Created dateCategoryArticle title
12018/03/04MeteorTune up meteor
22017/11/27MeteorMeteor & React tips
32017/11/18MeteorHow to do table join of mo..
42017/11/07MeteorHow to publish to Google P..
52017/08/13MeteorDeploy meteor app with pm2..
62017/07/27MeteorHow to make Android App ru..
72017/07/21MeteorHow to set title for meteo..
82017/07/20MeteorChange CSS based on settin..
92017/07/20MeteorHow to use config file of ..
102017/07/07MeteorHow to add new class
 =>Older article
 Created dateNameRecent messages

1.
2018/03/04 "Meteor > Tune up meteor"
[Show only this article / Modify / Delete / Send trackback / Add to the shared category]

meteor --extra-packages bundle-visualizer --production;

Add comment to this article

2.
2017/11/27 (Updated 2017/12/14) "Meteor > Meteor & React tips"
[Show only this article / Modify / Delete / Send trackback / Add to the shared category]

1. What is this document
  1. Data retrieval should be done in container
  2. state value should be in client's side
  3. state should be passed to the children as {...this.state} and should be gotten and props
  4. Parent's state can be changed by passing the function to change the state from parent to children
  5. Avoid using global CSS as much as possible when you want to really make composed component
  6. general naming rule should be camelCase
  7. Clean unused disk by meteor
2. Meteor tips
  1. this.userId or Meteor.userId?

1. What is this document

List up what we should pay attention as principle when you create Meteor & React App
  1. Data retrieval should be done in container


  2. state value should be in client's side


  3. state should be passed to the children as {...this.state} and should be gotten and props


  4. Parent's state can be changed by passing the function to change the state from parent to children


  5. Avoid using global CSS as much as possible when you want to really make composed component


  6. general naming rule should be camelCase

Exception is Class name (CamelCase) and CSS (red-car__wheel--broken)
  7. Clean unused disk by meteor

Disk space will be used by meteor with waste, so you should clean up sometimes.
meteor npm install -g meteor-cleaner;
meteor clean-package-cache;

2. Meteor tips


  1. this.userId or Meteor.userId?

this.userId is for server side's publication
Meteor.userId is for client side.

Add comment to this article

3.
2017/11/18 (Updated 2017/11/19) "Meteor > How to do table join of mongodb (aggregate $lookup) using meteor"
[Show only this article / Modify / Delete / Send trackback / Add to the shared category]

1. Purpose of the documents
2. How to do "table join" using mongodb's shell
3. How to do "table join" in Meteor
    1. The way of using Association helpers in official document
    2. The way of using MongoDB's aggregate $lookup function for table join
        1. Preparation in meteor PJ folder
        2. How to implement
          1. Example of publications.js
          2. Example of container
          3. Example of views in JSX

  1. Purpose of the documents

MongoDB was not assumed as DB whose usage will require join of tables with serious consideration, so it was so for Meteor, too.
But it gives us the difficulty for data integrity.
As consequence of the necessity, MongoDB evolved with more support for "table join" but we still cannot find enough info for "table join" for meteor.
So I researched and summarized the way of implementing table join of mongodb using meteor.
  2. How to do "table join" using mongodb's shell

Example of how to "join" ContriesToLists table and Lists table by ContriesToLists.listId and Lists._id
You can refer to https://docs.mongodb.com/manual/reference/operator/aggregation/lookup/#pipe._S_lookup
for creating the query.

db.CountriesToLists.aggregate([
    {
      $lookup:
        {
          from: "Lists",
          localField: "listId",
          foreignField: "_id",
          as: "listInfo"
        }
   },
  { $match: { $and: [{"countryCode":"JP"}] } },
  { $match: { $or: [{ "listInfo.isPrivate": false }, { "userId" : "QGANTWSsNAoR8dsXC"}] } },
  { "$sort": { "updatedAt": -1 } },
  { "$limit": 100 },
]);
So if we can use same expression for getting the result even in meteor, it means that we can do table join in meteor making use of mongodb's function fullly. 
  3. How to do "table join" in Meteor


    1. The way of using Association helpers in official document

https://guide.meteor.com/collections.html#collection-helpers

CountriesToLists.helpers({
  lists() {
    return Lists.find({_id: this.listId} });
  }
});

const countriesToLists = CountriesToLists.find({});

And filter again using the value of countriesToLists.lists but not so ideal way because we cannot solve the necessity just by 1 mongodb queries and have to do many things to get the wanted result.
    2. The way of using MongoDB's aggregate $lookup function for table join


      1. Preparation in meteor PJ folder

Add meteor module to your meteor project.
meteor add jcbernack:reactive-aggregate

      2. How to implement

The core of implementation is how to implement the code for publication but I show you the actual related code for this.
Please extract the concept seeing examples.
        1. Example of publications.js

This is the file from one of my project as an example.

imports/api/countriesToLists/server/publications.js
import { Meteor } from 'meteor/meteor';
import { CountriesToLists } from '../countriesToLists.js';


Meteor.publish('citiesToLists.FindByCityName', function (params) {
    let limit = 100;

    check(params, {countryCode: String, cityName: String, stateName: String});
    let cityName = params.cityName;
    let countryCode = params.countryCode;
    let stateName = params.stateName;
    let andCond = [{"countryCode": countryCode}, {"stateName": stateName}, {"cityName": cityName}];
    let orCond = [{"listInfo.0.isPrivate": false}];
    let userId = Meteor.userId();
    if (userId) {
        orCond.push({ "listInfo.0.userId": userId});
    }

    return ReactiveAggregate(this, CitiesToLists, [
        {
          $lookup:
            {
              from: "Lists",
              localField: "listId",
              foreignField: "_id",
              as: "listInfo"
            }
        },
        { $match: { $and: andCond } },
        { $match: { $or: orCond } },
        { $sort: { updatedAt: -1 } },
        { $limit: limit },
    ]);
});

        2. Example of container

This is the file from one of my project as an example.

imports/ui/containers/CountryPageContainer.jsx
import { Meteor } from 'meteor/meteor';
import { createContainer } from 'meteor/react-meteor-data';
import { Countries } from '../../api/countries/countries.js';
import { States } from '../../api/states/states.js';
import { CountriesToLists } from '../../api/countriesToLists/countriesToLists.js';
import CountryPage from '../pages/CountryPage.jsx';

const CountryPageContainer = createContainer(({ params: { countryCode } }) => {
  const countriesToListHandle = Meteor.subscribe('countriesToList.FindByCountryCode', { countryCode: countryCode });
  const countriesHandle = Meteor.subscribe('countries.FindByCountryCode', { countryCode: countryCode });
  const statesHandle = Meteor.subscribe('states.FindByCountryCode', { countryCode: countryCode });

  const loading = !countriesToListHandle.ready() || !countriesHandle.ready() || !statesHandle.ready();

  const countriesToLists = CountriesToLists.find({countryCode: countryCode}).fetch();
  const states = States.find({countryCode: countryCode}, {sort: {stateName: 1}}).fetch();
  const country = Countries.findOne({countryCode: countryCode});
  const countriesToListExist = !loading && !!countriesToLists;
  return {
    country,
    countryCode,
    loading,
    countriesToLists,
    countriesToListExist,
    states
  };
}, CountryPage);

export default CountryPageContainer;

        3. Example of views in JSX

This is the file from one of my project as an example.

imports/ui/components/ListList.jsx
import React from 'react';
import PropTypes from 'prop-types';
import { Link } from 'react-router';
import BaseComponent from './BaseComponent.jsx';
import i18n from 'meteor/universe:i18n';
import isDefined from '@hikarine3/is-defined';
import Media from 'react-bootstrap/lib/Media';
import Paper from 'material-ui/Paper';

export default class ListList extends BaseComponent {
  constructor(props) {
    super(props);
  }

  render() {
    console.log("in ListsList render()");
    const { lists, loading, user } = this.props;

    if (loading) {
      return {};
    }
    else {
      return (
        <Paper className="paper">
        <ul>
          {isDefined(lists, "map") ?
          lists.map(list => 
          {
            let listId = list.listId || list._id;

// There are 2 type of data format for this flow, so I am using if condition but you can get the joined data by $MainTable.$joinedAsName[$arrayIndex].$columnName
            let listTitle = "";
            if ( isDefined(list.listInfo) && list.listInfo[0].name) {
              listTitle = list.listInfo[0].name;
            }

            else{
              listTitle = list.listName || list.name;
            }
            let isPrivate = false;
            if ( isDefined(list.listInfo) && list.listInfo[0].isPrivate) {
              isPrivate = list.listInfo[0].isPrivate;
            }
            else if(isDefined(list.isPrivate)){
              isPrivate = list.isPrivate;
            }

            let thumbnailImg = "";
            if ( isDefined(list.imgUrl) ) {
              thumbnailImg = convertToThumbnail(list.imgUrl);
            }
          return (
        <li key={list._id}>
        <Link
to={`/lists/${listId}/`}
key={listId}
className="list-todo"
activeClassName="active"
>
    <Media>
      <Media.Left align="top">
        {thumbnailImg
        ?
        Image
        :null
        }
      </Media.Left>
      <Media.Body>
            {isPrivate == true ?
              
              :
              null
            }
            {!isPrivate && Meteor.userId() && list.userId && Meteor.userId() === list.userId
            ?  : null }
            {listTitle}
      </Media.Body>
    </Media>
          </Link>
        </li>
              )
            }
          )
          :
          null}
        </ul>
      </Paper>
      );
    }
  }
}

ListList.propTypes = {
  lists: PropTypes.array,
  loading: PropTypes.bool,
  user: PropTypes.object
};

ListList.contextTypes = {
  router: PropTypes.object,
};


Add comment to this article

4.
2017/11/07 "Meteor > How to publish to Google Play"
[Show only this article / Modify / Delete / Send trackback / Add to the shared category]

Register as developer
https://play.google.com/apps/publish/signup/

using meteor

Add comment to this article

5.
2017/08/13 (Updated 2018/03/03) "Meteor > Deploy meteor app with pm2-meteor, nginx, free https(Let's Encrypt) instead of mup(mupx) or galaxy"
[Show only this article / Modify / Delete / Send trackback / Add to the shared category]

1. Background
2. Install meteor app on remote server
    1. About reference
    2. Choose VPS or some cloud environment using pm2-meteor
    3. Preparation on remote Linux
    4. Preparation on Client side
3. Set up SSL Certificate (HTTPS) using Let's encrypt
    1. Reference
    2. Procedure on remote server
4. Set up nginx
5. If you want to move your local mongo db's content to remote server

  1. Background


mup (mupx)
https://github.com/zodern/meteor-up
was popular tool to deploy meteor to deploy to your own environment, if you are not using galaxy.

But I encountered problems when I used them with meteor 1.5.x and it was hard to solve just using the tool.
Meteor's deployment was so easy beforehand but now it becomes hard while I haven't touched it for a while, 
Probably it is due to the lack of power for non-commercial deployment way due to the effort of monetization for galaxy (Galayx is easy to use actually if you don't mind so much about money).

Anyway after some struggles, I succeeded in deploying without them with HTTPS support in another way.
I will share how I did it.
  2. Install meteor app on remote server


    1. About reference

I used pm2-meteor for this.
https://www.npmjs.com/package/pm2-meteor
    2. Choose VPS or some cloud environment using pm2-meteor

VPS is cheap and worthwhile consideration if you are paying from you personal budget.
I chose ConoHa for it instead of Vultr or Digital Ocean this time.
    3. Preparation on remote Linux

This is the case on CentOS 7.3
yes | yum install epel-release --enablerepo=epel;
yes | yum install nodejs --enablerepo=epel;
yes | yum install npm --enablerepo=epel;
yes | npm install pm2 -g --enablerepo=epel;
yes | yum install gcc-c++;

# On Amazon Linux, you have to update node.js's version
sudo yum install nodejs npm --enablerepo=epel;

curl -o- https://raw.githubusercontent.com/creationix/nvm/v0.32.0/install.sh | bash

. ~/.nvm/nvm.sh

nvm install 4.6.1


If you want to install mongodb-server on same remote linux, refer to the official document to install latest one.
https://docs.mongodb.com/manual/installation/
    4. Preparation on Client side

# On client machine
npm i -g pm2-meteor;

#In the case of project "vps-ranking"
#In meteor's PJ folder
mkdir .deployment;
cd .deployment;
pm2-meteor init;

#Confirm the content of pm2-meteor.json and edit it if necessary
vi pm2-meteor.json
{
  "appName": "vps-ranking",
  "appLocation": {
    "local": "../"
  },
  "meteorSettingsLocation": "../vps-ranking-settings.json",
  "meteorSettingsInRepo": false,
  "prebuildScript": "",
  "meteorBuildFlags": "--architecture os.linux.x86_64  --server-only",
  "env": {
    "ROOT_URL": "http://vps-ranking.com/",
    "PORT": "3020",
    "MONGO_URL": "mongodb://localhost:27017/vps-ranking"
  },
  "server": {
    "host": "vps-ranking.com",
    "username": "root",
    "deploymentDir": "/opt/meteor-apps",
    "loadProfile": "",
    "nvm": {
      "bin": "",
      "use": ""
    },
    "exec_mode": "cluster_mode",
    "instances": "1",
    "pem": "~/.ssh/id_rsa"
  }
}

pm2-meteor deploy;
pm2-meteor start
pm2-meteor status
pm2-meteor logs
I used port 3020 because I would use nginx for HTTPS

And when you are running the process, log in the server and type the following command to make script run after restarting of the server.
pm2-meteor startup;
pm2-meteor save;

  3. Set up SSL Certificate (HTTPS) using Let's encrypt


    1. Reference

https://github.com/nolandg/meteor-lets-encrypt
    2. Procedure on remote server

yes | yum install nginx;
yes | yum install certbot;

wget https://dl.eff.org/certbot-auto
chmod a+x ./certbot-auto;
./certbot-auto;

# If you want to define for multiple domains, as example
./certbot-auto -d vpsranking.com -d en.vpsranking.com -d cn.vpsranking.com -d vps-ranking.com

# Set updating of SSL certificate in cron
crontab -e
00 1 * * 1 . ~/.bash_profile;/root/certbot-auto renew > /var/log/letsencrypt-renewal.log

# If firewall is stopping the access to port 443, you have to open
firewall-cmd --add-service=http --zone=public --permanent
firewall-cmd --add-service=https --zone=public --permanent
firewall-cmd --reload

  4. Set up nginx

yum install nginx;
# edit server name
vi /etc/nginx/nginx.conf

# Insert the line into nginx's config from let's encrypt getting the help of the command though we will confirm and edit later
git clone https://github.com/letsencrypt/letsencrypt;
cd letsencrypt/;
./letsencrypt-auto --nginx;

# After it, edit config nginx referencing set lines
worker_processes  1;

events {
    worker_connections  1024;
}


http {
    include       mime.types;
    default_type  application/octet-stream;

    sendfile        on;

    keepalive_timeout  65;
    gzip  on;

    server {
        listen       80;
        server_name  vpsranking.com;
        return 301 https://$host$request_uri;
    }

    server {
        listen 443 ssl; # managed by Certbot
        ssl_certificate /etc/letsencrypt/live/vpsranking.com/fullchain.pem; # managed by Certbot
        ssl_certificate_key /etc/letsencrypt/live/vpsranking.com/privkey.pem; # managed by Certbot
        include /etc/letsencrypt/options-ssl-nginx.conf; # managed by Certbot
        
        server_name  vpsranking.com;
        location / {
            proxy_pass http://vpsranking.com:3020;
         #   proxy_http_version 1.1;
         #   proxy_set_header Upgrade $http_upgrade; #for websockets
         #   proxy_set_header Connection "upgrade";
         #   proxy_set_header X-Forwarded-For $remote_addr; <= I found these from examples but for some reason this line caused infinitive redirecting loop, so I couldn't use this line
         #   proxy_set_header Host localhost; #  $host;
         }
    }
}

Then start nginx
systemctl start nginx;
chkconfig nginx on;

  5. If you want to move your local mongo db's content to remote server

Example on client
mongodump --db vpsranking
scp -Cpr dump $USER@vpsranking.com:~/

Example on server side
mongorestore dump


Add comment to this article

6.
2017/07/27 (Updated 2018/02/05) "Meteor > How to make Android App run using meteor v1.5.x or later"
[Show only this article / Modify / Delete / Send trackback / Add to the shared category]

1. Background
2. Assumed procedure of making Making Meteor app run on Android
    1. Assumed environment
    2. Install Java
    3. Install Android Studio
    4. Put workable Android SDK at the proper path
        1. Download workable SDK and put at the proper location ._
        2. Set environment value
    5. Create virtual device using Android SDK
    6. Try to make Android app run
3. Encountered Error
    1. Something is missing
    2. Error related with gradle
    3. PANIC: Broken AVD system path. Check your ANDROID_SDK_ROOT value and Emulator is not invoked
    4. Error: adb: Command failed with exit code 1 Error output: error: device unauthorized
    5. ...E chromium: ERROR:...
    6. Cannot deploy meteor app though you succeeded first time
    7. Meteor App does't talk with remote server
4. How to release to Google play

  1. Background

Meteor is ideal when I create Android/iOS/Web application just by 1 code.

But Android version doesn't work with Latest Android SDK now, so we have to do do many tricks to make it run now.

I encountered many problems to try to make Meteor app run for Android.
I encountered different problems when I tried to make Meteor app run on Android after a while.

It may depend on env but you have to solve the problems one by one and you can succeed in launching Android App at the end.
I will share what I encountered and how I solved them.
  2. Assumed procedure of making Making Meteor app run on Android


    1. Assumed environment

Latest Mac OS.
    2. Install Java

brew cask install java8;

But there is the possibility that the latest Java cannot make the environment workable.
In the case of February, Java9 has the problem, so I had to specify version (java8).
If you have installed java9 or higher on your machine, brew cask remove java; and java cask install java8;

You can verify java's version by
java -version;
    3. Install Android Studio

https://developer.android.com/studio/index.html
    4. Put workable Android SDK at the proper path

Reading https://guide.meteor.com/mobile.html for Android section, do what is described
Basically you have to
1) Open Android Stuido
2) Configure
3) Choose
[SDK Platforms]
- Android SDK Platform
- Google Play Intel x86 Atom System Image
Show details show them

[SDK Tools]
- Android Emulator
- Android SDK Build Tools
- Android SDK Platform Tools
- Android SDK Tools
- Intel x86 Emulator Accelator
      1. Download workable SDK and put at the proper location ._

Download files based on the description like this.
Meteor 1.4.3.1 or later: Android SDK Tools v.25.2.x (mac, linux, windows) or v.26.0.0 or later

Unzip it and remove $ANDROID_HOME/tools and put downloaded tools directory there.
      2. Set environment value

vi ~/.bash_profile
export ANDROID_HOME=~/Library/Android/sdk;
export ANDROID_SDK_ROOT=$ANDROID_HOME
export PATH=$ANDROID_HOME/tools:$ANDROID_HOME/tools/bin:$ANDROID_HOME/platform-tools:$PATH

Reflect change to env
. ~/.bash_profile;
echo $ANDROID_HOME;

Of course, you have to verify the existence of the directory's content
ls -lFt $ANDROID_HOME;

    5. Create virtual device using Android SDK

Start any project and click the device mark and create 1 Android Virtual Device

After you finish it, you should be able to see some result by typing
avdmanager list targets
    6. Try to make Android app run

ex.
meteor run --settings $site-settings.json --mobile-server=https://www.travelplan.world/ android --verbose;

Adding --verbose is the key to debug the reason of why it is not working.

If it runs without error, it is O.K.
But if not, you have to solve the problem 1 by 1.
  3. Encountered Error


    1. Something is missing

Invoke Android studio and install package which is said as missing.
    2. Error related with gradle

Check you whether you did "Download workable SDK and put at the proper location ._ " and "Set environment value"
    3. PANIC: Broken AVD system path. Check your ANDROID_SDK_ROOT value and Emulator is not invoked


In the case that Emulator is Nexus_5X_API_23

grep image.sysdir.1 ~/.android/avd/Nexus_5X_API_23.avd/config.ini

And
image.sysdir.1=system-images/android-25/google_apis/x86/

was shown but
ls -lFt ~/Library/Android/sdk/system-images/android-25/google_apis/x86/
didn't exist and
ls -lFt ~/Library/Android/sdk/system-images/android-25/google_apis_playstore/x86/
was existing one, so I modified the line into
image.sysdir.1=system-images/android-25/google_apis_playstore/x86/

If system-images/android-$VERSION/google_apis_playstore/x86/ doesn't exist, install Google Play Image from Configure screen of Android Studio.
    4. Error: adb: Command failed with exit code 1 Error output: error: device unauthorized

Make emulator run first through Android studio or command anyway.
After it type meteor run command.
    5. ...E chromium: ERROR:...

Remove crosswalk package
meteor remove crosswalk;

    6. Cannot deploy meteor app though you succeeded first time

Remove Android Virtual Device and recreate it using Android studio
    7. Meteor App does't talk with remote server

Check the url which you type is accessible without redirection or any error.

ex.
meteor run --settings $site-settings.json --mobile-server=https://www.travelplan.world/ android;
  4. How to release to Google play

See the procedure
https://support.google.com/googleplay/android-developer/answer/6334282?hl=en

Add comment to this article

7.
2017/07/21 (Updated 2017/07/20) "Meteor > How to set title for meteor"
[Show only this article / Modify / Delete / Send trackback / Add to the shared category]

document.title = "......" ;

Add comment to this article

8.
2017/07/20 (Updated 2017/07/21) "Meteor > Change CSS based on settings.json which you useHow to load customized CSS based on the variable in settings.json"
[Show only this article / Modify / Delete / Send trackback / Add to the shared category]

1. Example

  1. Example

SITE=vps-ranking;
export MONGO_URL="mongodb://127.0.0.1:27017/$SITE";
meteor run --settings $SITE-settings.json --mobile-server=https://$SITE.com/

settings.json
{
    "public": {
        "site": "vps-ranking"
    }
}

components/CustomCss.jsx
import React from 'react';
import { Meteor } from 'meteor/meteor';

const CustomCss = () => {
  let customCss = '/css/site/' + Meteor.settings.public.site + '.css';
  return (
    <link rel="stylesheet" type="text/css" href={customCss} />
  );
};

export default CustomCss;

File which use the file
import { Meteor } from 'meteor/meteor';
import { render } from 'react-dom';
import React from 'react';

import CustomCss from '../imports/ui/components/CustomCss';
...

  render(
    ...
  <CustomCss />
...
  );
...


Add comment to this article

9.
2017/07/20 "Meteor > How to use config file of meteor"
[Show only this article / Modify / Delete / Send trackback / Add to the shared category]

1. Specify config file
2. How to access to the value internally

  1. Specify config file

Example
meteor run --settings vps-ranking-settings.json --mobile-server=https://vps-ranking.com/
  2. How to access to the value internally

If you defined the value like
{
  "siteName": "test site name"
}

then you can access the value by

Meteor.settings.siteName

in meteor's program.

Add comment to this article

10.
2017/07/07 "Meteor > How to add new class"
[Show only this article / Modify / Delete / Send trackback / Add to the shared category]

1. Example
2. api/
3. vi startup/client/routes.jsx
4. vi startup/server/register-api.js
5. ui/components
6. ui/containers
7. pages/

  1. Example

When you create States class
$CLASS="States";
  2. api/

$class = "states";
mkdir $class;
mkdir -p $class/server;
touch $class/server/publications.js;
touch $class/$class.js;
touch $class/methods.js;
  3. vi startup/client/routes.jsx

Add route if necessary
  4. vi startup/server/register-api.js


  5. ui/components

ui/components/$CLASS.jsx
ui/components/$CLASS.less
  6. ui/containers

$CLASSPageContainer.jsx

In the case that new Container.jsx is added, you have to restart meteor.
  7. pages/

pages/$CLASS.jsx
pages/$CLASS.less

Add comment to this article

 =>Older article
Subscribe to RSS
RSS
Term
Category
All
1.Japan
2.Atlassian's products
3.Self
4.Development of this site
5.Japanese comics
6.Japanese anime
7.Weekly hot news of Japanese culture
8.OP/ED/PV
9.Japanese game
10.Ranking
11.Japanese Comics (Manga)
12.Search Engine
13.Japanese drama
14.Japanese otaku culture
15.Programming
16.Ineternet world
17.Movie
18.C/C++
19.BerkeleyDB
20.Apache programming
21.Spam
22Meteor
23.Marketing
24.Python
25.Scrum
26.JIRA
27.Git
28.CI
29.Jenkins
30.AWS
31.Operation
32.Singapore
33.Cloud
34.Mysql Cluster
35.DevOps
36.Bitbucket
37.Xamarin
38.Good and new
39.Monitoring
40.JavaScript(node.js)
41.React
42.Phillipines
43.Hiring
44.Python
45.SEO
46.Malaysia
47.Mongodb
48.Perl
49.Docker
50.Life hack
51.Dance
52.QA
53.Mysql
54.Digital Life Hack
55.Project management
56.Django
57.Gatsby
58.Administrator
Sayings from S-Cry-Ed

Rule in this world is speed. Even stupid person can write cool novel if he can spend 20 years for it.

If someone helped me, I will help him in return, which is my rule.

To become stronger, consider what is cowardliest thinking. And rebel against the thinking, which will make you stronger.



I am Japanese but working for some English sites.

Doctor Job Career
Nurse Job Career
↑Top