Hi everyone!
I have been secretly working on improving SteemWatch, the notification center for Steem. I gave it as much time as I could, provided that I have a regular job and a girlfriend I need (and want) to attend to :-)
For Users
There are no new features deployed, but the changes on the back-end that I am working on will lead to some of the long awaited features to arrive, eventually. Particularly I am making the whole block processing subsystem modular and more scalable and I want to split it away from the main SteemWatch application as deployed today. This should for example enable me to split content published events into content created and content updated. It's not that it would be impossible to implement now, but I would like to introduce a separate service for every non-trivial piece of logic.
I also started using Telegram, so it is possible that it will push myself to write a Telegram bot and notifier sooner that expected :-)
For Developers AKA Technical Details
I started rewriting SteemWatch from scratch using a brand new repository. Although I consider this monorepo internal to SteemWatch in the way that I am not going to try to keep the package APIs stable at all cost, but there are definitely certain packages and components that could be interesting for people outside.
I should note that everything that follows is relevant for steemwatch@13f645db8fda69f588fa617bd2fe10390d1f0464.
Block Processor
The executable stored in cmd/block_processor
processes block operations as stored on the blockchain and forwards them to a NATS Streaming channel, encoded using Protocol Buffers. It uses at-least-once delivery semantics, i.e. every block is processed at least once.
block_processor
also uses get_ops_in_block
instead of get_block
, so SteemWatch is ready to potentially start processing virtual operations as well and turn them into events that are emitted.
Anybody can run this component as a standalone service in their own infractucture.
Protocol Buffers for Steem
This leads me to the package that can be found in pkg/pb/steempb
. It contains Protocol Buffers definitions for blockchain operations and such along with the code generated for Go.
Again, anybody can re-use these definitions and get Protocol Buffers definitions for free. It was pretty annoying to write it all, so spare yourself the suffering and use it!
Mock steemd RPC Endpoint for Testing
When implementing block_processor
, I decided that I am going to do things properly, i.e. write some test. So I implemented a simple end-to-end test. While doing so, I ended up implementing a simple testing package for mocking the steemd
RPC endpoint. The package can be found in pkg/testing/steem
, and this is how it looks like when you want to mock some database_api
RPC method handlers:
// This is github.com/go-steem/rpc/apis/database.
db := database.NumbericAPIID
server.HandleRPC(db, "get_config",
func(apiID int, method string, args []*json.RawMessage) (interface{}, error) {
return map[string]interface{}{
"STEEMIT_BLOCK_INTERVAL": 1,
}, nil
})
server.HandleRPC(db, "get_dynamic_global_properties",
func(apiID int, method string, args []*json.RawMessage) (interface{}, error) {
return map[string]interface{}{
"last_irreversible_block_num": 1,
}, nil
})
The mock service being used for block_processor
, which is a complete example, can be found in cmd/block_processor/tests/steemd
.
Summary
I am personally pretty excited to start playing with a better architecture and interesting technologies. The changes introduced open new possibilities for the future, even though they are pretty invisible to the regular users.
What is Next?
The next step is to implement the service that consumes messages as generated by block_processor
and turns them into events as you know from SteemWatch. I am planning to implement this service so that it keeps the whole user settings context in memory. The current implementation consults the database for every event being emitted to check whether there are any users interested, which is pretty slow and inefficient, particularly because it is impossible to create the necessary indexes in MongoDB. I would like to keep it in memory and reload only when users modify their settings through the web app.
Support
No need to send money, spread the word about SteemWatch (e.g. resteem) and use it yourself!
Great to see that people behind the steemWatch are working on new topics. Just started to use it today, as I like the idea to have custom notifications from steemit.
Yet I'm very new, but I hope to have a great experience with your app!
Is there a way to sign in using just email?
All I saw was facebook, gplus, etc.
Thanks!
Not as of now, but if it is totally blocking you, I will think about implementing it. I skipped it at the beginning because it is takes longer to implement that the single sign-on solutions.
I am thinking about using Auth0 for SteemWatch 2.0, though, where this should be automatically available.
Thanks! I really didnt want to give out my other credentials.
You don't give out any credentials, that is the point of single sign-on. You are authenticated against your account in e.g. Google, but SteemWatch only gets your email, not your credentials. The authentication step is delegated to Google.
My vote is worth shit, but I have resteemed to 5k people.
Thanks a lot :-)
I'd love the services to be accessible through some Telegram bot. I love Telegram a lot. Although I use Noteefi bot to get alerts for replies & mentions and to keep track of some tags but I miss the notifications for follows & unfollows in it. I don't feel much comfortable with discord as it consumes a lot more data compared to Telegram and Telegram seems quicker too. So I'd appreciate if you can make a Telegram bot on priority.
Thanks a lot for all you do for us!
Telegram is now available. Just visit SteemWatch and configure it. I have just finished implementing it and I will announce it on Monday or Tuesday. Discord bot is on the way as well.
Thank you for this!
For the past whole week, I tried to access your website without any success. It keeps on loading and now it says:
502 Bad Gateway.
It would have been more convenient if you had posted your Telegram link here itself instead of making it so tiresome to access it. Hope it's working fine.
All the best to your project!
Fixed.
Thanks! Now initiated your Telegram Bot.
Althoogh you fixed the 502 Gateway issue, your website takes a lot of time to load and sometimes it doesn't load at all! The event stream is still showing up 502 error sometimes or "SteemWatch is loading ..." revolving animated circle" at other times. When loaded, it constantly fluctuate between Connecting, Connected & Disconnected mode showing up nothing else. I'd love if all Events settings could be done over your Telegram bot itself. So that I don't need to visit your website for these.
I've just connected to Telegram Bot (after your reply here) and despite some activity I'm yet to get any notification there.
And I couldn't find any option to get the notifications for "Reblogs". Is this feature not available yet?
Thank you for all your time & effort!
Yeah, well, there are issue that need to be resolved. I am doing SteemWatch in my spare time, so I don't have too much time for fixing issues and adding new things. Right now it is having some scalability issues that I am going to address next before doing anything else.
No, there are no notifications for reblogs yet. Created https://github.com/tchap/steemwatch/issues/42 in case I have time to implement it at one point in the future.
I also tried to integrate Steemit Chat but after providing my credentials, I get the following error message:
Error: 401 { "status": "error", "message": "Unauthorized" }
What does that mean?
That the credentials you provided for your Steemit Chat account were invalid.
Hi void, I'm resteeming this because I love this app. I spoke to you a few months ago about integrating steemwatch with discord the same way it is with slack. I think our steemit.chat messages got deleted but there was a github link you shared with me I think. Maybe it was a pull request. (I'm not a developer and wouldn't have understood what I was looking at anyway)
I would love to see this on telegram but was wondering if you are going to make it work on discord. If not, telegram is good enough for me but you might have noticed there is a huge steem community now using discord to stay connected with steemians.
Telegram is available now, just go to SteemWatch and enable it. Working on Discord right now. Will write an announcement on Monday or Tuesday.
Discord is also available as a notifier now ;-)
I am kinda fighting with either fixing SteemWatch, which is not implemented in a great way, or adding new features. I will try to keep these two things balanced, so I will try to get to adding new notifiers rather sooner than later. That is all I can say right now.
Is anybody else experiencing the "502 Bad Gateway" error on steemwatch.com?
It happens occasionally. The current version was written pretty quickly and not really optimally, so please bear with occasional failures until I rewrite it into something better.
Congratulations @void! You have completed some achievement on Steemit and have been rewarded with new badge(s) :
Click on any badge to view your own Board of Honor on SteemitBoard.
For more information about SteemitBoard, click here
If you no longer want to receive notifications, reply to this comment with the word
STOP