Jump to content

super_teabag

Member
  • Posts

    185
  • Joined

  • Last visited

Everything posted by super_teabag

  1. Is there any software for setting up a server watch windows using a raspberry PI 4? Not too familiar with the space and curious if anyone has done anything like this. If you're curious what my site is built with here's a link. https://github.com/BensonBen/solid-octo-couscous
  2. Just signed an offer letter for a senior software engineer position with Herman Miller :D. Wanted to say thanks to the LTT community and Linus cuz I've been a subscriber of the channel since... the times he reviewed random toys at NCIX. Just wanted to make this post to show that you guys make a difference .
  3. Hey all! This isn't a "hey please help I've fallen and can't get up" kind of post, but rather one that's imho dense with computer science topics. My hope is that it will genuinely peek someone's interest in computer science, programming, reverse engineering and genuinely inspire people. Any who, recently got this exercise bike with Bluetooth functionality, right. now I didn't want to pay oodles of money a month for some fitness app. So, I was like "I can write my own and it'll work on all my devices"... at least that's the goal. Starting out I had to connect to the bike's Bluetooth with the caveat being I wanted to do this using a web browser then leverage PWAs (progressive web apps) to install on any of my devices with this very basic exercise app. Learned there's an experimental standard for Bluetooth available on navigator.bluetooth Connecting to the bike was relatively easy. I used a Bluetooth discovery app on my phone to figure out what "services" were available on the bike's Bluetooth server. It got a little tricky as the data I would get back from the Bluetooth device was 88 bits, or 11 bytes. With no indication of endianess, and no headers were on the data to see where things may be in this arbitrary bundle of bites. I thereby devised a plan to log the data and see where it changed and using the Bluetooth and with the assistance of Bluetooth discovery apps I learned roughly what the shape of the data would be In the highlighted area, I knew that wheel rev, last crank even time, last wheel event time, and crank revolutions would be 16 bit unsigned numbers. Why? Because as I pedaled the bike what my app would read was "rolling over" a concept that instead of continuing to count past 16 bits of information. The bike instead resets to 0 Now, where in that 88 bit payload were these 16 bit unsigned numbers? Well, I did some logging of the information which you can see from the included text file of my log. Using that I deduced where about 4 of these numbers were in the payload as they also lined up with my Bluetooth sniffing application told me. The following is what gives me the correct data readout from my bike on the web! Now, I have to do some math to calculate RPM and KPH or MPH. private readonly parseCadenceWheelSpeedWheelTime = (event: { target: { value: DataView } }) => { const { value: dataView } = event?.target; const littleEndian = true; // wheel revolutions in unsigned 16 bit numbers. this.wheelRevolutions$.next(dataView.getUint32(1, littleEndian)); // last wheel event time in unsigned 16 bit numbers. this.lastWheelEventTime$.next(dataView.getUint16(5, littleEndian)); // amount of times the wheel went around in unsigned 16 bit numbers. this.crankRevolutions$.next(dataView.getUint16(7, littleEndian)); // last crank event time in unsigned 16 bit numbers. this.lastCrankEventTime$.next(dataView.getUint16(9, littleEndian)); }; bluetooth-logging.txt
  4. @AnotherMax It's cool duder. yeah, so... that's my last straw that I'm gonna try. There's a few portions of the data MSB (most significant bit) that keeps changing when changing what device it's paired too. Otherwise, I'm 90% certain that bytes 0-2 and 2-4 are for timing cuz they're unsigned 16 bit integers and they line up. If I don't have to brute force it and can ask. That's what I'm doing rn cuz work smarter not harder
  5. @AnotherMaxthese are a good starting point, but I found some more resources that were more useful that are super buried on the Bluetooth documentation's website. I'll post here just in case you're curious. Bluetooth Web Tutorial from the horses mouth (it's still dated) Second, the "characteristics" in Bluetooth terminology are properties in a grouping. that grouping is called a "service" (this isn't me trying to be an asshole about terms). So, the "value" is typed as DataView since the standard has been updated and bugs have been fixed in Chrome / Edge. Again, making the "value" property as a DataView. You'll have to checkout mozilla's documentation on that if you'd like. Effectively I think I'm SOL cuz it's up to the manufacturer of the device to adhere to the standard for say "heart rate" services. then provide a way to parse the data. I've shot nautilus (parent company) a message about what I'm dealing with. Hopefully, they'll give me a data sheet with some more information. I can parse some of the values from the HEX information provided, but that's just it. I don't know if that's 100% where the data is.
  6. Hello! This may be a bit long winded, but bare with me. TLDR: Looking for ways of parsing binary response from a Bluetooth device. So, I've got a crazy idea (maybe) in that I've been trying to develop a data logging application and fitness tracker for my new IC4 bike. The difference between this app and others available on the market is that it works via the experimental Bluetooth browser standard. Described in more detail here. Web Bluetooth API - Web APIs | MDN (mozilla.org). Getting to the point. I've paired to my Bluetooth connection (server). Parsed through the services available and exposed by using a Bluetooth discovery application on my phone. Again, pairing to the bike. I'm able to see what I can retrieve, notify, read, write etc. But I don't know how to translate that on a web browser? Why might that be? Well, since the standard is relatively new. When I subscribe to notifications from the bike via Bluetooth. On the characteristic CSC Measurement I get a little endian binary 88 bit response that I can't seem to figure out where the data indicated above lies. It's not auto-magical like the above screenshot on my phone would indicate. For example it will look something like this when subscribing to notifications on the WEB for CSC Measurement. hex: 0x593400e04890 binary: 11001011011010000000000111000000100000011100000 What I do know so far is that the times in milliseconds reported are unsigned 16 bit integers. That lets me guess and check where in the sequence those measurements may be in the response. However rather than guessing and checking I figured I'd just ask if there's an easier way to translate the data received. So, I can use it in my web application. Figured it my android device can parse the Bluetooth notifications then so can I. Also, I've already emailed the manufacturer if there's a data sheet describing the notifications. import { Injectable } from '@angular/core'; import { SchwinIc4BluetoothCharacteristics, SchwinIc4BluetoothServices } from '@solid-octo-couscous/model'; import { BaseBluetoothConnectionService } from './base-bluetooth-connection.service'; declare const navigator: Navigator; @Injectable() export class SchwinIc4BluetoothConnectionService extends BaseBluetoothConnectionService { constructor() { super( [{ name: 'IC Bike' }], [ SchwinIc4BluetoothServices.cyclingSpeedAndCadence, SchwinIc4BluetoothServices.deviceInformation, SchwinIc4BluetoothServices.fitnessMachine, SchwinIc4BluetoothServices.genericAccess, SchwinIc4BluetoothServices.heartRate, ] ); } public async connectToCyclingSpeedAndCadenceService(): Promise<void> { const primaryBluetoothServices = await this.connectToSchwinBike(); const cyclingSpeedCadenceService = primaryBluetoothServices?.find( service => service.uuid === SchwinIc4BluetoothServices.cyclingSpeedAndCadenceUUID ); const cscMeasurementChararacteristic: | BluetoothRemoteGATTCharacteristic | undefined = await cyclingSpeedCadenceService?.getCharacteristic( // CSC Measurement feature. csc = cycling speed cadence. SchwinIc4BluetoothCharacteristics.cscMeasurement ); const result: | BluetoothRemoteGATTCharacteristic | undefined = await cscMeasurementChararacteristic?.startNotifications(); result?.addEventListener('characteristicvaluechanged', this.parseCadenceWheelSpeedWheelTime); } private readonly connectToSchwinBike = async (): Promise<BluetoothRemoteGATTService[]> => { // TODO: add a check in here to notify the user if they're using a non-supported browser. const userSelectedSchwinIc4Bike: BluetoothDevice = await navigator.bluetooth.requestDevice( this.bluetoothDeviceSearchOptions ); this.bluetoothDevice$.next(userSelectedSchwinIc4Bike); const serverConnection: | BluetoothRemoteGATTServer | undefined = await userSelectedSchwinIc4Bike?.gatt?.connect(); this.bluetoothServer$.next(serverConnection); return (await serverConnection?.getPrimaryServices()) ?? []; }; /** * !!!! this portion is where I'm having trouble after i'm connected and receiving responses. !!!!! **/ private readonly parseCadenceWheelSpeedWheelTime = event => { // here is where the value of the notification would be something like // 0x593400e04890 // this buffer is embedded in a DataView object. const { value } = event?.target; const dataView = value as DataView; console.log(`some real data: ${dataView.getUint16(0, true)}`); console.log(`some other real data: ${dataView.getUint16(2, true)}`); }; }
  7. From the reviews I've read if you find a dead pixel they definitely replace the panel / swap it out for a not broken unit.
  8. Hey all, so it's time for me to part ways with my budget corsair case I've had since 2013. I simply want something professional looking, perhaps a side panel, noise dampening (I wear noise cancelling headphones so this isn't to high on my list). So far I've liked the Corsair 678C link Trying to also go for a white, blue aesthetic as I have an Alienware AW3420DW Ultrawide monitor. My system isn't too crazy and I don't have a ton of hard drives, or water cooling. Any budget
  9. It means that your motherboard vendor didn't test that memory kit to have no issues with your processor. Don't worry though, just because it's not on that qualified vendor list doesn't mean that your memory, motherboard, and cpu won't ever play nicely together. It simply means that you yourself may need to get stable memory. This isn't to say that this is the solution, but in my light research on the the Kernel 41 error you're experiencing yielded that this is most likely a hardware issue. Also, Kernel generally referencing your operating systems underlying low level code. Low level you say "super teabag", well simply put this is the code, bytecode, and instructions that interact with your hardware directly. TLDR: I suggest you develop a plan to make sure your memory is stable. I'll outline some steps that should aid you. 1) Create a bootable media (USB, CD) whatever you would like of Memtest86+ availible here: Memtest86+ and do your own research on how to run this. I'd run the test when you boot into Memtest86+. If you fail during this test, or you start to get errors which it will indicate to you. Then you've probably found your problem and you can go about a solution Solution A. Get a compable memory kit off of the QVL your motherboard supports. Solution B. Lookup, how to use a program called "DRAM calculator" on youtube. And use the "calculate safe" option when using that program. This will require you to manually set your memory timings and requires some research, but it should give you stable memory. If you choose this option. I'd be happy to outline more steps for you to take as this can get pretty involved and I feel qualified to help you. My reasoning for this is that typically that CPU you have is notorious for having memory support issues and lines up with the Windows logs of it being a hardware issue.
  10. Honestly, I'd not go out to eat and just get the Alienware AW2521HF. If IPS, FPS, and G-Sync are your main criteria. Alienware (dell) seem to have very good quality assurance people working for them. Generally their Panels (sourced from LG) don't have as bad of backlight bleed or issues in general. In my opinion, getting one good thing that suits all your needs and that you keep is better than flip flopping monitors all the time. Because you end buying / selling this at a net loss if you switch monitors all the time. Bonus: this particular panel has a 240hz refresh rate. The bad: it's slightly outside of your budget at $385 (USD); however, I'm sure you could be a shrewd negotiator and get them (dell.com) to price match another website. That way you get good shipping. Happy Hunting! Edit: whoops i'm stupid and didn't notice that LG monitor is a 1440p panel. another edit: LG some killer products that don't like god awful. Going with anything LG would disappoint you IMHO
  11. perhaps checking if the memory is on the QVL?
  12. Not sure, the github page doesn't immediately make a mention of it. Stating "Inspired by the Windows 95 era PowerToys project, this reboot provides power users with ways to squeeze more efficiency out of the Windows 10 shell and customize it for individual workflows."
  13. Hey, this is more of a PSA, but I recently discovered this microsoft supported and open source "Power Tools" they put out there. Check it out here: Github Power Toys Of the features that it adds to windows my favorite feature is. Fancy Zones (for snapping windows to predefined ares) a more advanced windows snap utility.
  14. I felt like this needed a PSA. Everyone should checkout "Windows Power Tools" availible here: power toys. It's on Microsofts Github repository on github. After work i'm really going to play around with Fancy Zones that at a minimum was worth checking out to me. As I just purchased a 34" Ultra Wide Monitor. While I have not looked into it a ton personally. It looks very promising
  15. here goes something CPU: Ryzen 5 3600 GPU: EVGA 1660Ti Ultra Black Average FPS: 28.10 Score: 3757
  16. Hey just coming back to this forum after a 6 year hiatus ha. Benchmark: Fire Strike CPU: Ryzen 5 3600 stock GPU: EVGA GTX 1660 Ti XC Ultra GPU Core: 2,135 GPU Memory: 1,900 Score: 15, 794 3DMark Link: http://www.3dmark.com/fs/22444927
  17. TLDR: mid level developer (3 years experience) wants to know path to promotion, but doesn't get a straightforward answer. Advice wanted. So, I've been working for a software company for just barely a year now. I'm a developer there, and we use .NET and MS SQL for our back-end. While the Front End is Angular 8/7. Basically, I wanted to know my path to becoming a "Senior developer", or rather what does a "senior" member look like at our company. Knowledge wise, business wise and other things. Walked into my bosses office, and was like "boss man what does a senior developer look like at X company". His response was more or less "we don't distinguish between developers in terms of senior, junior, and mid level developers". Which seems to me like a sub par answer. If I want to further my career as a developer I'd like to know what it would take to get better. Besides that answer I've enjoyed working at this company. Everyone on my team comes to me for complicated Angular questions. Or anything regarding front end development. 90% of the time I can answer their questions for them. This discourages me from trying hard at the company. I'm considering polishing off my resume and finding another job, but I'd like to hear other thoughts.
  18. Hey all, I'm looking for a group of people to play with for CS:GO. just trying to improve and play without people who are super salty all the time. I'm Gold Nova 1. Here's my steam profile http://steamcommunity.com/id/rarewhite
  19. Hey all, I'm a student and long story short I'm looking into getting a laptop that I can take to class, and take notes on. I'm a computer science major, so in alot of my classes I have to do a lot of coding in java, and c++. I've been looking at the chrome books, or something small and portable that will enable me to take notes during class, and do a bit of light coding on the run. Right now I'm pretty broke, I've got some expenses coming up in April; such as, insurance, and tires on my car, so I can't spend a bunch. Trying to keep it around 200-300 USD. Would it be worth while to get a chrome book or a similarly priced device to take around campus? It's hard to look at the power points that my professors use while trying to take notes. However, I would like to code on the laptop that I get, and a chromebook isn't the greatest for doing so. Our CIS department has desktops set up so that students can SSH into them, and run eclipse through them. I could code on campus while networking into those computers I guess. I could even put a linux distribution onto a chrome book, and install eclipse that way. At home I've got an okay desktop i5 3570k, nvidia gtx 760, 240gb SSD. I'd rather not have to go home everyday just to work on my programming projects. Is there a way to remote into my desktop from a chromebook and run eclipse through there? Thoughts, suggestions, recommendations are welcome
  20. Figured it out . The GUI was provided to me by my professor
  21. Hi again, I've been trying to finish up this java project on break, and I've hit a snag with my GUI. Having trouble trying to get my GUI to display text on my text field. You may need all 4 of my classes in order to get my GUI to properly work I know there's a setText() method in java... Just kinda confused how to use it in this case. I've attached my java files as wordpad docs. If someone can take a look at it It'd be much appreciated. Thanks To my understanding when this a button is pressed, and that buttons name is say east. I'd call the method "myGame.move("East")" which would move the player east. In the game class there's a method I made called "getMessage()" which gets a local String variable that contains current message. I would assume the GUI code would then look something like "results.setText(myGame.getMessage())"; results is the text area where I'm displaying the text. but that's giving me errors *Snipit of my code* private class ButtonListener implements ActionListener{ public void actionPerformed(ActionEvent e){ // extract the button that was clicked JComponent buttonPressed = (JComponent) e.getSource(); String temp; if (buttonPressed == quitItem){ System.exit(1); }else if (buttonPressed == newItem){ newGame(); }else if (buttonPressed == east){ myGame.move("East"); temp = myGame.getMessage(); results.setText(temp); }else if (buttonPressed == west){ myGame.move("West"); results.setText(myGame.getMessage()); }else if (buttonPressed == north){ myGame.move("North"); results.setText(myGame.getMessage()); }else if (buttonPressed == south){ myGame.move("South"); results.setText(myGame.getMessage()); }else if (buttonPressed == take){ myGame.take(); results.setText(myGame.getMessage()); }else if (buttonPressed == look){ myGame.look(); results.setText(myGame.getMessage()); }else if (buttonPressed == hold){ myGame.show(); results.setText(myGame.getMessage()); }else if (buttonPressed == help){ myGame.help(); results.setText(myGame.getMessage()); }else if (buttonPressed == drop){ String item = JOptionPane.showInputDialog(null, "What do you want to drop?"); if (item != null){ myGame.drop(item); } } results.append("\n\n" + myGame.getMessage()); if (myGame.gameOver()){ gameOver(); } } } Item.rtf Room.rtf game.rtf GUI.rtf
  22. @Midnight @madknight3 @Ghost Thanks for all the help. that "isEmpty()" method is awesome I didn't know it existed as part of the arraylist library. I got the errors worked out, and the method works now. Thanks for the help guys!
×