Posts

A New Collection of Thoughtful Learning Apps — Now Available on iOS & Android

Image
I’m excited to share a set of mobile apps I’ve recently completed and published on both the Google Play Store and the Apple App Store. These apps are designed with a simple goal in mind: to make meaningful, structured content more accessible, whether you’re studying theology or improving your English vocabulary. 📱 Now Available on Both Platforms All apps are live and available for download: Google Play Developer Page: https://play.google.com/store/apps/dev?id=5835943159853189043 Apple App Store Developer Page: https://apps.apple.com/ca/developer/q-z-l-corp/id1888794100 📖 Theology & Confession Study Apps For those interested in Reformed theology and classical Christian teachings, I’ve developed a series of apps that present foundational texts in a clean, focused reading format: The Belgic Confession Canons of Dort Heidelberg Catechism Westminster Shorter Catechism Each app is designed to provide a distraction-free experience, making it easier to read, reflect, and revisit these im...

How to Set up Mailgun configuration to email newsletters for your Ghost blog

Image
This is a step by step blog to guide you how to set up Mailgun sending API keys for your domain and set it up in your self hosted Ghost blog. Setup Sending API key in Mailgun login into your Mailgun account, go through the menu steps: Dashboard -> Sending -> Domain settings -> Sending API keys Click 'Add sending key' Input a simple description and click 'Create sending key' Copy the Sending API key into clipboard Ghost Email Newsletter Setting Copy the API key you just created and paste   ...

cy.request with FormData and QueryString

Image
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 pas   ...

2023, new start! new ghost!

Image
I will develop a professional and responsive web application https://www.fiverr.com/errongleng/develop-a-professional-and-responsive-web-application Ping me if you want to build a new website, apps, h5 program or any other programers. I am here to help! New Ghost Version! 5.29.0 New Image Storage Adapter: https://github.com/lengerrong/ghost-storage-adapter-oracle-ords with this adapter, the images used by this blog will be stored into oracle autonomous JSON database(which gives you 40G a   ...

Share files between different agent workspace in the same Jenkins Pipeline via stash|unstash

Image
  Photo by  The Halal Design Studio  /  Unsplash I was working on a legacy app recently. The legacy app has angular as its frontend and spring boot app as its backend. Originally the frontend build outputs are committed in the app's git repository and packaged by spring boot by copying them to the  ${project.basedir}/target/classes/static/  class path(since content under the folder will be served as static resources by spring boot). And we are using Jenkins pipeline to run the build for this app. Hence the pipeline only use a java jenkins slave to compile and package the spring boot app. But that is not the right way, isn't it? We should run both build the pipeline for frontend angular app and backend sprint boot app. But an angular app required a node slave to build it out. We don't have a Jenkins slave that has both java and node installed. Then issue comes:  How to build java and javascript apps in a single Jenkins pipeline? Then I found Pipeline al...

Swagger annotations for API that allows downloading files as zip

Image
  I have built out an API that allows you downloading log files as zip in a sprint boot app. The app also integrated with Swagger 3, so I also want this API can be hit in the Swagger UI. In this post, I will demonstrate how to use @ApiOperation annotation to tell Swagger UI download the response as a zip file. use @ApiOperation for your method The key is set media type to  "application/octet-stream"  which can be recognized by Swagger UI. By doing so, you are set "accept":" application/octet-stream " in the request header. Put below annotation section on top of your API's controller method. @Operation( summary = "", description = "", method="GET", responses = { @ApiResponse(responseCode = "200", description = "", content = { @Content( mediaType = "application/octet-stream" ...