Posts

ghost-storage-adapter-oracle-ords, A Oracle Cloud Autonomous JSON Databases storage adapter for Ghost 5.x

Image
npm install   ghost-storage-adapter-oracle-ords https://www.npmjs.com/package/ghost-storage-adapter-oracle-ords https://github.com/lengerrong/ghost-storage-adapter-oracle-ords#readme In my last post,  how to custom storage adapters to make your self-hosted Ghost instance filesystem completely external? , I had a plan to implement a storage adapter of Ghost for Oracle Cloud Autonomous JSON Databases to leverage the always free 40Gb space provided by Oracle Cloud. After researched Oracle ORDS REST API , I implement a orcal-ords-client lib to encapsulate the REST APIs for easy usage. Then I developed this storage adapter based on the  orcal-ords-client  lib. Core Idea The storage adapter is to save the images uploaded to Ghost into external rather than the file system where your Ghost instance deployed. I designed the below JSON document for a image: {   "path": "the unique path of the image, just consider the image is saved to local file system",   "bl...

oracle-ords-client, a javascript lib to persistent your Oracle Cloud Autonomous JSON Databases via Oracle ORDS Database Management REST API

oracle-ords-client oracle-ords-client is a JavaScript library that defines a simple and consistent abstraction for interacting with a Oracle Cloud Autonomous Databases via Oracle ORDS Database Management REST API. declare class OracleORDSClient implements ORDSOAuthClient { config: ORDSOAuthClientConfig; private access_token; private expires_at; constructor ( config: ORDSOAuthClientConfig ); putJSONDocument( alias: string , json: JSONValue ): Promise<Item>; deleteJSONObject( alias: string , id: string ): Promise<boolean>; queryJSONDocument( alias: string , query: any , payload: any ): Promise<Collection>; private buildUrl; private ensureOauthToken; } npm install oracle-ords-client https://www.npmjs.com/package/oracle-ords-client github home page https://github.com/lengerrong/oracle-ords-client Maximum JSONDocument size: 4.4M Usage Sample: https://github.com/lengerrong/oracle-ords-client/blob/main/lib/index.spec.ts References: Ho...

cy.request with FormData and QueryString

correct FormData snippet please pass form: true and with the payload as body rather than use  FormData cy.request({ url, method: "post", headers: { Authorization: "Basic xxx", Accept: "*/*", "Cache-Control": "no-cache", "Accept-Encoding": "gzip, deflate, br" }, form: true, body: { "xxx":"yyy" } }).then((response) => {}) I tried create a  FormData  object and past it as body, but didn't work. correct QueryString snippet please pass qs with a JSON object rather than use  URLSearchParams cy.request({ url, method: "post", headers: { Authorization: `Bearer ${access_token}`, }, qs: { "parametername": "parametervalue" } }); I tried create a  URLSearchParams   object and past it as qs, but didn't work. cy.intercept won't work if the request not se...

Spring JPA: Dynamic Schema|Table at runtime

Image
named parameter bind only works on the where clause. what if you want different schema at runtime for the table part. such as 'select * from :tablename where ...'   'update :tablename set ..." You will find the above won't work in your @Query annotation use EntityManager::createNativeQuery You can get the single result, the first result, result lists or result stream. use entityManager.createNativeQuery(sql).executeUpdate() use executeUpdate to update or delete records in the table Not allowed to create transaction on shared EntityManager Caused by: java.lang.IllegalStateException: Not allowed to create transaction on shared EntityManager - use Spring transactions or EJB CMT instead Please call joinTransaction before execute update sql

Resolved: SSL Connection Reset

Image
  A java app encountered a weird SSL Connection Reset issue while upgrading to use java11. it talked to a legacy service, it works very well while running with java8. somehow 40% percent requests will failure in SSLException after java11. java.net.SocketException: Connection reset at java.base/java.net.SocketInputStream.read(SocketInputStream.java:186) at java.base/java.net.SocketInputStream.read(SocketInputStream.java:140) at java.base/sun.security.ssl.SSLSocketInputRecord.read(SSLSocketInputRecord.java:478) at java.base/sun.security.ssl.SSLSocketInputRecord.readHeader(SSLSocketInputRecord.java:472) at java.base/sun.security.ssl.SSLSocketInputRecord.decode(SSLSocketInputRecord.java:160) at java.base/sun.security.ssl.SSLTransport.decode(SSLTransport.java:110) at java.base/sun.security.ssl.SSLSocketImpl.decode(SSLSocketImpl.java:1408) at java.base/sun.security.ssl.SSLSocketImpl.readHandshakeRecord(SSLSocketImpl.java:1314) at java.base/sun.security.ssl.SS...

2023, New Start! New AdSense Account! New Earnings!

Image
It's been a while after I created adsense account to display ads on this blog. A few years later the payment finally reached my payout threshold, I just found the existed adsense account is bind to China. but I moved to Canada 3 years ago. I tried to change the country of it,  but just found   Unfortunately it's not possible to change the country of your payment address in AdSense. If you've moved to a new country or territory, you'll need to  cancel your existing AdSense account  and  create a new AdSense account .            So I created a new adsense account today on 2023-01-12. Though new account is still under reviewing, I believe it will be approved soon. To reach out payout threshold in this year, I set up the below plan: write one blog per week day!!! write one blog per week day!!! write one blog per week day!!! Try ingress more traffic to this blog

How To Setup OAuth Clients to Connect Your Oracle Cloud Autonomous Databases via REST

Image
Oracle Cloud provides you about 40G always free Autonomous JSON Database . That's a lot for your personal learning or blog. Let's find a way to utilize the free space in your web application. This is a step by step to set up a OAuth Client to connect your Oracle Cloud Autonomous Databases. Create a user account ADMIN is the default user and it has the administrator permission to your database. You don't want to your application use ADMIN user to connect. It is recommended to create a separate user per web application. As the ADMIN user, access Database Actions and create a user with the required privileges. Remember select "UNLIMITED" as Quota on table space DATA if you are not sure the quota size of your JSON document. Enable REST for the new created user Switch Authorization required on for security concern Sign out as the ADMIN user and Sign in to Database Actions as the new user that is setting up to use OAuth authentication. Create OAuth Client input client i...