• November 29, 2021, 04:15:10 pm

Author Topic: Add WebBot to your Bot  (Read 9707 times)

Scope

  • Founder
  • Main Administrator
  • Hero Member
  • *******
  • Posts: 3,143
    • BnetWeb
Add WebBot to your Bot
« on: August 29, 2010, 07:29:29 pm »
To add WebBot to your Bot, it's as simple as passing a URL to the server. I will provide some examples of doing this in a post below. WebBot works by taking the URL you send, and parsing it into the proper WebChannel with the correct formatting. Using Battle.net's 0x0F ID's, we assign a function to each (with a few extras). Here are the URL parameters needed for each event:

* = Required parameter | Output = What WebBot displays/returns using example URL

Do these events before (or while) the bot is connecting

First, we need to make sure the UserID is created for the WeBot. Do so by passing the URL:
Do this when the user opens the bot. If the UserID already exists the script will ignore this request. If it doesn't it will be created.
Code: [Select]
http://api.bnetweb.org/webbot.php?u=scope&p=test&f=99
Quote
*u = UserID
*p = Password
*f = Function (99)

Output:
If UserID was created:
Successfully created UserID {UserID}

If UserID exists and password is invalid:
Invalid Password

If UserID + Password match:
OK


Set the server the bot is on
Code: [Select]
http://api.bnetweb.org/webbot.php?u=scope&p=test&f=10&s=useast.battle.net
Quote
*u = UserID
*p = Password
*f = Function (10)
*s = Server


Set the version the bot is on
Code: [Select]
http://api.bnetweb.org/webbot.php?u=scope&p=test&f=15&v=MyBot+v1.0
Quote
*u = UserID
*p = Password
*f = Function (15)
*v = Version

Output
Powered by: MyBot v1.0



Battle.net 0x0F Event ID's
0x13 - Error Messages
The script will prefix your text with ERROR:
Code: [Select]
http://api.bnetweb.org/webbot.php?u=scope&p=test&f=0&d=12:00+PM&t=This+is+an+error+message
Quote
*u = UserID
*p = Password
*f = Function (0)
*d = Date
*t = Text

Output
[12:00 PM] ERROR: This is an error message


0x12 - Information Messages
The script will prefix your text with INFO:
Code: [Select]
http://api.bnetweb.org/webbot.php?u=scope&p=test&f=1&d=12:00+PM&t=This+is+an+information+message
Quote
*u = UserID
*p = Password
*f = Function (1)
*d = Date
*t = Text

Output
[12:00 PM] INFO: This is an information message


0x07 - You Enter a Channel
Code: [Select]
http://api.bnetweb.org/webbot.php?u=scope&p=test&f=2&d=12:00+PM&ch=Clan+vA
Quote
*u = UserID
*p = Password
*f = Function (2)
*d = Date
*ch = Channel

Output
[12:00 PM] Joined Channel: Clan vA


0x01 - Users Already in Channel
You can send this method in one URL, by using a space-delimited string.
Code: [Select]
http://api.bnetweb.org/webbot.php?u=scope&p=test&f=18&user1=Scope+47+STAR+0+10&user2=Pianka+31+D2DV+0&user3=MP3+16+WAR3+1+vA+W3R1
Quote
Here you will build the URL and use "user1" through "user50" (if required) to populate the channel list in a single URL. You use a space to split each string, so for example.
*u = UserID
*p = Password
*f = Function (18)
*user1 = Scope 47 STAR 0 (null) 10(Username Ping Client Flags (no clan tag) Icon)
user2 = MP3 16 WAR3 1 vA W3R1 (Username Ping Client Flags ClanTag Icon)

If you don't need a clan tag, insert a space in that position, or the icon you choose will go in its place. I see no better way of doing this at the moment

If you choose to set the icon, it follows the statstring of the product. (i.e. for WAR3/W3XP, uses W3R1, W3N1, W3N2, etc. For STAR/SEXP/W2BN just send the wins section of the statstring.

So each parameter will have 5 pieces of information. (i.e. if clan tag does not apply, then leave blank or insert a null string)
Format of each &user1, user2, user3, user4, etc MUST be (Username, Ping, Client, Flags, ClanTag Icon) using a space or a "+" to separate each part.


0x02 - User Joins Channel
Here we have two options, send the function that displays a join notification, or the one that doesn't.
Code: [Select]
This URL will display a join notification
http://api.bnetweb.org/webbot.php?u=scope&p=test&f=4&d=12:00+PM&n=Scope&cl=STAR&pi=47&fl=0&ch=Clan+vA&ct=vA&e=using+Starcraft.
Quote
*u = UserID
*p = Password
*f = Function (4)
*d = Date
*n = Username
*cl = Client (4 letter abbreviation, STAR, D2DV, etc)
*pi = Ping
*fl = Flags (0 = normal, 1 = operator)
*ch = Channel
ct = Clan Tag (optional parameter)
i = Icon (optional parameter)
e = Extra (optional parameter)

Output
[12:00 PM] Scope has joined the channel using Starcraft.

Code: [Select]
This URL will NOT display a join notification
http://api.bnetweb.org/webbot.php?u=scope&p=test&f=3&d=12:00+PM&n=Scope&cl=STAR&pi=47&fl=0
Quote
*u = UserID
*p = Password
*f = Function (3)
*d = Date
*n = Username
*cl = Client (4 letter abbreviation, STAR, D2DV, etc)
*pi = Ping
*fl = Flags (0 = normal, 1 = operator)
ct = Clan Tag (optional parameter)
i = Icon (optional parameter)


0x03 - User Leaves Channel
Here we have two options, send the function that displays the leave notification, or the one that doesn't.
Code: [Select]
This URL will display a leave notification
http://api.bnetweb.org/webbot.php?u=scope&p=test&f=16&d=12:00+PM&n=Scope&e=using+Starcraft.
Quote
*u = UserID
*p = Password
*f = Function (16)
*d = Date
*n = Username
e = Extra (optional parameter)

Output
[12:00 PM] Scope has left the channel using Starcraft.

Code: [Select]
This URL will NOT display a leave notification
http://api.bnetweb.org/webbot.php?u=scope&p=test&f=5&d=12:00+PM&n=Scope
Quote
*u = UserID
*p = Password
*f = Function (5)
*d = Date
*n = Username


0x04 - You Receive a Whisper
Code: [Select]
http://api.bnetweb.org/webbot.php?u=scope&p=test&f=6&d=12:00+PM&fr=Scope&t=This+is+a+test+whisper
Quote
*u = UserID
*p = Password
*f = Function (6)
*d = Date
*fr = From
*t = Text

Output
[12:00 PM] «From: Scope» This is a test whisper


0x0A - You Send a Whisper
Code: [Select]
http://api.bnetweb.org/webbot.php?u=scope&p=test&f=7&d=12:00+PM&to=Scope&t=I+sent+a+whisper
Quote
*u = UserID
*p = Password
*f = Function (7)
*d = Date
*to = To
*t = Text

Output
[12:00 PM] «To: Scope» I sent a whisper


0x05 - User Talks (Normal Chat)
Here we have 2 options. A normal chat function and a self-chat function. Both work exactly the same, except self-chat will color the username differently (easier to distinguish when the WebBot talks)
Code: [Select]
This is the normal chat function. This will be uniform whenever the bot receives a normal chat message.
http://api.bnetweb.org/webbot.php?u=scope&p=test&f=8&d=12:00+PM&n=Scope&t=This+is+normal+chat
Quote
*u = UserID
*p = Password
*f = Function ( 8 )
*d = Date
*n = Username
*t = Text

Output
[12:00 PM] «Scope» This is normal chat


Code: [Select]
This is the self-chat function. This will color the username a shade of blue. Use this when your bot sends a message.
http://api.bnetweb.org/webbot.php?u=scope&p=test&f=19&d=12:00+PM&n=Scope&t=This+is+normal+chat
Quote
*u = UserID
*p = Password
*f = Function (19)
*d = Date
*n = Username
*t = Text

Output
[12:00 PM] «Scope» This is normal chat


0x17 - User Talks (Emote Chat)
Code: [Select]
http://api.bnetweb.org/webbot.php?u=scope&p=test&f=9&d=12:00+PM&n=Scope&t=This+is+emote+chat
Quote
*u = UserID
*p = Password
*f = Function (9)
*d = Date
*n = Username
*t = Text

Output
[12:00 PM] «Scope This is emote chat»


0x09 - Flag Update (Ops Update)
Code: [Select]
http://api.bnetweb.org/webbot.php?u=scope&p=test&f=12&n=Scope
Quote
*u = UserID
*p = Password
*f = Function (12)
*n = Username



WebBot Specific Functions
Clearing specific (or all) areas of the WebBot.
Code: [Select]
http://api.bnetweb.org/webbot.php?u=scope&p=test&f=11&c=clr+all
Quote
*u = UserID
*p = Password
*f = Function (11)
*c = Clear Event
  • clr all = Clear Everything (chat, channel, version, server, send queue)
  • clr chat = Clear Chat Screen
  • clr channel = Clear Channel Screen
  • clr server = Clear Server
  • clr poweredby = Clear Powered By
  • clr send = Clear Send Queue


Retrieving messages from the send queue
Code: [Select]
Notice this is index.php, NOT webbot.php
http://webbot.bnetweb.org/index.php?getchat=scope&p=test
Quote
*getchat = UserID
*p = Password

Output (if any messages are queued)
Message 1
Message 2
Message 3

The WebBot will return every queued message for that UserID. Split the results by a new line. After you request the queued messages, all existing queued messages are deleted. It is wise to only request messages every 5-10 seconds to avoid server IPBan.


Adding a Chat Message only the WebBot will see
This is similar to many bots "AddChat" function.
Code: [Select]
http://api.bnetweb.org/webbot.php?u=scope&p=test&f=17&color=red&t=This+text+will+be+red
Quote
*u = UserID
*p = Password
*f = Function (17)
color = Color of Text (optional parameter, will be white if not set) [Must be valid HTML/CSS color (red, green, blue, #FFFFFF, #000000, etc)]
*t = Text

Output
»» This text will be red
« Last Edit: April 04, 2011, 12:56:55 am by Scope »

"Capitalization is the difference between helping your Uncle Jack off a horse and helping your uncle jack off a horse."

Scope

  • Founder
  • Main Administrator
  • Hero Member
  • *******
  • Posts: 3,143
    • BnetWeb
Re: Add WebBot to your Bot
« Reply #1 on: August 29, 2010, 07:29:50 pm »
Reserved for code examples.

"Capitalization is the difference between helping your Uncle Jack off a horse and helping your uncle jack off a horse."

K i n g o f K i n g s

  • Hero Member
  • *******
  • Posts: 2,945
Re: Add WebBot to your Bot
« Reply #2 on: August 29, 2010, 07:36:47 pm »
Do you have an intention of making a plugin for l2chat for this?

In most countries selling harmful things like drugs is punishable. How come people can sell Microsoft software and go unpunished?
The Linux philosophy is "laugh in the face of danger". Oops. Wrong one. "Do it yourself". That's it.
Going from Windows to Linux is like trading a glider for an F117.

Scope

  • Founder
  • Main Administrator
  • Hero Member
  • *******
  • Posts: 3,143
    • BnetWeb
Re: Add WebBot to your Bot
« Reply #3 on: August 29, 2010, 07:37:25 pm »
Do you have an intention of making a plugin for l2chat for this?

Yes, soon. I am about to release a script for StealthBot for all those skiddies as well.

"Capitalization is the difference between helping your Uncle Jack off a horse and helping your uncle jack off a horse."

K i n g o f K i n g s

  • Hero Member
  • *******
  • Posts: 2,945
Re: Add WebBot to your Bot
« Reply #4 on: August 29, 2010, 07:38:12 pm »
Do you have an intention of making a plugin for l2chat for this?

Yes, soon. I am about to release a script for StealthBot for all those skiddies as well.
Shame shame. good ur adding it to l2 tho

In most countries selling harmful things like drugs is punishable. How come people can sell Microsoft software and go unpunished?
The Linux philosophy is "laugh in the face of danger". Oops. Wrong one. "Do it yourself". That's it.
Going from Windows to Linux is like trading a glider for an F117.

Myst

  • BotMaster
  • Hero Member
  • *******
  • Posts: 772
  • Clan Null - Op 0x00
    • DarkBlizz
Re: Add WebBot to your Bot
« Reply #5 on: August 29, 2010, 09:14:20 pm »

Warden

  • Hero Member
  • *******
  • Posts: 1,745
  • BNTA Admin
    • Battle.net Terrorist Alliance
Re: Add WebBot to your Bot
« Reply #6 on: August 29, 2010, 09:26:20 pm »
I had intended to code a website that would have further utilized the Webbot using Server Side Scripts and, PHP/MySQL but due to some limitations I scrapped the project.

I can't remember every detail of my intended project but this topic should jog my memory and, I will add details later.

ben_fb

  • Addict
  • *****
  • Posts: 246
Re: Add WebBot to your Bot
« Reply #7 on: August 30, 2010, 01:42:47 pm »
Do you have an intention of making a plugin for l2chat for this?

Yes, soon. I am about to release a script for StealthBot for all those skiddies as well.
Shame shame. good ur adding it to l2 tho

You should have shadow right the plugin for his own bot in my opinion. He's still around right?

Also what would you recommend for calling these url entries? Winsock would work except it closes the socket automatically after each send.

PS: Don't even think about saying inet ^^

Also what is there to tell the site we are disconnected or other misc things. perhaps add a universal message option where the bot owner can add misc things.
« Last Edit: August 30, 2010, 01:49:45 pm by ben_fb »

Myst

  • BotMaster
  • Hero Member
  • *******
  • Posts: 772
  • Clan Null - Op 0x00
    • DarkBlizz
Re: Add WebBot to your Bot
« Reply #8 on: August 30, 2010, 02:56:31 pm »
I'm using inet atm, and its pretty horrid

Scope

  • Founder
  • Main Administrator
  • Hero Member
  • *******
  • Posts: 3,143
    • BnetWeb
Re: Add WebBot to your Bot
« Reply #9 on: August 30, 2010, 03:18:26 pm »
Winsock is what I am using for my current procedures. I know there is a way to initiate a KeepAlive socket request to the server which is what the current BnetWeb WebBot utilizes, but unsure of how it works entirely.

As for telling the server you are disconnected, send the clr all (function 11) URL. It is the last example in my original post. I can however add another function that can add messages, sort of like a WebBot AddChat, if you believe it can be of use.

"Capitalization is the difference between helping your Uncle Jack off a horse and helping your uncle jack off a horse."

ben_fb

  • Addict
  • *****
  • Posts: 246
Re: Add WebBot to your Bot
« Reply #10 on: August 30, 2010, 06:33:10 pm »
When I get the time I will whip up an example of how to connect a keep-alive for your webbot, and perhaps you can reference it in the original post.

Scope

  • Founder
  • Main Administrator
  • Hero Member
  • *******
  • Posts: 3,143
    • BnetWeb
Re: Add WebBot to your Bot
« Reply #11 on: August 30, 2010, 06:33:56 pm »
When I get the time I will whip up an example of how to connect a keep-alive for your webbot, and perhaps you can reference it in the original post.

Most definitely. Yea I reserved the second post for code examples.

"Capitalization is the difference between helping your Uncle Jack off a horse and helping your uncle jack off a horse."

ben_fb

  • Addict
  • *****
  • Posts: 246
Re: Add WebBot to your Bot
« Reply #12 on: August 30, 2010, 10:19:58 pm »
I have bad news for you Scope...

Using the code below:
Code: [Select]

Dim HostMessage As String
Dim ModMessage As String
Dim MyBot As String

Private Sub Command1_Click()
    Winsock.Close
    Winsock.Connect "webbot.bnetweb.org", 80
End Sub

Private Sub Form_Load()
    MyBot = "Alpha & Omega -- Webbot Routine" 'name of the browser, you can use anything
    HostMessage = " HTTP/1.1" & vbCrLf
    HostMessage = HostMessage & "Host: webbot.bnetweb.org" & vbCrLf
    HostMessage = HostMessage & "User-Agent: " & MyBot & vbCrLf
    HostMessage = HostMessage & "Keep-Alive: 70" & vbCrLf
    HostMessage = HostMessage & "Connection: Keep-Alive" & vbCrLf & vbCrLf 'this call shouldnt be needed any more, pretty sure its defect since http 1.1
End Sub
Private Sub Winsock_Connect()
    ModMessage = "GET /webbot.php?u=scope&p=test&f=99"
    'this message is used to apply data to the webbot, this is the example scope gave.
    Winsock.SendData ModMessage & HostMessage
End Sub
Note I am asking the connection to stay for 70 seconds before timing out. I have tried different protocols, including what I believe your server is, apache 2.0 -- however, your default apache settings are taking over. I should not even have to send keep-alive as it is supposed to default unless otherwise specified. Your server is consistently dropping the connection after 5 seconds of replying to the GET, which is the default keepalive for apache. If you don't send data within 5 seconds you are booted, if you do send data within 5 seconds your connection stays. however, you are limited to doing this 100 times per connection.

I suspect you may have to change your apache settings Scope.. but if you raise the keep alive value and clients dont close their connection they will consume a connection slot until the timeout sets in.
« Last Edit: August 30, 2010, 10:24:00 pm by ben_fb »

ben_fb

  • Addict
  • *****
  • Posts: 246
Re: Add WebBot to your Bot
« Reply #13 on: August 31, 2010, 09:53:38 am »
I rewrote the routines to something that will work should the server refuse the keep-alive request...

You will need:
-- Winsock Control (Named Winsock1)
-- Listbox (Named List1)
-- Textbox (Named Text1, with multi-line enabled)

All you have to do is add entries to the end of your listbox. IE: "List1.Additem "Hi!" and then call TransferData
TransferData will handle everything if the bot is not already connected.
Code: [Select]
Private Sub ConnectWebbot()
    AddText "Connecting"
    Winsock1.Close
    Winsock1.Connect "webbot.bnetweb.org", 80
End Sub
'issues a connect to the server

Private Function BuildSend(ByRef theData As String, ByRef PostMethod As Boolean) As String
Dim myBot As String

    myBot = "Alpha & Omega -- Webbot"
    '
    If PostMethod Then
        BuildSend = "POST /webbot.php HTTP/1.1" & vbCrLf & _
        "User-Agent: " & myBot & vbCrLf & _
        "Host: webbot.bnetweb.org" & vbCrLf & _
        "Content-Type: application/x-www-form-urlencoded" & vbCrLf & _
        "Content-Length: " & Len(theData) & vbCrLf & _
        "Connection: Keep-Alive" & vbCrLf & _
        "cache-Control: no-cache" & vbCrLf & vbCrLf & theData
    Else
    'use GET rather than POST
        BuildSend = "GET /webbot.php?" & theData & " HTTP/1.1" & vbCrLf & _
        "User-Agent: " & myBot & vbCrLf & _
        "Host: webbot.bnetweb.org" & vbCrLf & _
        "Connection: Keep-Alive" & vbCrLf & vbCrLf
    End If
   
End Function
'inserts an entry

Private Sub AddText(ByRef theText As String)
    Text1.Text = Text1.Text & theText & vbCrLf
    Text1.SelLength = Len(Text1.Text)
End Sub
'just for testing

Private Sub Winsock1_Connect()
   
    AddText "Connected"
    '
    Dim myWebAccount As String, myWebPass As String
    myWebAccount = "testname"
    myWebPass = "testpass"
    'change to appropriate values
    Dim connectData As String
    connectData = "u=" & myWebAccount & "&p=" & myWebPass & "&f=99"
    'set the account creation string
    If List1.List(0) <> connectData Then List1.AddItem "u=" & myWebAccount & "&p=" & myWebPass & "&f=99", 0
    'since the first thing we want to send upon a connect is to create the account, we add it to the start
    'of the list. to prevent excessive sends of this we check to make sure its not already added before doing so.
    'i suggest you verify that the account is created once and skip this step to save bandwidth
    TransferData
    'issue the send of data
   
End Sub

Private Sub TransferData()
   
    Do Until List1.ListCount = 0
    'clear out our data
        If Winsock1.State = 7 Then
        'winsock is connected, send request
            Winsock1.SendData BuildSend(List1.List(0), False)
            'send
            List1.RemoveItem 0
            'remove entry
        Else
            ConnectWebbot
            Exit Sub
        End If
    Loop
   
End Sub
'Sends the data to the server

Private Sub Winsock1_DataArrival(ByVal bytesTotal As Long)
Dim theData As String
   
    Winsock1.GetData theData
    AddText theData

End Sub
'this isnt really needed, just debugging
« Last Edit: August 31, 2010, 10:23:18 am by ben_fb »

кηιgнтяι∂єя

  • Funny huh?
  • Hero Member
  • *******
  • Posts: 1,583
  • Clan RaGe
    • .::Clan RaGe::.
Re: Add WebBot to your Bot
« Reply #14 on: August 31, 2010, 06:30:33 pm »
release source of webbot already :D


ben_fb

  • Addict
  • *****
  • Posts: 246
Re: Add WebBot to your Bot
« Reply #15 on: August 31, 2010, 07:19:13 pm »
release source of webbot already :D

he showed me the source to it and I mimicked what he said, the connection still didn't last. doesnt really matter though my method works pretty good, except im porting it to an array on my bot. you're welcome to view the source when i am done.

кηιgнтяι∂єя

  • Funny huh?
  • Hero Member
  • *******
  • Posts: 1,583
  • Clan RaGe
    • .::Clan RaGe::.
Re: Add WebBot to your Bot
« Reply #16 on: August 31, 2010, 08:19:19 pm »
mmmmmmmmmmmmmmmmmmmmmmkk


ben_fb

  • Addict
  • *****
  • Posts: 246
Re: Add WebBot to your Bot
« Reply #17 on: August 31, 2010, 08:44:52 pm »
http://webbot.bnetweb.org/ben_fb.west.html

Mine is up. I still haven't made it support join and leaves yet but it will soon.  I just have to make sure they won't consume a lot of bandwidth for both the bot or the server. It will be so efficient you won't even notice a difference in your ping.

just have a few minor things to fix.

Scope

  • Founder
  • Main Administrator
  • Hero Member
  • *******
  • Posts: 3,143
    • BnetWeb
Re: Add WebBot to your Bot
« Reply #18 on: August 31, 2010, 08:57:31 pm »
looks great ben. I'll talk to you tonight about your method and a possible standard for other programmers. Good job.

"Capitalization is the difference between helping your Uncle Jack off a horse and helping your uncle jack off a horse."

кηιgнтяι∂єя

  • Funny huh?
  • Hero Member
  • *******
  • Posts: 1,583
  • Clan RaGe
    • .::Clan RaGe::.
Re: Add WebBot to your Bot
« Reply #19 on: August 31, 2010, 10:41:42 pm »
hmm so i can setup a webbot on A&O? :O  or any bot.. interesting

uhh i need help!!
« Last Edit: August 31, 2010, 10:50:54 pm by KŋÏğĦ‘tRìĐě® »


Scope

  • Founder
  • Main Administrator
  • Hero Member
  • *******
  • Posts: 3,143
    • BnetWeb
Re: Add WebBot to your Bot
« Reply #20 on: August 31, 2010, 11:26:57 pm »
hmm so i can setup a webbot on A&O? :O  or any bot.. interesting

uhh i need help!!

Providing the bot developer has added its functionality in a plugin, script, or some other method, yes.

"Capitalization is the difference between helping your Uncle Jack off a horse and helping your uncle jack off a horse."

кηιgнтяι∂єя

  • Funny huh?
  • Hero Member
  • *******
  • Posts: 1,583
  • Clan RaGe
    • .::Clan RaGe::.
Re: Add WebBot to your Bot
« Reply #21 on: August 31, 2010, 11:30:40 pm »
me wants it :D


K i n g o f K i n g s

  • Hero Member
  • *******
  • Posts: 2,945
Re: Add WebBot to your Bot
« Reply #22 on: September 01, 2010, 06:39:22 am »
me wants it :D
ben will release it soon im sure.

In most countries selling harmful things like drugs is punishable. How come people can sell Microsoft software and go unpunished?
The Linux philosophy is "laugh in the face of danger". Oops. Wrong one. "Do it yourself". That's it.
Going from Windows to Linux is like trading a glider for an F117.

ben_fb

  • Addict
  • *****
  • Posts: 246
Re: Add WebBot to your Bot
« Reply #23 on: September 01, 2010, 01:32:36 pm »
I actually put the webbot on hold. Scope is working on ways to improve the service, while I am working on other things myself. The code is still in the project but commented out so should changes be made in the future it can be put back in easily.
« Last Edit: September 01, 2010, 01:34:21 pm by ben_fb »

warrior

  • Sr. Member
  • ******
  • Posts: 409
  • Jesus Christ.
Re: Add WebBot to your Bot
« Reply #24 on: September 01, 2010, 02:01:23 pm »
WebBot is going to get a hell of a lot cooler, pretty soon.
In capitalist America, bank robs you.

Choosing to code in an unmanaged language/platform is like choosing a hotel where you have to clean your own room.

When C++ is your hammer, everything starts to look like your thumb

 

newBalance by DzinerStudio