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

    Askaholic

    @Askaholic

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

    460
    Reputation
    129
    Profile views
    432
    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...

      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
          Unit Cap: 1000
          Share: FullShare
          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 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

      I have compiled some binaries for Linux and Windows and hosted them on my server. If you don't feel comfortable downloading random exe's from the internet you can install pretty easily from source.

      Download SHA256 hash
      Linux Download for Linux 64bit a612360d15d5590987e9505ab6b3068181dd33024d0ef3edcc6ec13e0b8a7acf
      Windows Download for Windows 64bit 5906646bc8c5796599747826797434713fceb56136e76f21178ebac781331f12

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

      From Source

      The parser is written in Rust so you will need to use cargo to compile it. If you have cargo installed, you can run:

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

      You can also install the latest version published on crates.io with

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

      but it may be less up to date than installing directly from git. I would recommend starting with the first command, and if something turns out to be broken, try the second command.

      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.5.1.post0) are available on pretty much all major platforms, and all cpython versions from 3.6 to 3.9, as well as pypy 3.6 and 3.7. 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.

      Furthermore, I wonder if the replay format for Forged Alliance is similar to that of the original SupCom, and if anyone has any vanilla SupCom replays that they could throw at the parser.

      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: Latest update screwed up my FAF

      I can assure you and anyone else who may be reading this that there is absolutely no need to double buy the game to fix installation issues!!! Once you own it on steam you can download it as many times as you like, even on multiple devices.

      posted in I need help
      AskaholicA
      Askaholic
    • RE: Add a latest replay URL

      Just be aware that the replay data doesn’t contain exactly the info you’re looking for. It contains the sequences of commands executed by all the players so you can see when units were queued up to be built but you would need to actually run those commands through the simulation to find out when/how many of those queued units were actually built. That’s only possible by viewing the replay with the FAForever.exe. It’s still possible to automate that, I would point you towards the FAForever AI discord since I think some of the AI guys like @maudlin27 have come up with some scripts to automate running a bunch of AI games and analyzing their results. Something similar could probably be done for replays too.

      posted in Modding & Tools
      AskaholicA
      Askaholic
    • RE: Cannot connect to any game

      504 means you were able to talk to api.faforever.com but it wasn’t able to reach the backend service. So the fact that it started working again after you flushed your firewall rules is just a coincidence.

      Just noting that in case someone finds this in the future and thinks that if they get a 504 error they can fix it by flushing firewall rules. You can’t. Just wait a bit and try again or notify the server admins.

      posted in I need help
      AskaholicA
      Askaholic
    • RE: [Rating] Inconsistency when drawing

      Of course there “could” be but who is going to have time to build that. Detecting who is causing connection issues is also quite difficult and sometimes impossible since how can you decide which end of the pipe is responsible for the connection issue in a peer-to-peer system? That’s assuming you can even see which connections are having issues, which the lobby server can’t. I think nowadays the telemetry server often has that data and you could conceivably send it to the lobby server but there’s yet another nontrivial piece of code someone’s gotta write. All’s to say, yea it’s possible if you got enough devs with enough spare time.

      posted in General Discussion
      AskaholicA
      Askaholic
    • RE: [Rating] Inconsistency when drawing

      The rating grace period doesn’t exist in matchmaker games to prevent people from manipulating their rating by just quitting games when they get a map that they don’t like or think they are bad on. Also if they get matched against an opponent they don’t want to play against. Same reason you’ll still be matched against people you’ve foed.

      In customs you can control all that stuff before the match anyway so it makes more sense to have a grace period for disconnects.

      posted in General Discussion
      AskaholicA
      Askaholic
    • RE: FAF Palette - simple client theme editor

      Wow, I totally missed this when it was posted originally. A little editor app like this is probably exactly what is needed to get people to use the themes feature more!

      I’d love to see people make and share their own custom themes using this.

      posted in Blogs
      AskaholicA
      Askaholic
    • RE: In Matchmaker, spawn top players to face each other

      The matchmaker already tries to do that but some maps are just set up so that those slots face eachother. It really is up to the map authors to set up the slots in a certain way. It’s impossible for the matchmaker to know the specifics of any particular map so the best it can do is treat the slot numbers consistently.

      posted in Suggestions
      AskaholicA
      Askaholic
    • RE: Co-op improvement suggestions

      Clearing the leaderboards would be very easy to do by one of the server admins. It’s just a matter of deciding to do it. I haven’t seen anyone talking about it internally.

      posted in General Discussion
      AskaholicA
      Askaholic
    • RE: Looking for feedback on whether people perceive more or fewer connection problems

      I pinged our server admins to ask them to take a look.

      posted in General Discussion
      AskaholicA
      Askaholic
    • RE: no statistics or achivements

      I remember now. It was an issue on the game side this time since the statistics started being sent in a different format which doesn’t work with the server parsing code. We discovered it last summer but @Jip has not had time to look into it yet.

      posted in I need help
      AskaholicA
      Askaholic