FAForever Forums
    • Categories
    • Recent
    • Tags
    • Popular
    • Users
    • Groups
    • Login
    1. Home
    2. Askaholic
    Offline
    • Profile
    • Following 0
    • Followers 2
    • Topics 11
    • Posts 446
    • Groups 1

    Askaholic

    @Askaholic

    Lobby server maintainer https://github.com/FAForever/server

    476
    Reputation
    133
    Profile views
    446
    Posts
    2
    Followers
    0
    Following
    Joined
    Last Online

    Askaholic Unfollow Follow
    FAF Association Members

    Best posts made by Askaholic

    • Some good news about Team Matchmaking (TMM)

      People keep asking for an ETA for Team Matchmaking, and until now our response has always been "we don't know." Well, I'm happy to say that I believe enough progress has been made to release an initial version in the near future!

      My plan as of writing this is to have a working TMM "beta" version released to the FAF community by the end of the year. That is, if everything goes well, you should be able to play 2v2 matchmaker games with your friends in late December or early January.

      WARNING: Do not expect everything to work perfectly! If you've been around for a while, you will be familiar with the usual chaos that ensues after a server update or game patch, and I expect this to be no different. While I hope it won't be the case, I will not be at all surprised if everything burns to the ground and we have to shut it off shortly after release in order to resolve critical issues.

      That being said, here are some things you should know in the unlikely event of a successful deployment:

      • There will only be 2v2 and 1v1 matchmakers (currently known as ladder).
      • The ladder tab will be replaced by a more general matchmaker tab, in which you can join any active queue.
      • There will be a party system. Players that queue together in a party are guaranteed to be on the same team.
      • You can queue by yourself, and a team will be found for you.
      • You can join multiple queues at the same time.
      • The new matchmaker queue will have its own rating. This new rating will be based on your global rating, but it will assume higher uncertainty. This rating might not be displayed in game, or might be displayed incorrectly. You should not expect to know exactly what your rating is for this initial TMM release.
      • We are NOT deleting your global rating. Custom games will continue to function exactly as they do now (provided there are no bugs).

      If you are so anxious about playing TMM that you can't wait until the end of December, there will be a few opportunities to help with pre-release testing which I will announce in the FAF Discord (invite link in the client and on faforever.com). Just make sure you're subscribed to the Tester role by writing !subscribe Tester in the #bot-commands channel and you will receive a ping from me personally when we need you.

      posted in General Discussion development matchmaker news soontm tmm
      AskaholicA
      Askaholic
    • Team Matchmaker rollout plans

      About a month ago I posted about our plans to release the Team Matchmaker towards the end of December or early January. I wanted to follow up on that post to say that we are still on schedule with that timeline.

      At the end of this week, we will be entering an "opt-in beta" phase of the matchmaker release. This means sometime around the 25th of December we will make another forum post with a download link to a special version of the FAF client that you can use to start playing TMM. The matchmaker will remain in this "opt-in" state for an as yet undefined amount of time until we have had a chance to evaluate the matchmaker's performance and squash any remaining critical bugs.

      The more people opt-in, the shorter the wait times will be, so please help me spread the news!

      posted in General Discussion development matchmaker news soontm tmm
      AskaholicA
      Askaholic
    • Team Matchmaker beta release NOW AVAILABLE!

      The matchmaker is now playable on FAF using the client build linked here, but before you download it please read over these important notes:

      • If you do not see the 2v2 queue, restart your client. This is a known bug.
      • To prevent game setup from timing out, make sure to install all maps in the map pool prior to queuing. For now this needs to be done manually.

      Now that you have read the important notes above, you can download the client installer from here:
      https://github.com/FAForever/downlords-faf-client/releases/tag/v1.4.0-RC2


      After some 2 odd years of working on the team matchmaker I'm really happy to see it released to the community in a mostly playable capacity. Of course there is still a way to go until it becomes stable enough to be merged into the official client branch, but we are making progress.

      The main feature that Team Matchmaking adds is a 2v2 queue which works similar to the current ladder queue. You can join this queue by yourself and be matched with a teammate automatically, or you can use the new party system to queue together with a teammate of your choosing. The 2v2 queue uses its own rating which is completely separate from global and ladder 1v1 ratings, however this third rating is currently only visible in the replay vault. Your 2v2 rating will be initialized based on your global rating (trueskill mean remains the same but deviation is increased) so it's likely that you will match with people who have similar global rating as you.

      As I said in my previous post, for the time being the matchmaker will only be available by downloading the pre-release version of the client linked above. If you have any feedback or find any bugs, you can leave your reports in discord (#faf-testing), the forum, or GitHub.

      There are a few known bugs that you may want to be aware of (please don't make bug reports for these).

      • Sometimes queues randomly don't show up.
      • Accepting an invite after the party owner has already started a queue will cause the party to become locked until that person leaves again (the owner can't kick them, and cannot leave the queue).
      • There is no way to prevent people from sending you party invites (other than foeing them individually).

      Special thanks to everyone who has volunteered their time and effort to make Team Matchmaking happen!
      @biass
      @BlackYps
      @Brutus5000
      @FtXCommando
      @Geosearchef
      @umbrasolis

      And shout out to our amazing testers who helped us find countless bugs already!

      Happy FAFfing and happy holidays!

      posted in General Discussion development matchmaker news tmm
      AskaholicA
      Askaholic
    • FAF/SCFA Replay Parser Library

      For the web app written by @PattogoTehen see https://fafafaf.github.io

      Intro

      Some time ago I started working on a replay parser library for FAF/SCFA replays, and now it's gotten to the point where I think it deserves a forum post.

      This project started as my own rewrite of a Parser library written by @dragonite and quickly evolved to include a more versatile replay inspection tool. I think this tool can be useful for many people in the FAF community who want to understand the replay format and what information is/isn't available in a replay. I hope that by sharing it, we can figure out the last few unknowns about the replay format, and that people will be empowered to explore new ways of extracting useful data from FAF replays. I have been impressed by the work that @teolicy has done on this front so far (hopefully he will make a post about his work soon).

      So what the heck does this tool do? Read on to find out...

      Quick Reference

      1. Install for Windows/Mac/Linux:
        cargo install faf-replay-parser --features=cli
      2. Download for Linux only from GitLab CI: https://gitlab.com/Askaholic/faf-replay-parser/-/jobs/8901869924/artifacts/raw/target/release/fafreplay

      Command Line Interface

      The tool currently has 3 functions:

      1. Unpack compressed fafreplay files into scfareplay files.
      2. Show basic info about the replay. Mostly constrained to the replay header.
      3. Show the replay command stream.

      Unpack

      I expect this to be the most widely useful feature of the tool, as a lot of other software that can parse replays only knows about the scfareplay format. The tool can handle the newest version of the fafreplay format as of release 0.5.0. Unpacking is very simple:

      $ fafreplay unpack 9000556.fafreplay
      Extracting...
      Done
      Writing 9000556.scfareplay
      Wrote 12314246 bytes
      

      Note that you do not need to unpack replays before using them with the other features of this tool. Files ending in .fafreplay will be converted in memory automatically.

      Info

      The info subcommand displays the sort of stuff you would expect to see for instance on the vault page. Stuff like the name of the map, the name of the players and what mods were used. It can also be configured to go into more detail with certain flags enabled.

      $ fafreplay info 14210327.fafreplay 
      processing replay: 14210327.fafreplay
      
      14210327.fafreplay
      Supreme Commander v1.50.3719 Replay v1.9
      
      Operation Trident (00:25:40)
          Operation Trident
      
      Mods
          Resource Rich v1
      
      Team 1
          Civilians (AI) UEF
          Melanol (0) Cybran
      

      With additional info enabled:

      $ fafreplay info --mods --options 14210327.fafreplay
      processing replay: 14210327.fafreplay
      
      14210327.fafreplay
      Supreme Commander v1.50.3719 Replay v1.9
      
      Operation Trident (00:25:40)
          Operation Trident
      
      Options
          Victory: sandbox
          Share: FullShare
          Score: yes
          Unit Cap: 1000
          No Rush: Off
          Game Speed: adjustable
          CheatsEnabled: false
      
      Mods
          Resource Rich v1
              Increases resource production. (X2)
              Author: Gas Powered Games
              Copyright: Copyright � 2006, Gas Powered Games
              UID: 74A9EAB2-E851-11DB-A1F1-F2C755D89593
              URL: http://www.gaspoweredgames.com
              Location: /mods/resourcerich
      
      Team 1
          Civilians (AI) UEF
          Melanol (0) Cybran
      

      Note that this subcommand doesn't show every bit of information available in the replay header. It aims to provide more of a summary of the most relevant information.

      Command stream

      Here is where things get really interesting, although it requires a lot more work to extract useful information. The commands subcommand lets you explore the meat of the replay file.

      By default only a small subset of commands are parsed as these are the most useful:

      $ fafreplay commands 9000556.scfareplay --limit 10
      processing replay: 9000556.scfareplay
      Supreme Commander v1.50.3701 Replay v1.9
      
      ├── SetCommandSource { id: 0 }
      ├── VerifyChecksum { digest: a8377a57463c1191e0ae3447028f6d02, tick: 0 }
      ├── Advance { ticks: 1 }
      ├── Advance { ticks: 1 }
      ├── Advance { ticks: 1 }
      ├── Advance { ticks: 1 }
      ├── Advance { ticks: 1 }
      ├── Advance { ticks: 1 }
      ├── Advance { ticks: 1 }
      ├── Advance { ticks: 1 }
      
      Total commands parsed: 10
      

      However, you can select exactly the command types you are interested in with the --commands flag. For a list of all available commands run:

      $ fafreplay commands --help
      

      There are also a few options for printing additional information such as the offset of the command in the file (useful when paired with a hex editor) and the in game time at which the command happened.

      For example to select only two specific commands and print additional info:

      $ fafreplay commands 9000556.scfareplay --time --offset --commands IssueCommand --commands ProcessInfoPair --limit 1000
      processing replay: 9000556.scfareplay
      Supreme Commander v1.50.3701 Replay v1.9
      
      Time option used without including Advance commands, Advance will be parsed implicitly
      
      0x000042c0 00:00:00 ├── ProcessInfoPair { unit: 0, arg1: "CustomName", arg2: "king_shrike" }
      0x0000cc6a 00:00:06 ├── ProcessInfoPair { unit: 1, arg1: "SetFireState", arg2: "HoldGround" }
      0x0000cc89 00:00:06 ├── ProcessInfoPair { unit: 0, arg1: "SetFireState", arg2: "HoldGround" }
      0x0005e804 00:00:47 ├── IssueCommand(GameCommand { entity_ids: [0], id: 0, coordinated_attack_cmd_id: -1, type: BuildMobile, arg2: -1, target: Position { x: 667.5, y: 18.679688, z: 357.5 }, arg3: 0, formation: None, blueprint: "urb1103", arg4: 0, arg5: 1, arg6: 1, upgrades: Nil, clear_queue: None })
      0x00062acb 00:00:49 ├── ProcessInfoPair { unit: 2, arg1: "SetFireState", arg2: "HoldGround" }
      
      Total commands parsed: 1000
      

      Keep in mind that determining the in game time requires parsing Advance commands and using the time option will force these to be included (but not displayed).

      Some commands will have a number of fields called arg1, arg2, arg3, etc. This usually means I haven't figured out what they do or don't know a better name for them.

      If anyone finds a replay containing a SetCommandCells command please send it my way as thus far I have been unable to locate any occurrences of this command.

      Installation

      At this time you are best off installing from source. Luckily this is really easy once you have the Rust toolchain installed. See the next section for details.

      There are Linux binaries built on each tagged release, but they are a little hard to track down in GitLab CI. Version 0.6.0 for Linux can be downloaded here.

      From Source

      The parser is written in Rust so you will need to use cargo to compile it. Once you have cargo installed, you can install the latest stable version with:

      $ cargo install faf-replay-parser --features=cli
      

      If you want to install the very latest development version I've been working on before it's published to crates.io, you can also install directly from GitLab.

      $ cargo install --git https://gitlab.com/Askaholic/faf-replay-parser.git --features=cli
      

      Note that you need to make sure that the ~/.cargo/bin directory is in your path to be able to run the tool once it's compiled.

      Python Bindings

      The parser is available as a python package for convenience. The bindings are written in Rust using pyo3.

      Here's an example of using the bindings, copied over from the README with comments removed for brevety:

      from datetime import timedelta
      from fafreplay import Parser, commands
      
      parser = Parser(
          commands=[
              commands.Advance,           # For the tick counter
              commands.VerifyChecksum,    # For desync detection
          ],
          save_commands=False,
      )
      
      with open("12345.scfareplay", "rb") as f:
          data = f.read()
      
      replay = parser.parse(data)
      
      print("Game time:", timedelta(milliseconds=replay["body"]["sim"]["tick"]*100))
      if replay["body"]["sim"]["desync_ticks"]:
          print("Replay desynced!")
      

      Note that the bindings themselves don't currently provide a function for converting from the fafreplay format to the scfareplay format because I didn't want to redistribute the needed dependencies. However, you can achieve this with the following bit of code (shoutout to @teolicy for porting this over from my Rust code):

      import base64
      import json
      import zlib
      import zstd
      
      
      with open("somefile.fafreplay", "rb") as f:
          header = json.loads(f.readline().decode())
          buf = f.read()
          version = header.get("version", 1)
      
          if version == 1:
              decoded = base64.decodebytes(buf)
              decoded = decoded[4:]  # skip the decoded size
              extracted = zlib.decompress(decoded)
          elif version == 2:
              extracted = zstd.decompress(buf)
      

      For more information see the project page at https://pypi.org/project/faf-replay-parser/.

      Installation

      Thanks to cibuildwheel and the fact that GitHub Actions can run Linux, Windows, and even MacOS instances, binary wheels for the latest version (0.6.0) are available on pretty much all major platforms, and all cpython versions from 3.8 to 3.12, as well as pypy 3.8, 3.9, and 3.10. Install with pip:

      $ pip install faf-replay-parser
      

      A source distribution is also available in case you are running something really exotic (or old). You will need to have rustc installed to build the package.

      Rust Crate

      This is actually the OG project, but it gets mentioned last because I'm guessing the overlap between people who are interested in extracting information from SCFA replays, and people who would rather do so in Rust than Python is quite small. If you happen to be such a person, let me buy you a beer sometime. Also check out this project's crates.io page for documentation.

      Final Thoughts

      I would be interested to hear what cool things people find in their replays, especially if they are things that seem to cause any errors with the parser. If you run into a panic (other than Broken pipe), let me know how you caused it.

      I would also be curious about which commands people can find in their replays, as there are some commands which should theoretically exist, but I haven't found in any replays that I've parsed. There are also some arguments/bytes which seem to always be the same for a given command.

      Of course I would also be open to some suggestions for improving the parser, ALTHOUGH please only make suggestions once you have a good grasp of the replay format. There is a lot of information that we all wish we could read straight from the replay file, but is actually impossible to obtain without fully simulating the game (which this tool cannot do because I have not re-implemented SupCom).

      Project Links

      Binary and Rust crate: https://gitlab.com/Askaholic/faf-replay-parser
      Python Bindings: https://github.com/Askaholic/faf-replay-parser-python

      posted in Blogs
      AskaholicA
      Askaholic
    • TMM 3v3/4v4+ testing - volunteers needed!

      Update: We will need to do a second test! Same time next week, details at the bottom of this post have been updated.

      It's about that time! TMM for larger teams is nearing completion and we need your help playtesting it.

      When we started work on the team matchmaker we decided to only worry about 2v2 so we could focus our efforts on getting all of the logistical things working first and then expand our algorithm later to handle larger teams. @BlackYps has been doing exactly that over the last few months, and now we are reaching the point where we think it is almost ready. But, we need A LOT of people to help us test it. At least 6 for 3v3, 8 for 4v4, etc (yes, its hard for us to get this many testers together).

      So hop into the #role-selection channel on the FAF discord and react with the 🚨 emoji to get reminders about the testing session. I will send out a reminder ping at the end of the week.

      When: Sunday, June 27th @ 18:00 UTC
      Where: FAF Discord in the #faf-testing channel
      What: We will be queuing for games in our test environment. Your rating will not be affected.

      Past test:

      • Sunday, June 20th @ 18:00 UTC Completed
      posted in General Discussion
      AskaholicA
      Askaholic
    • RE: Player Councilor Election 2021

      One thing I want to say is that I think the candidates are severely over estimating the influence that the PC has over development. The dev team are all volunteers, we will work on the things that are fun/interesting for us and some PC coming in and telling people they need to rewrite xzy system "because I said so" is simply not going to happen.

      The PC may request/suggest certain features from time to time (as may anyone) but there is no guarantee that it will be fulfilled.

      posted in General Discussion
      AskaholicA
      Askaholic
    • RE: New Player Councilor Discussion + Removal Announcements

      @emperor_penguin said in New Player Councilor Discussion + Removal Announcements:

      Emperor_Penguin’s Player Councilor Application
      I have already talked with developers and have a feasible vision for TMM

      Who exactly are these people? Because I certainly was not included in any such discussion and it would be me who is in the position of having to implement a large part of your idea, or ultimately, spend a lot of time reviewing and maintaining the code.

      I would also not consider this:

      lots of user-choice

      to imply this:

      Massively improve the TMM experience

      The point of matchmakers is not to give people every possible option they might want (that's the point of custom games), it's actually to reduce barrier to entry by making many of the choices for them. Especially when you want to focus on the new player experience and new player retention, you want to make getting into a game as intuitive as possible. It's much better for that to be 1-click "Play Now" and have few choices over what the game settings are than to have 10-clicks for "Maybe play a game at some point if enough other people click the same stuff as you".

      I am more inclined to agree with FTX on this issue. Letting the players decide everything is a fallacy in video games. If you always do what the majority of players says they want you end up with a hunk of junk, because the problem is, often times people don't actually know what they want (they think they know, but they don't). It is up to the PC to figure out what players want even though they don't know they want it, and then give it to them.

      Finally, many further improvements to the matchmaker will be coming (eventually) regardless of who the PC is, because in fact, the driving force behind its development is --surprise-- the developers, not the PC. I'm honestly a little surprised that overhauling TMM (which we just recently built in the first place) is such a major part of so many candidates' platforms, since those promises are things that will almost certainly not be fulfilled.

      posted in General Discussion
      AskaholicA
      Askaholic
    • RE: Calling for nine2 to resign as Promotions Councillor

      @nine2 said in Calling for nine2 to resign as Promotions Councillor:

      Basically everyone I talk to personally is fed up with attitude in FAF.

      This may be a result of biased sampling. Like, of course you won’t hear from the people who are not fed up, because they aren’t fed up. Naturally the only opinion you hear will be from the people who are fed up.

      Also there is the echo chamber effect of being more likely to surround yourself with people who share a similar view to you because naturally they make you more comfortable. That doesn’t mean they are the majority.

      posted in General Discussion
      AskaholicA
      Askaholic
    • RE: New Player Councilor Discussion + Removal Announcements

      @swkoll sorry but your questions are off topic. This thread is for personal jabs only.

      posted in General Discussion
      AskaholicA
      Askaholic
    • Lobby Update June 29, 2021

      While the server was down anyways we took the opportunity to deploy the latest lobby release https://github.com/FAForever/server/releases/tag/v1.8.0. I've copied the release notes here for your convenience:

      Summary

      With this release we are finally making some progress towards upgrading our login flow by supporting token login in addition to the old style of password login. As an end user, you won't notice a whole lot. Future client versions will give you the option of logging in with the new method which is more secure, as it will use temporary tokens instead of directly sending your password to the lobby server (you still need to enter your password into the client though so it can fetch a token from the API).

      In addition we've fixed a few bugs, done some internal cleanup, and added support for more integration with other FAF services which will eventually (TM) be relevant for Galactic War. Here are the noteworthy highlights

      Other Noteworthy Changes

      • Foes can no longer join your games
      • Matchmaker games that fail to start will be properly cleaned up. This should also fix the game count on the website being way too high.
      • Added a time delta to the queue pop timer message. Future client versions may use this to present more accurate queue times even when the system time is wrong.

      Pull Requests

      • Feature/#440 hydra token login (#784) [by @Sheikah]
      • Add timeout to base game class (#798) [by @Sheikah]
      • Use maxminddb directly instead of geoip2 (#792)
      • Issue/#790 Nightly test deadline (#794)
      • Issue/#778 Fix for foes in command_game_join (#793) [by @SpikeyNoob]
      • Feature/#747 save additional metadata in game results (#782) [by eoinnoble]
      • Issue/#771 send broadcast info to rabbitmq (#779)
      • Remove metaclass for service creation (#785)
      • Issue/#769 nightly test run (#781)
      • Issue/#482 improve documentation (#753)
      • Issue/#655 add rabbitmq to github actions (#775)
      • Update dependencies (#774)
      • Fix control server integration tests (#770)
      • Issue/#560 Fix co-op leaderboard IntegrityError (#767) [by eoinnoble]
      • Remove references to equilibrium #744 (#764) [by IanNaughton]
      • Feature/#699 Add queue_pop_time_delta to MatchmakerQueue representation [by eoinnoble]
      posted in Contribution
      AskaholicA
      Askaholic

    Latest posts made by Askaholic

    • RE: FAF/SCFA Replay Parser Library

      That is correct. In order to figure out that information you’d have to run the replay through the actual game simulation (I.e. watch the replay). You could probably create some sort of mod that would dump that info out while the replay is running, but I’m not very familiar with that side of things. A mod like that might even exist already.

      posted in Blogs
      AskaholicA
      Askaholic
    • RE: Friends / Foe list location

      Maybe in the client prefs file?

      posted in Game Issues and Gameplay questions
      AskaholicA
      Askaholic
    • RE: Are 3p and 4p coop leaderboards still not working?

      Great! You’re welcome!

      posted in Game Issues and Gameplay questions
      AskaholicA
      Askaholic
    • RE: Are 3p and 4p coop leaderboards still not working?

      Could you describe the bug or post a screenshot? Game not being rated due to coop is correct. Coop shouldn’t affect your rating.

      posted in Game Issues and Gameplay questions
      AskaholicA
      Askaholic
    • RE: Are 3p and 4p coop leaderboards still not working?

      Theoretically this should have been fixed by the server update yesterday. Let me know if it’s working now.

      posted in Game Issues and Gameplay questions
      AskaholicA
      Askaholic
    • RE: Voices for FAF coop campaigns

      I expect you can commission voice actors on sites like fiverr to do that sort of stuff pretty affordably as well.

      posted in General Discussion
      AskaholicA
      Askaholic
    • RE: 5v5/6v6 tmm?

      I actually think it’s an idea worth exploring. When 4v4 launched I was convinced that there wouldn’t be enough players for it to find any games, and yet they showed up. I’m no longer convinced by the “queues will take away players from other queues” argument as I was before. I suspect that people would actually show up for those larger games who don’t play matchmaker at all now.

      That said, I do think the connection troubles could be a barrier, although Jip has once again done some great work to improving the matchmaker initial connection code which might make it viable?

      Anyway, I don’t think it’s fair to dismiss the idea on the basis of those arguments, since people (including myself) made exactly the same arguments before 4v4 was launched and that seems to have turned out fine. My opinion, try it and see…

      posted in Suggestions
      AskaholicA
      Askaholic
    • RE: FAF/SCFA Replay Parser Library

      After almost 3 years I have finally released another version of the rust crate, and CLI tool. I also published a new version of the python package which adds binary wheels for python 3.11 and 3.12, and removes support for python 3.7. Note, the version numbers happen to correspond between the rust/python packages but that is just coincidence, I have not updated the python library to use the new changes from the rust one yet.

      Rust: https://crates.io/crates/faf-replay-parser/0.6.0
      Python: https://pypi.org/project/faf-replay-parser/0.6.0/

      What's new?

      Many, many refactors to the API. If you wrote some rust code that used version 0.5.2 of the rust crate, you'll have to update some syntax to get it to work with 0.6.0. See the improved docs page for the new syntax.

      For CLI users things you'll notice are:

      • The improvement to the command output is now released on 0.6.0
      • Some additional output like game title and game quality in fafreplay info
      • A new fafreplay info --raw option for dumping out the entire contents of the replay header
      • Better detection of file type which does not rely on the file extension
      • Some basic support for Supreme Commander 2 replays

      Enjoy!

      posted in Blogs
      AskaholicA
      Askaholic
    • RE: Decapitation should be a rated victory condition

      That’s not where it’s stuck afaik. We need to finish adding the enum values to the database and api. https://github.com/FAForever/db/pull/316

      posted in General Discussion
      AskaholicA
      Askaholic
    • RE: Are 3p and 4p coop leaderboards still not working?

      I looked into this further and it seems that the validity check that unrankes FFA games is causing any >2 player coop game to not be considered valid. I made an issue to drop this check for coop since the team set up happens automatically. Should be a very quick fix. https://github.com/FAForever/server/issues/1035

      posted in Game Issues and Gameplay questions
      AskaholicA
      Askaholic