| CARVIEW |
Meralco is a utility company. It is not a bank, an e-wallet provider, or a financial institution holding customer funds. The information it needs to protect—customer name, service address, and billing amount—is important, but it does not carry the same risk profile as banking credentials or stored monetary value. The security approach should reflect that difference.
A Bill You Can See but Not Easily Get
When Meralco notifies customers that a monthly bill is available, the notification already displays the bill amount. That means the information is already deemed safe enough to transmit. Despite that, the actual PDF copy of the bill is not included.
To obtain it, customers must log in to the website, navigate through several pages, dismiss pop-ups, and repeat the process for each registered account each month. All this just to download a document that could have been emailed to me in the first place. Encrypt the PDF if you want—I do not care. Just send it.
Login Restrictions That Add Friction, Not Security
The login experience also raises questions about proportionality.
Pasting a password is allowed, but keyboard-based autofill—commonly used by password managers to populate both email address and password—is blocked. This forces manual entry of the email address while offering no meaningful improvement in security. It prevents convenience, not misuse.
Logging in from a different device also requires a one-time password sent to a registered mobile number. This is reasonable for high-risk actions, but for viewing or downloading a bill, it feels misaligned with the nature of the transaction. There are no funds to move—only a balance to view.
Repeating the Same Process, Every Month
For users managing multiple Meralco accounts under one profile, this experience is multiplied. Using the website for account administration is understandable. Being required to go through the same multi-step process every month, for every account, just to download bills is not.
This is a problem with workflow design, not user behavior.
A Simpler, More Balanced Approach
Emailing the monthly bill as a PDF would resolve most of these issues immediately. The website can remain the place for account management and changes. Routine access to a billing document should not require repeated navigation through a heavily restricted interface.
Good digital security should be based on balance—strong where risk is high, and simple where it is not.
]]>| Platform | GitHub Stars | Self-hosted | Focus / Best Use Case |
|---|---|---|---|
| n8n | 159k | Yes |
General-purpose workflow automation with powerful code node. Ideal for complex multi-service automations and ETL tasks. |
| Activepieces | 19.3k | Yes |
Low-code/no-code automation with occasional custom JS support. Good for lighter, simpler workflows. |
| Windmill | 15.2k | Yes |
Developer-centric automation using scripts (Python/TypeScript/Go). Great for internal tools and backend workflows. |
| Automatisch | 13.4k | Yes |
Simplified Zapier-style automation. Best for small, straightforward tasks when ease and self-hosting matter. |
Summary: n8n remains the most powerful and versatile, while Activepieces and Windmill offer lighter or more code-centric alternatives. Automatisch is best if you just need simple self-hosted automations.
]]>The whole ecosystem—themes, plugins, and even the support culture—has turned into a marketplace. Everywhere you go, there’s an upsell. Basic features sit behind paywalls. And if you just want to build a straightforward blog, the experience is frustrating.
Finding a minimalist theme with a clean two-column layout, no widget blocks, no theme blocks, no Gutenberg clutter, and no upgrade prompts used to be easy. Now it feels like searching for something that shouldn’t be rare. Most themes are bloated with builders, bundled features, and aggressive pro-version hooks.
The open-source spirit that made WordPress welcoming has given way to commercial noise. WordPress is still free at its core, but the culture around it has shifted. For someone who simply wants a clean, honest blogging theme, it’s hard not to feel like WordPress has lost its soul.
]]>
Paying bills has never been easier, thanks to the advent of mobile payment solutions like GCash and Maya. However, my recent experience with GCash highlighted a significant issue that needs addressing.
The Issue with Spam SMS
Recently, I was paying for my Globe Postpaid plan and decided to use GCash for the transaction. However, in the past few days, I’ve been inundated with spam marketing SMS from GCash. The frequency and irrelevance of these messages were frustrating, so I decided to block GCash in my Google Messages app.
The Unintended Consequence
When I attempted to pay my bill via GCash, I didn’t receive the OTP (One-Time Password) required to complete the transaction. It quickly dawned on me that GCash was blocked, preventing the OTP from coming through. I unblocked GCash temporarily, but the OTP still took too long to arrive. This delay was unacceptable, especially when trying to complete a time-sensitive transaction.
Switching to Maya
Frustrated by the inconvenience, I turned to Maya for my payment. The process was smooth, and I received the OTP without any issues. This experience was a stark contrast to the one I had with GCash and highlighted a crucial lesson for businesses: customer satisfaction is paramount.
The Impact of Spam SMS
Spam SMS not only annoy customers but can also lead to significant business losses. When customers are overwhelmed with irrelevant messages, they’re likely to block the sender, missing out on important communications like OTPs. This leads to frustration and can drive customers to competitors, as it did in my case.
A Call to Action for Businesses
For businesses utilizing SMS for marketing, it’s crucial to strike a balance. While reaching out to customers is essential, bombarding them with spam can backfire. One effective strategy is to limit marketing messages to a separate account, distinct from the one used for important communications like OTPs. Additionally:
- Opt-in Preferences: Allow customers to choose the type of messages they want to receive.
- Frequency Control: Limit the number of marketing messages sent within a certain period.
- Relevance: Ensure that messages are relevant to the customer’s interests and needs.
Conclusion
My experience underscores the importance of thoughtful and strategic communication with customers. By respecting customer preferences and reducing spam, businesses like GCash can improve customer satisfaction and retain their user base.
In the end, the key takeaway is clear: respect your customers’ communication preferences, or risk losing them to competitors who do.
]]>
In a digital landscape dominated by videos, sometimes simplicity and speed are all you need. Leo Laporte, the Tech Guy, once lamented the frustration of clicking on a video only to wade through minutes of unnecessary intros and prompts to like, subscribe, and hit the bell icon.
Consider scenarios where you’re in a quiet environment or simply prefer to read instructions quickly. Opening a video might not always be practical or preferred. This blog focuses solely on text-based content, ensuring you can access information swiftly and without distraction.
In today’s fast-paced world, efficiency matters more than ever. Whether troubleshooting a tech issue or seeking information, text-based resources offer a streamlined experience. They allow you to dive straight into content, saving time and boosting productivity.
As we navigate a vast sea of online information, the demand for quick, accessible answers continues to grow. Text-based formats complement videos by delivering information promptly and effectively, catering to users who value direct access without unnecessary frills.
In conclusion, this blog is dedicated to text-based content, prioritizing efficiency, clarity, and immediate access to information. Whether you prefer quiet reading or need swift solutions, text-based resources ensure that valuable insights are just a click away.
]]>This behavior can be frustrating, especially if you’re used to seamlessly integrating your browsing experience with your notes. Here’s why this happens and what you can do about it:

Understanding the Issue: Snap Package Peculiarities
Snap packages are known for their sandboxing approach, which aims to enhance security by isolating applications and their dependencies from the rest of the system. While this isolation can be beneficial for security reasons, it also means that applications installed via Snap may behave differently compared to their counterparts installed via other methods like Flatpak or .deb packages.
One notable difference is how Snap handles application interactions with the system, such as opening external links. In the case of Obsidian installed via Snap, opening links from within your notes triggers the opening of your default browser in a separate profile. This ‘Profile 1’ is independent of the profile you typically use for your browsing activities, resulting in a disjointed user experience.
Why You Should Consider Alternatives: Flatpak or .deb
To avoid the inconvenience caused by Snap’s behavior with Obsidian, consider installing the application using alternative methods like Flatpak or downloading the .deb package directly from Obsidian’s official website. Here’s why these alternatives may be preferable:
- Consistent User Experience: Flatpak and .deb packages generally integrate more seamlessly with the Ubuntu desktop environment, preserving your existing browser settings and profiles. When you open links from Obsidian notes, they will launch in your default browser, maintaining your familiar browsing environment.
- Ease of Installation: Installing via Flatpak or .deb is straightforward and ensures that Obsidian behaves predictably within your Ubuntu setup. You won’t encounter the profile switching issue that Snap packages may introduce.
- Community Support and Updates: While Snap packages are officially supported by Canonical (the company behind Ubuntu), Flatpak and .deb packages also receive robust community support and timely updates from Obsidian developers. This ensures you have access to the latest features and fixes without compromising on usability.
Conclusion
While Snap packages offer a convenient way to install applications on Ubuntu, the specific behavior of Obsidian with Snap—opening links in a separate browser profile—can disrupt your workflow. For a smoother and more integrated experience, opting for Flatpak or .deb installation methods is recommended. These alternatives ensure that Obsidian functions seamlessly with your preferred browser settings, avoiding the inconvenience of profile conflicts.
Next time you install Obsidian on your Ubuntu system, consider choosing Flatpak or .deb over Snap to enjoy a cohesive note-taking and browsing experience without unnecessary complications. Your productivity and user satisfaction will thank you for it!
Have you encountered similar issues with Snap packages or found better alternatives for installing applications on Ubuntu? Share your experiences and tips in the comments below!
]]>
Introduction
As we eagerly anticipate the release of “House of the Dragon” Season 2, it’s essential to revisit the intricate and dramatic events of Season 1. The series, a prequel to the acclaimed “Game of Thrones,” plunges us into the tumultuous history of House Targaryen, nearly 200 years before the rise of Daenerys Targaryen. Season 1 masterfully sets the stage for the epic civil war known as the Dance of the Dragons, a conflict that threatens to tear the Targaryen dynasty apart. Through political intrigue, personal betrayals, and spectacular dragon battles, the first season captivates and prepares us for the storm that is about to unfold.
Episode 1: “The Heirs of the Dragon”
The series opens with King Viserys I Targaryen sitting on the Iron Throne. He faces the challenge of naming an heir, as his wife, Queen Aemma, is pregnant. However, both Aemma and their newborn son die during childbirth. This tragedy leaves Viserys with no direct male heir. Amidst this turmoil, the king’s brother, Prince Daemon Targaryen, behaves recklessly. Ultimately, Viserys makes the controversial decision to name his daughter, Princess Rhaenyra, as his heir, despite the precedent of male succession.
Episode 2: “The Rogue Prince”
Daemon seizes control of Dragonstone, escalating tensions within the kingdom. Rhaenyra begins to navigate her role as heir, asserting her presence and leadership. Meanwhile, Viserys is pressured to remarry to secure the line of succession. He shocks the court by choosing Lady Alicent Hightower, Rhaenyra’s close friend, over a more politically advantageous match. This decision strains relationships within the court and sets the stage for future conflicts.
Episode 3: “Second of His Name”
Three years later, Viserys and Alicent’s son, Prince Aegon, celebrates his second birthday, intensifying the succession debate. Meanwhile, the Stepstones conflict rages on, with Daemon and Lord Corlys Velaryon struggling against the Triarchy. Rhaenyra feels increasingly sidelined as the focus shifts to her half-brother, Aegon. Daemon takes matters into his own hands, launching a daring and brutal attack that leads to a significant victory, solidifying his reputation as a formidable warrior.
Episode 4: “King of the Narrow Sea”
Daemon returns to King’s Landing, proclaiming himself the “King of the Narrow Sea” after his victories. His relationship with Rhaenyra becomes more complicated as he introduces her to the city’s more unsavory elements. Their night out leads to scandal, as rumors of impropriety spread. To mitigate the fallout, Viserys hastily arranges Rhaenyra’s betrothal to Ser Laenor Velaryon. Tensions continue to rise as old alliances are tested and new ones are formed.
Episode 5: “We Light the Way”
Preparations for Rhaenyra and Laenor’s wedding bring various factions to King’s Landing. The celebration is marred by violence when Ser Criston Cole, a knight who has formed a close bond with Rhaenyra, kills Laenor’s lover, Ser Joffrey Lonmouth, in a fit of rage. This incident heightens the already simmering tensions and casts a shadow over the marriage. Alicent begins to assert her influence more openly, setting the stage for future power struggles.
Episode 6: “The Princess and the Queen”
A significant time jump reveals Rhaenyra and Laenor have had children, though rumors persist about their true parentage. Alicent and Rhaenyra’s rivalry deepens as their respective factions vie for influence. The growing tension between the two women is mirrored by the escalating conflict over the succession. The seeds of civil war, known as the Dance of the Dragons, are sown as the kingdom begins to fracture along these fault lines.
Episode 7: “Driftmark”
The death of Laena Velaryon brings the families together at Driftmark, leading to confrontations and alliances. A violent clash ensues when Alicent’s son, Aemond, claims the dragon Vhagar, leading to a fight with Rhaenyra’s sons that results in Aemond losing an eye. The conflict between the families intensifies, with both sides accusing the other of treachery. Viserys struggles to maintain peace, but the divisions run deep.
Episode 8: “The Lord of the Tides”
Viserys’s health continues to decline, and the question of succession becomes more urgent. The Velaryons seek to secure their position by proposing marriages between their children and Rhaenyra’s. Alicent’s faction, however, maneuvers to place Aegon in a more favorable position. The political intrigue reaches new heights as both sides prepare for the inevitable clash over the Iron Throne.
Episode 9: “The Green Council”
Upon King Viserys’s death, Alicent and her father, Otto Hightower, swiftly move to place Aegon on the throne, circumventing Rhaenyra’s claim. This power grab, known as the Green Council, sets the stage for open conflict. Rhaenyra, unaware of her father’s death, is vulnerable, and her supporters scramble to consolidate their positions. The kingdom teeters on the brink of civil war as the rival factions prepare for battle.
Episode 10: “The Black Queen”
Rhaenyra learns of her father’s death and Alicent’s betrayal. Enraged and determined to claim her birthright, she declares herself queen and begins rallying her supporters. Daemon and Rhaenyra gather their forces, securing key alliances with the Velaryons and other powerful houses. The first major battle of the civil war erupts, marking the beginning of the Dance of the Dragons. The season ends with a sense of foreboding, as the realm braces for the bloody conflict ahead.
Final Thoughts
Season 1 of “House of the Dragon” not only reintroduces us to the grandeur and complexity of George R.R. Martin’s world but also lays a compelling foundation for the conflicts to come. The detailed character arcs and escalating tensions between key players like Rhaenyra Targaryen, Alicent Hightower, and Daemon Targaryen hint at the epic scale of the battles ahead. As alliances shift and rivalries deepen, the stakes are higher than ever for the Iron Throne. With Season 2 on the horizon, fans can expect even more dramatic twists, fierce power struggles, and breathtaking moments as the Dance of the Dragons truly begins. Prepare for a season that promises to be as thrilling and unpredictable as its predecessor.
HBO Max subscribers and Plex users alike can start streaming “House of the Dragon” Season 2 on June 16, 2024, at 9 p.m. ET, which is June 17, 2024, at 9 a.m. PHT for viewers in the Philippines. Each episode will be released weekly, with the season consisting of eight episodes in total.
]]>- Primary Key Columns: When you create a list, SharePoint automatically indexes the primary key column (ID field) for faster retrieval.
-
Unique Columns: Columns marked as unique are automatically indexed to enforce uniqueness.
-
Lookup Columns: Columns used as lookup columns in other lists are automatically indexed to optimize lookup queries.
-
Managed Metadata Columns: SharePoint automatically indexes managed metadata columns to enhance performance when filtering or sorting by these columns.
-
Indexed Columns in Views: Columns included in indexed views are automatically indexed to improve view performance.
-
Indexed Columns in Large Lists: In large lists, SharePoint automatically indexes frequently used columns to improve performance.
-
Date and Time Columns: Columns with date and time data types are automatically indexed to optimize date-based queries.
These automatic indexing features help improve performance and efficiency in SharePoint lists and libraries.
]]>
For analysts and investors like myself who require historical NAVpUs for deeper analysis, it would be ideal to have an API or a JSON format feed for seamless data retrieval. Unfortunately, TOAP has not yet provided such a feature, which adds a layer of complexity to data collection.

To address this gap, I have developed a PHP script that automates the downloading of these pages from various banks and financial institutions daily. The script then saves the data in JSON format on a server, making it readily accessible. Currently, I’ve focused on banks where I have UITF accounts (BPI, BDO, MBTC, RCBC, and SBC), but this can be expanded based on utility and demand.
If you find this approach useful, you are welcome to use the script and download the CSV file provided below. This solution aims to streamline the data collection process, ensuring you have the necessary information at your fingertips without manual intervention.
[navpu_download_button]
Stay tuned for updates and enhancements to this tool. Let’s make data access easier and more efficient for everyone involved in financial analysis.
What to do with the downloaded CSV file?
You may want to use Power Query to download the CSV file, which should look a lot like below:

Then, in Excel or Power BI’s Power Query, in a blank query enter the following:
let
Source = Csv.Document(Web.Contents("https://deuts.net/2024/06/uitf-historical-navpu-data-making-them-readily-accessible/?download"),[Delimiter=",", Columns=3, Encoding=65001, QuoteStyle=QuoteStyle.None]),
PromoteHeaders = Table.PromoteHeaders(Source, [PromoteAllScalars=true]),
ChangeType = Table.TransformColumnTypes(PromoteHeaders,{{"Date", type date}, {"Bank", type text}, {"URL", type text}}),
AddData = Table.AddColumn(ChangeType, "Data", each fnnavpuperbank([URL],[Date],[Bank])),
CombineData = Table.Combine(AddData[Data])
in
CombineData
Note that in line 5 of the script, it calls for a function fnnavpuperbank. Therefore, let’s create that function, create a query of the same name from blank, and enter the following:
let
Source = (JsonURL as text, UITFDate as date, UITFBank as text) => let
Source = Json.Document(Web.Contents(JsonURL)),
TableFromList = Table.FromList(Source, Splitter.SplitByNothing(), null, null, ExtraValues.Error),
ExpandCol1 = Table.ExpandListColumn(TableFromList, "Column1"),
ExpandRecords = Table.ExpandRecordColumn(ExpandCol1, "Column1", {"Fund Name", "NAVpu", "ROI-YOY%", "ROI-YTD%"}, {"Fund Name", "NAVpu", "ROI-YOY%", "ROI-YTD%"}),
FilterNulls = Table.SelectRows(ExpandRecords, each ([Fund Name] <> null)),
DeleteAsOfs = Table.TransformColumns(FilterNulls, {{"NAVpu", each Text.BeforeDelimiter(_, "*"), type text}}),
ChangeType = Table.TransformColumnTypes(DeleteAsOfs,{{"Fund Name", type text}, {"NAVpu", type number}, {"ROI-YOY%", type number}, {"ROI-YTD%", type number}}),
AddBank = Table.AddColumn(ChangeType, "Bank", each UITFBank, type text),
AddDate = Table.AddColumn(AddBank, "Date", each UITFDate, type date),
RemoveErrors = Table.RemoveRowsWithErrors(AddDate, {"Fund Name", "NAVpu", "ROI-YOY%", "ROI-YTD%"})
in
RemoveErrors
in
Source
As soon as you load the table to the worksheet (in the case of Excel) or in the Data Model, you’ll have the different funds for all those banks.
]]>
Yes