Posts

Free Click-to-Call to Your Call Center from the Website: Integrating WebRTC, SIP.js and FreePBX

Image
Introduction Customers can now call the call center straight from the company website, free of charge, with no phone credit and no extra app. They click a Call Us button, allow microphone access in the browser, and the call lands in the agent queue like any ordinary phone call. The technology behind it is WebRTC , which is built into every modern browser. On the browser side we use the SIP.js library, and on the server side we use FreePBX (Asterisk). This article covers the architecture we use, three problems we ran into in practice, and how we solved them: How to tell callers apart when every web visitor shares the same SIP account. How to make the call center system, which only reads the Caller ID, still recognize each caller. How to stop the credentials embedded in the browser from being abused to make free calls anywhere. Topology A call travels from the browser to the WebRTC FreePBX, is forwarded over a trunk to the internal FreePBX, and then enters the call center q...

Titus the Fox Passwords

Image
You can play the game via browser from this link: https://www.retrogames.cz/play_711-DOS.php?emulator=jsdos Walkthroughs: https://ttf.mine.nu/walkthroughs.htm Password using DOSBox-pure emulator oct 2026:  1 7D79  2 EBCB  3 FAF2  4 F5E5  5 EBCB  6 D797  7 AF2F  8 5E5F  9 no password in game --> BCBE 10 797D  11 F2FA  12 ? CBEB 13 ? 97D7 14 5F5E Password above based on this calculation below, so if your machine generate different 1st code, you can generate your own password for next level. Level 1 uses rotation 0 (the original value), and level 2 uses rotation 19. Because the value is 16-bit, rotating 16 times brings it back to where it started, so rotating by 19 is the same as rotating by 19 − 16 = 3 bits to the left . Step 1: convert 7D79 to binary (each hex digit becomes 4 bits): 7 D 7 9 0111 1101 0111 1001 Step 2: rotate left by 3 bits. The three leftmost bits ( 011 ) are cut off and attached to the ...

Harvester disk not showing (bug)

Create file /oem/90_fake_scsi_wwn_generator.yaml with this content name: "Add udev rules to generate missing SCSI disk WWNs" stages:     initramfs:         - files:

Harvester 1.7.0 Custom Routes

Because Harvester is an immutable Linux distribution, changes in terminal will be discarded when the server is restarted. Additional config should be written in specific configuration files so it can persist between reboot, including custom route. In previous Harvester version, the configuration can be added in the file inside /oem/ folder. But for version 1.7.0, it should be added using nmcli. Below is the example to add custom route to 192.168.1.0/24 via interface 192.168.0.1

Setup Timezone in Harvester

To apply time zone in harvester node , you need to create yaml file timezone.yaml, with this implementation, harvester node will automatically apply time zone when join the cluster.

Harvester storage using partition

Image
Newer Harvester from 1.3.0 no longer support for partition as main storage, but I found a workaround to use partition rather than whole disk. In this case, I installed harvester in the ssd raid disk and want to spare part of the disk as ssd storage class. After installation, I made the partition using gparted and then use the partition as ssd ctorage class. Here is how to do it. Create file /oem/90_after_install.yaml with this content: name: "fstab related patch" stages: initramfs: - name: "Add ssd mountpoint" commands: - | echo "/dev/disk/by-label/HARV_LH_SSD /var/lib/harvester/ssd auto defaults 0 0" >> /etc/fstab directories: - path: /var/lib/harvester/ssd permissions: 493 owner: 0 group: 0 add label to the partition using this command: e2label /dev/sdg6 HARV_LH_SSD add disk in longhorn using path /var/lib/harvester/ssd

Auto Scale DNS using kubernetes and CI/CD deployment using gitlab

Image
Imagine that your application can automatically add another container to serve more request and delete unused container when requests are declining, with this approach, you can preserve the resources for another application and also decrease the bill for cloud resource usage. With kubernetes, you can achieve this using HPA (Horizontal pod autoscaler) or using vertical autoscaler. But in this tutorial, we will only show how to use HPA. The case for this tutorial is to autoscale DNS to serve approximately thousand users. We need external Load Balancer to forward requests to kubernetes.