npm private git or bitbucket module

อยากจะสร้าง common lib ไว้ใช้งานโดยผ่าน git หรือ bitbucket ให้ใส่โค้ดไว้ใน package.json มีให้เลือกหลายวิธีดังนี้

Basic auth

GitHub has support for basic auth:

"dependencies" : {
    "my-module" : "git+https://my_username:my_password@github.com/my_github_account/my_repo.git"
}

As does BitBucket:

"dependencies" : {
    "my-module": "git+https://my_username:my_password@bitbucket.org/my_bitbucket_account/my_repo.git"
}

แต่เราไม่ควรใส่ password ลักษณะนี้ใน package.json

Personal access tokens (GitHub) แนะนำ

To make this answer more up-to-date, I would now suggest using a personal access token on GitHub instead of username/password combo.

You should now use:

"dependencies" : {
    "my-module" : "git+https://<username>:<token>@github.com/my_github_account/my_repo.git"
}

For Github you can generate a new token here:

https://github.com/settings/tokens

App passwords (Bitbucket) แนะนำ

App passwords are primarily intended as a way to provide compatibility with apps that don’t support two-factor authentication, and you can use them for this purpose as well. First, create an app password, then specify your dependency like this:

"dependencies" : {
    "my-module": "git+https://<username>:<app-password>@bitbucket.org/my_bitbucket_account/my_repo.git"
}

[Deprecated] API key for teams (Bitbucket)

For BitBucket you can generate an API Key on the Manage Team page and then use this URL:

"dependencies" : {
    "my-module" : "git+https://<teamname>:<api-key>@bitbucket.org/team_name/repo_name.git"
}

reference https://stackoverflow.com/questions/10869796/npm-private-git-module-on-heroku

Posted in nodejs | Leave a comment

MSBUILD : error MSB3428: Could not load the Visual C++ component “VCBuild.exe”

We found the solution, just need run this command as administrator:

npm install --global --production windows-build-tools

Credit https://github.com/nodejs/node-gyp/issues/307#issuecomment-240556824

Posted in node.js, nodejs | Leave a comment

java convert resultset to json

งานลักษณะที่มีการต่อ db ตรงโดยไม่ใช้ JPA query ข้อมูลได้เป็น resultset และจำเป็นต้องแปลงเป็น json เช่น oracle database changed event งานที่ได้รับจำเป็นต้องแปลงข้อมูลที่ได้จาก resultset เป็น json เพื่อไปเก็บบน firebase เราสามารถใช้ method นี้แปลงได้เลย

public JSONArray convertToJSON(ResultSet resultSet) throws Exception {
   JSONArray jsonArray = new JSONArray();
   while (resultSet.next()) {
       int total_rows = resultSet.getMetaData().getColumnCount();
       JSONObject obj = new JSONObject();
       for (int i = 0; i < total_rows; i++) {
          obj.put(resultSet.getMetaData().getColumnLabel(i + 1).toLowerCase(), resultSet.getObject(i + 1));
          jsonArray.put(obj);
       }
   }
   return jsonArray;
}

reference http://biercoff.blogspot.com/2013/11/nice-and-simple-converter-of-java.html

Posted in java | Leave a comment

ตั้งค่า Google’s crawl rate ใน google webmaster tools

หากใครเคยเจอปัญหา โดน google bot ถล่มจนเว็บล่ม เพราะจำนวน index เว็บเราเยอะ โดน google bot ถล่มหน้าเว็บที่มีการเรียก API ที่ซื้อมาและมี limit quota ขอแนะนำวิธีบรรเทาทุกข์ เปลี่ยนแปลงอัตราที่ google เข้ามาไต่เว็บเรา (ไม่มีผลต่ออันดับ)

ให้เข้าไปตั้งค่าที่ google web master tool > site setting > crawl rate > Limit Google’s maximum crawl rate

ยกตัวอย่าง
A Crawl-delay: สมมติตั้งค่าเรท 30 วิ google จะเก็บหน้าเว็บเรา 1,000 หน้า ใช้เวลา 8.3 ชม.

A Crawl-delay: สมมติตั้งค่าเรท 500 วิ (Low Rate) google จะเก็บหน้าเว็บเรา 1,000 หน้า ใช้เวลา 5.8 วัน

หรือจะใช้วิธีใส่ rel=nofollow ใน tag <a> ก็ช่วยได้เช่นกัน แต่ต้องคิดพิจารณา ว่าควรใช้ตรงไหนถึงจะดีที่สุด

Posted in knowledge | Leave a comment

spring boot direct sql by entitymanager

ใครที่ใช้ Spring boot เชื่อมต่อ database ด้วย JPA เราจะคุ้นเคยกับคำสั่งของมันเช่น save() , findById(), findByField() แต่เมื่อไรที่ลักษณะงานของเรานั้น ต้องรับค่า input มาเป็น raw sql เราจะทำอย่างไร

ใช้งานใน Spring (@Controller,@RestController,@Service,@Repository)

import javax.persistence.EntityManager;
import org.hibernate.SQLQuery;
import org.hibernate.Session;

@PersistenceContext
private EntityManager entityManager;

.....

Session session = entityManager.unwrap(org.hibernate.Session.class);

String sql = "update TABLE set FIELD = y where FIELD_WHERE = 'xxx'";

SQLQuery query = session.createSQLQuery(sql);
int result = query.executeUpdate();

return String.valueOf(result);

ใช้งานนอก Spring ยืมการใช้งานผ่าน service

@Service
public class SomeServiceImpl implements SomeService {

    @PersistenceContext(unitName = "your_persistence_unit_name")
    private EntityManager entityManager;

    @Override
    @Transactional("transactionManager")
    public Session getSession() {
        return entityManager.unwrap(org.hibernate.Session.class);
    }
}

public class Foo{

    public void someMethod(){
        SomeService someService =
        ApplicationContextProvider.getApplicationContext().getBean(SomeService.class);
        Session session = someService.getSession().getSessionFactory().openSession();
        ....
    }
}

@PersistenceContext
A persistence context handles a set of entities which hold data to be persisted in some persistence store (e.g. a database). In particular, the context is aware of the different states an entity can have (e.g. managed, detached) in relation to both the context and the underlying persistence store

Session session = utilService.getSession().getSessionFactory().openSession();
Posted in spring boot | Leave a comment