Author: 27nlf2qrc0jd

  • Data-mining-project—stroke-prediction

    Data-mining-project—stroke-prediction

    데이터 마이닝 개인 프로젝트 수행 – 뇌졸증 환자 예측 모델 구축

    수행기간 : 2022.03.03 ~ 2022.05.24

    분석 데이터 : Stroke dataset

    image

    • 뇌졸증은 뇌에 혈액을 공급하는 혈관이 막히거나 터져서 뇌 손상이 오고 그에 따른 신체장애가 나타나는 질환임

    • 뇌졸증 증상의 반복으로 인해 뇌가 손상받게 되면 치매로 이어질 수도 있음

    • 치료가 늦어지면 뇌 손상이 광범위해서 혈관이 열리더라도 증상 호전이 어려움

    • 따라서 뇌졸증을 조기에 예방하고 발견하는 작업이 매우 중요함

    • 위험인자

      • 고혈압, 당뇨병, 심장병, 일과성 허혈증, 뇌졸증의 과거력, 고지혈증
    • 생활습관

      • 흡연, 과음, 운동부족, 비만, 과도한 스트레스

    Stroke data info

    image

    • Stroke datset은 성별, 연령, 다양한 질병, 흡연 상태와 같은 입력 매개변수를 기반으로 환자가 뇌졸증에 걸릴 가능성이 있는지를 예측함
    • 데이터의 각 행은 환자에 대한 정보를 제공(4,908개)
    • 총 12개의 속성으로 구성
      • 설명 변수 : 11개
      • 종속 변수 : 1개

    EDA(1/11) – dataset preview(1/2)

    image

    EDA(2/11) – dataset preview(2/2)

    image

    EDA(3/11) – statistical info

    image

    EDA(4/11) – numerical distplot(1/3)

    image

    EDA(5/11) – numerical boxplot(2/3)

    image

    EDA(6/11) – numerical scatterplot(3/3)

    image

    EDA(7/11) – categorical count plot(1/3)

    image

    EDA(8/11) – categorical hue(2/3)

    image

    EDA(9/11) – categorical violin plot(3/3)

    image

    EDA(10/11) – before processing missing values(1/2)

    image

    EDA(11/11) – after processing missing values(2/2)

    image

    데이터 전처리

    • 불필요한 설병변수 제거 : 식별자(id), 결혼 여부(ever_married), 직업 형태(work_type), 주거 형태(residence_type)
    • 일부 범주형 변수에 대한 one-hot 인코딩을 적용 → 흡연 상태(smoking_status), 성별(gender)
    • train_x_data, train_y_data, test_x_data, test_y_data split → 6:4
    • 종속 변수에서 뇌졸증을 앓는 사람들의 데이터가 매우 적음 → 오버샘플링(over sampling) 적용

    모델 구축 : Logistic regression, Decision tree classifier, Random forest

    Logistic regression(1/2)

    image

    Logistic regression(2/2)

    image

    • Stats model → Logit()

    Decision tree(1/2)

    image

    Decision tree(2/2)

    image

    Random forest(1/2)

    image

    Random forest(2/2)

    image

    Conclusion

    모델

    • 모델의 관점에서 동일한 3,760개의 test_set으로 분류를 진행한 결과 ① Random Forest, ② Decision Tree Classifier, ③ Logistic Regression 순서로 성능이 우수함

    해석

    • Logistic Regression : age(나이), hypertension(고혈압), avg_glucose_level(혈액의 평균 포도당 수치), smoking_status(흡연 여부)
    • Decision Tree Classifier : age(나이), bmi(체질량 지수), avg_glucose_level(혈액의 평균 포도당 수치), smoking_status(흡연 여부)
    • Random Forest : age(나이), bmi(체질량 지수), avg_glucose_level(혈액의 평균 포도당 수치), smoking_status(흡연 여부)

    → 모델에서 공통적으로 age, avg_glucose_level, bmi가 중요한 변수로 도출되었으며, 나이, 포도당 수치, 체질량 지수와 같이 생활습관과 관련된 변수들이 뇌졸증 발생 여부와 밀접하게 관련됨을 확인하였으며, 이외에도 공통으로 확인된 생활습관 변수로는 흡연 여부가 존재

    → EDA에서는 지병과 관련된 hypertension(고혈압), heart_disease(심장병)의 변수가 중요 변수로 선택되었으나, 해당 데이터 셋에서는 상대적으로 뇌졸증과 큰 관련성이 없음

    → 결론적으로 뇌졸증 발생 여부의 경우 환자가 가지고 있는 지병의 영향보다는 생활습관이나 자연현상과 요인들이 밀접한 관련성이 있음

    Visit original content creator repository https://github.com/shinho123/Data-mining-project—stroke-prediction
  • Data-mining-project—stroke-prediction

    Data-mining-project—stroke-prediction

    데이터 마이닝 개인 프로젝트 수행 – 뇌졸증 환자 예측 모델 구축

    수행기간 : 2022.03.03 ~ 2022.05.24

    분석 데이터 : Stroke dataset

    image

    • 뇌졸증은 뇌에 혈액을 공급하는 혈관이 막히거나 터져서 뇌 손상이 오고 그에 따른 신체장애가 나타나는 질환임

    • 뇌졸증 증상의 반복으로 인해 뇌가 손상받게 되면 치매로 이어질 수도 있음

    • 치료가 늦어지면 뇌 손상이 광범위해서 혈관이 열리더라도 증상 호전이 어려움

    • 따라서 뇌졸증을 조기에 예방하고 발견하는 작업이 매우 중요함

    • 위험인자

      • 고혈압, 당뇨병, 심장병, 일과성 허혈증, 뇌졸증의 과거력, 고지혈증
    • 생활습관

      • 흡연, 과음, 운동부족, 비만, 과도한 스트레스

    Stroke data info

    image

    • Stroke datset은 성별, 연령, 다양한 질병, 흡연 상태와 같은 입력 매개변수를 기반으로 환자가 뇌졸증에 걸릴 가능성이 있는지를 예측함
    • 데이터의 각 행은 환자에 대한 정보를 제공(4,908개)
    • 총 12개의 속성으로 구성
      • 설명 변수 : 11개
      • 종속 변수 : 1개

    EDA(1/11) – dataset preview(1/2)

    image

    EDA(2/11) – dataset preview(2/2)

    image

    EDA(3/11) – statistical info

    image

    EDA(4/11) – numerical distplot(1/3)

    image

    EDA(5/11) – numerical boxplot(2/3)

    image

    EDA(6/11) – numerical scatterplot(3/3)

    image

    EDA(7/11) – categorical count plot(1/3)

    image

    EDA(8/11) – categorical hue(2/3)

    image

    EDA(9/11) – categorical violin plot(3/3)

    image

    EDA(10/11) – before processing missing values(1/2)

    image

    EDA(11/11) – after processing missing values(2/2)

    image

    데이터 전처리

    • 불필요한 설병변수 제거 : 식별자(id), 결혼 여부(ever_married), 직업 형태(work_type), 주거 형태(residence_type)
    • 일부 범주형 변수에 대한 one-hot 인코딩을 적용 → 흡연 상태(smoking_status), 성별(gender)
    • train_x_data, train_y_data, test_x_data, test_y_data split → 6:4
    • 종속 변수에서 뇌졸증을 앓는 사람들의 데이터가 매우 적음 → 오버샘플링(over sampling) 적용

    모델 구축 : Logistic regression, Decision tree classifier, Random forest

    Logistic regression(1/2)

    image

    Logistic regression(2/2)

    image

    • Stats model → Logit()

    Decision tree(1/2)

    image

    Decision tree(2/2)

    image

    Random forest(1/2)

    image

    Random forest(2/2)

    image

    Conclusion

    모델

    • 모델의 관점에서 동일한 3,760개의 test_set으로 분류를 진행한 결과 ① Random Forest, ② Decision Tree Classifier, ③ Logistic Regression 순서로 성능이 우수함

    해석

    • Logistic Regression : age(나이), hypertension(고혈압), avg_glucose_level(혈액의 평균 포도당 수치), smoking_status(흡연 여부)
    • Decision Tree Classifier : age(나이), bmi(체질량 지수), avg_glucose_level(혈액의 평균 포도당 수치), smoking_status(흡연 여부)
    • Random Forest : age(나이), bmi(체질량 지수), avg_glucose_level(혈액의 평균 포도당 수치), smoking_status(흡연 여부)

    → 모델에서 공통적으로 age, avg_glucose_level, bmi가 중요한 변수로 도출되었으며, 나이, 포도당 수치, 체질량 지수와 같이 생활습관과 관련된 변수들이 뇌졸증 발생 여부와 밀접하게 관련됨을 확인하였으며, 이외에도 공통으로 확인된 생활습관 변수로는 흡연 여부가 존재

    → EDA에서는 지병과 관련된 hypertension(고혈압), heart_disease(심장병)의 변수가 중요 변수로 선택되었으나, 해당 데이터 셋에서는 상대적으로 뇌졸증과 큰 관련성이 없음

    → 결론적으로 뇌졸증 발생 여부의 경우 환자가 가지고 있는 지병의 영향보다는 생활습관이나 자연현상과 요인들이 밀접한 관련성이 있음

    Visit original content creator repository https://github.com/shinho123/Data-mining-project—stroke-prediction
  • Instagram-Like-Bot

    Instagram-Like-Bot

    Follow me on Twitter Star this repository ko-fi

    A simple Instagram like bot that likes posts based on the hashtags you provide. Helps with getting back likes and gaining followers who share the same interests as you.

    I’ve chosen to go with a minimalistic UI.

    UI Screenshot

    Run pip install -r requirements.txt in your shell.

    Requirements:

    • Python 3.6 or higher
    • PyQt5, for building/editing the UI sudo apt-get install qt5-default
    • Kivy, for devloping the GUI.
    • Selenium, for web automation.
    • webdriverdownloader, for downloading geckodriver for Firefox. You’re free to use any browser, but you’ll have to make the appropriate changes in main.py.

    Usage

    1. Run main.py.
    2. The UI will open up. Enter all the inputs. Rest assured, your password is safe.
    3. Click on the ‘Submit’ button and wait a few seconds.
    4. Sit back and watch how the bot goes.

    Contributing

    Here’s how you can contribute to the project:

    • Help with building the Android app. The debug version has been put up as a release, but it crashes every time I try to load the app.
    • Open up issues.
    • Open up pull requests.
    • Fix bugs in the code.
    • Help with the documentation.

    Reach out to me on:

    1. Twitter
    2. Instagram
    3. Email kevinam99@gmail.com
    Visit original content creator repository https://github.com/kevinam99/Instagram-Like-Bot
  • hugo-theme-minos

    Visit original content creator repository
    https://github.com/apemost/hugo-theme-minos

  • Poc-Java-Sqs-DynamoDB-

    Poc-Java-Sqs-DynamoDB-

    Link api utilizada:
    https://jsonplaceholder.typicode.com/posts
    https://jsonplaceholder.typicode.com/posts/1

    Localstack: https://github.com/localstack/localstack

    Faça um clone do projeto atual e deste https://github.com/Ratkovski/Poc-Java-Sqs-DynamoDB-Consumer- para que ambos se comuniquem:

    Esta aplicação tem por finalidade fazer uma consulta pegar as informações de determinado userID e publicá-las com o amazon sqs em filas de mensagens que ficam esperando esperando processamento.

    E a aplicação https://github.com/Ratkovski/Poc-Java-Sqs-DynamoDB-Consumer- terá como objetivo escutar e consumir estes dados gravando no banco.

    Caso não tenha o docker

    Download -> https://www.docker.com/products/docker-desktop

    Configurações adicionais -> https://docs.microsoft.com/en-us/windows/wsl/install-manual

    Ficou com dúvidas de como instalar siga o tutorial do youtube:
    https://www.youtube.com/watch?v=oQ08ZaOAiGU&ab_channel=CaravanaCloud

    Como rodar a aplicação

    Dentro do projeto onde se encontra o arquivo docker-compose.yml rode o comando do docker para subir as configuraçoes do localstack:

    docker-compose up  
    

    Estes dois comandos abaixo servem para forçar a deletar imagens ou containers do docker que possam causar conflito
    Comando do docker-compose para limpar os containers

    docker container prune  
    

    Comando do docker compose para limpar as imagens

    docker images prune 
    

    Baixe e instale a aws cli:
    https://docs.aws.amazon.com/pt_br/cli/latest/userguide/install-cliv1.html

    Verifique se esta funcionando com:

    aws --version
    

    Comandos para configurar a aws.

    aws configure
    AWS Access Key ID [None]: fakeAcessKey
    AWS Secret Access Key [None]: fakeAcessSecret
    Default region name [None]: sa-east-1
    Default output format [None]: json
    

    Criando uma fila:

    aws --endpoint-url=http://localhost:4566 sqs create-queue --queue-name fila_dados
    

    Criando uma stack:

    aws cloudformation create-stack --stack-name jsonstack --template-body file://resource.yml --region sa-east-1 --endpoint-url http://localhost:4566
    

    Listando tabelas do dynamodb:

    aws dynamodb list-tables --endpoint-url http://localhost:4566
    

    Listando os dados do banco:

    aws dynamodb scan --table-name posts --endpoint-url http://localhost:4566
    

    Exemplo de requisição: GET:

    http://localhost:8081/posts/1
    

    Visit original content creator repository
    https://github.com/Ratkovski/Poc-Java-Sqs-DynamoDB-

  • Sensor-Human-Action-Recognition-Model

    Sensor Based Human Action Recognition using Smartwatch

    Simple sensor based human action recognition end-to-end pipeline using Bi-LSTM model. We collect the dataset using our own smartwatch wear os sensor data collecter as you can check here. Our dataset consists of accelerometer and gyroscope from smartwatch data with the action of Walking, Standing, Jumping, and Falling, you can make and use your own dataset as well.

    Dependencies

    • Tensorflow 1.14

    Method


    Human action recognition for wearable sensor data is conduct by using bidirectional long-short term memory (Bi-LSTM) to capture the long-term dependencies of hand movement and automate feature extraction from raw sensor inputs and multilayer perceptron as the classifier of each activity classes. In order to train our Bi-LSTM model, we do not perform any hand-crafted feature pre-processing and directly split each collected data into a number of windows. Through the experiment of different window sizes, in our case, we find the optimal window size is about 120 Hz with a step size of 20Hz. The Bi-LSTM learns to map and predict each window sensor data to an activity as shown in figure above.

    Deployment

    You can save the model as frozen protobuf file and use our action recognition wear os application here
    .

    Visit original content creator repository https://github.com/farhantandia/Sensor-Human-Action-Recognition-Model
  • MPU_9250_Calibration

    Main Motivation

    The purpose of this repo is to serve as a guideline of how to properly use the calibration functions in the @bolderflight MPU9250 library.

    Credit also rightfully goes to @GiovanniCmpaner for clarifying how to properly use the calibrateAccel() function. A reference link is provided where the discussion was brought up on how to use the calibrateAccel() function properly.

    Reference links :

    This repository has two versions of the same code for those who prefer using the Arduino IDE, and for those who prefer using Visual Code with the Platform IO extension.

    [PLEASE KEEP IN MIND]

    If you’re using the Arduino IDE and the Teensy 4, you’ll have to DECREASE the clock speed by going to :

    • Tools –> CPU Speed –> 150 Mhz

    For some reason if you’re using VS Code with the Platform IO extension, you’ll HAVE to include the following in the platformio.ini file :

    • monitor_speed = 115200

    • board_build.f_cpu = 60000000L


    Wire Hook Up

    KEEP IN MIND THE MPU9250 IS A 3.3V TOLERANT BREAKOUT BOARD

    The wiring table below was based on the pinout from a Teensy 4 board.

    MPU Breakout Board Pin Teensy Pin Function
    VCC 3.3 V Power
    GND GND Common Ground
    SCL/SCLK 13 I2C Serial Clock / SPI Serial Clock Pin
    SDA/SDI 11 I2C Serial Data / SPI Serial Data Pin
    EDA N/A I2C Serial Data Input
    ECL N/A I2C Master Serial Clock
    ADO/SDO 12 I2C Address / Serial Data Out Pin
    INT GND Interrupt Pin
    NCS (CS) 10 Chip Selection Pin
    FSYNC GND Frame Synchronisation Input Pin

    The SPI communication protocol was used between the Teensy board and the MPU 9250.

    NCS is just a different way of notating that particular pin on the MPU 9250 is the Chip Select (CS) pin.

    When the NCS/CS pin recieves a LOW signal from the Teensy, communication between the two devices is initialized and the IMU data is sent TO the Teensy board.

    If multiple MPU 9250’s were to be used (Or any sensor that’s using SPI in general), the NCS/CS pins from each MPU 9250 would have to be ‘attached’ to a different digital pin on the Teensy.

    Specifying the digital pin to be used to send the LOW signal to the MPU 9250 is done through the SPI object declaration, which by “default” in this program is pin 10 as shown in the code snippet below.

    MPU9250 IMU(SPI, 10);

    The other pins such as the SCL,SDA,ADO can be attached to the same breadboard nodes with the other MPU 9250’s

    image


    Overview of calibration program

    A series of print statements are used throughout the program to notify the user where they are in the calibration process.

    After serial communication is established, the function IMU.begin() should return TRUE if nothing is wrong, which if that’s the case, the serial monitor or terminal you’re using will prompt the user to press ENTER to start calibrating the acceleromotor.

    image


    Overview of calibration functions

    IMU.calibrateAccel();

    Calibrating the acceleromotor involves placing the sensor in six different stationary positions similar when looking at the six different faces of a single dice.

    After pressing ENTER a countdown will start.

    Once the calibration for that iteration is done, the user will be prompted to change the sensor orientation and notified which iteration (out of 6) they’re on.

    After all six iterations are done, the user will be prompted both the bias and scale factors which are then applied.


    IMU.calibrateGyro();

    The user will be prompted again to press ENTER to initiate the gyroscopic calibration (which happens A LOT faster and is only done once).

    Once the gyro calibratoin is done, both the gyro scale and bias factors will be applied to the sensor.


    IMU.calibrate();

    During the magnetometer calibration, the MPU 9250 MUST be continuously and slowly moved in a figure 8 motion.

    Once enough data is collected, both the bias and scale factors for the magnetometer will then be applied.


    Pictured below is a high level diagram of what’s going on while the program is running.

    image

    Repository Folder Contents

    In the Basic_IMU_Ouput folder are two subfolders:

    • Basic_IMU_Output_Arduino
    • Basic_IMU_Output_Arduino_VS_Code

    The main purpose of these programs is to provide a quick way to check if your SPI wiring is correct.

    So…Did the calibration even worked?

    Looking at the output data alone, it’s extremely hard to tell if the calibration worked or not.

    So to determine if it did or not, I :

    • Uploaded either the Basic_IMU_Output_Arduino/Basic_IMU_Output_VS_Code to the Teensy.

    • Took the MPU 9250 and made circular/figure 8 motions/movements as shown in the gif below.

    • Took the uncalibrated gryoscopic/acceleromotor/magnetometer data that was displayed on the serial monitor/terminal copy and pasted the values into a txt file.

    • Imported the data from the txt to an Excel spreadsheet.

    • Created a line graph with the data provided.

    • Repeated the same steps with after calibrating the MPU 9250.

    And the results were as followed.

    image

    image

    image

    image


    Conclusion

    Judging by the generated Excel sheets along with my limited knowledge and experience with Internal Measurement Units (IMUs) like the MPU 9250, it’s extremely hard to tell if the calibration is working or not.

    But circling back to my original point of creating this repository was to provide a guide/framework for those who are using bolderflight’s library and whatever IMU/MPU sensor the user has on hand.

    As a academically trained Biomedical engineer, for those who have comments/suggestions/corrections, I would love to hear back from y’all as I’m still learning alot myself as I dive deeper into the Embedded engineering world.

    Visit original content creator repository https://github.com/Digital1O1/MPU_9250_Calibration
  • MPU_9250_Calibration

    Main Motivation

    The purpose of this repo is to serve as a guideline of how to properly use the calibration functions in the @bolderflight MPU9250 library.

    Credit also rightfully goes to @GiovanniCmpaner for clarifying how to properly use the calibrateAccel() function. A reference link is provided where the discussion was brought up on how to use the calibrateAccel() function properly.

    Reference links :

    This repository has two versions of the same code for those who prefer using the Arduino IDE, and for those who prefer using Visual Code with the Platform IO extension.

    [PLEASE KEEP IN MIND]

    If you’re using the Arduino IDE and the Teensy 4, you’ll have to DECREASE the clock speed by going to :

    • Tools –> CPU Speed –> 150 Mhz

    For some reason if you’re using VS Code with the Platform IO extension, you’ll HAVE to include the following in the platformio.ini file :

    • monitor_speed = 115200

    • board_build.f_cpu = 60000000L


    Wire Hook Up

    KEEP IN MIND THE MPU9250 IS A 3.3V TOLERANT BREAKOUT BOARD

    The wiring table below was based on the pinout from a Teensy 4 board.

    MPU Breakout Board Pin Teensy Pin Function
    VCC 3.3 V Power
    GND GND Common Ground
    SCL/SCLK 13 I2C Serial Clock / SPI Serial Clock Pin
    SDA/SDI 11 I2C Serial Data / SPI Serial Data Pin
    EDA N/A I2C Serial Data Input
    ECL N/A I2C Master Serial Clock
    ADO/SDO 12 I2C Address / Serial Data Out Pin
    INT GND Interrupt Pin
    NCS (CS) 10 Chip Selection Pin
    FSYNC GND Frame Synchronisation Input Pin

    The SPI communication protocol was used between the Teensy board and the MPU 9250.

    NCS is just a different way of notating that particular pin on the MPU 9250 is the Chip Select (CS) pin.

    When the NCS/CS pin recieves a LOW signal from the Teensy, communication between the two devices is initialized and the IMU data is sent TO the Teensy board.

    If multiple MPU 9250’s were to be used (Or any sensor that’s using SPI in general), the NCS/CS pins from each MPU 9250 would have to be ‘attached’ to a different digital pin on the Teensy.

    Specifying the digital pin to be used to send the LOW signal to the MPU 9250 is done through the SPI object declaration, which by “default” in this program is pin 10 as shown in the code snippet below.

    MPU9250 IMU(SPI, 10);

    The other pins such as the SCL,SDA,ADO can be attached to the same breadboard nodes with the other MPU 9250’s

    image


    Overview of calibration program

    A series of print statements are used throughout the program to notify the user where they are in the calibration process.

    After serial communication is established, the function IMU.begin() should return TRUE if nothing is wrong, which if that’s the case, the serial monitor or terminal you’re using will prompt the user to press ENTER to start calibrating the acceleromotor.

    image


    Overview of calibration functions

    IMU.calibrateAccel();

    Calibrating the acceleromotor involves placing the sensor in six different stationary positions similar when looking at the six different faces of a single dice.

    After pressing ENTER a countdown will start.

    Once the calibration for that iteration is done, the user will be prompted to change the sensor orientation and notified which iteration (out of 6) they’re on.

    After all six iterations are done, the user will be prompted both the bias and scale factors which are then applied.


    IMU.calibrateGyro();

    The user will be prompted again to press ENTER to initiate the gyroscopic calibration (which happens A LOT faster and is only done once).

    Once the gyro calibratoin is done, both the gyro scale and bias factors will be applied to the sensor.


    IMU.calibrate();

    During the magnetometer calibration, the MPU 9250 MUST be continuously and slowly moved in a figure 8 motion.

    Once enough data is collected, both the bias and scale factors for the magnetometer will then be applied.


    Pictured below is a high level diagram of what’s going on while the program is running.

    image

    Repository Folder Contents

    In the Basic_IMU_Ouput folder are two subfolders:

    • Basic_IMU_Output_Arduino
    • Basic_IMU_Output_Arduino_VS_Code

    The main purpose of these programs is to provide a quick way to check if your SPI wiring is correct.

    So…Did the calibration even worked?

    Looking at the output data alone, it’s extremely hard to tell if the calibration worked or not.

    So to determine if it did or not, I :

    • Uploaded either the Basic_IMU_Output_Arduino/Basic_IMU_Output_VS_Code to the Teensy.

    • Took the MPU 9250 and made circular/figure 8 motions/movements as shown in the gif below.

    • Took the uncalibrated gryoscopic/acceleromotor/magnetometer data that was displayed on the serial monitor/terminal copy and pasted the values into a txt file.

    • Imported the data from the txt to an Excel spreadsheet.

    • Created a line graph with the data provided.

    • Repeated the same steps with after calibrating the MPU 9250.

    And the results were as followed.

    image

    image

    image

    image


    Conclusion

    Judging by the generated Excel sheets along with my limited knowledge and experience with Internal Measurement Units (IMUs) like the MPU 9250, it’s extremely hard to tell if the calibration is working or not.

    But circling back to my original point of creating this repository was to provide a guide/framework for those who are using bolderflight’s library and whatever IMU/MPU sensor the user has on hand.

    As a academically trained Biomedical engineer, for those who have comments/suggestions/corrections, I would love to hear back from y’all as I’m still learning alot myself as I dive deeper into the Embedded engineering world.

    Visit original content creator repository https://github.com/Digital1O1/MPU_9250_Calibration
  • raiderio-addon

    Raider.IO Mythic Plus, Raiding, and Recruitment

    This is a companion addon to go along with the Raiding, Recruitment, and Mythic+ Rankings site, Raider.IO: https://raider.io. With this addon installed, you’ll gain access to an easy way to view Mythic Keystone scores, Raid Progress, and Recruitment status for players– all without leaving the game!

    Overview

    Simply hover over a player with your mouse, your guild roster, or even the Group Finder list where you see queued people; if they meet the minimum qualifications then you’ll see their score and best run in the tooltip.

    Raider.IO Tooltip Example

    Additionally, you can right-click players from the standard target unit frame to Copy Raider.IO URL and then easily look up their full profile on the site. With this functionality you can directly paste these URLs anywhere on Raider.IO to navigate to that player’s profile page.

    Recruitment

    With the Raider.IO Recruitment features you can now also see whether a player is looking for a guild/team, or if they are recruiting for their own guild/team. This will show up as a line in the tooltip as follows:

    Raider.IO Recruitment Example

    You can right click on any player that is recruiting and hit Copy Recruitment URL to copy a URL that you can paste into your browser to view more details of the recruitment profile.

    Because recruitment information can change regularly, we encourage people to use the Raider.IO Desktop Client to keep this data in sync.

    If you have run into any problems, check out our FAQ at https://raider.io/faq, or join us on Discord at: https://discord.gg/raider in #addon-discussions — we always have people around willing to help.

    Become a Patron

    Getting Started

    The easiest way to get started is to use the RaiderIO Desktop Client: https://raider.io/addon

    Once installed you can load into the game and you will start seeing Mythic+, Raiding, and Recruitment details on players around you. This AddOn works by storing a snapshot of character data from Raider.IO and then using that to populate information on qualified players.

    To qualify for inclusion in a snapshot, players must meet specific criteria based on the type of data:

    Mythic Plus

    • Have earned at least 200 points in the current or previous season. Honored and higher patrons do not have a minimum score requirement in order to be shown in the addon.
    • Have logged in to the game within the past 14 days

    Raiding

    • Have defeated at least 30% of the bosses (rounded up) in either Normal, Heroic, or Mythic

    Recruitment

    • All active and public recruitment profiles are available in-game

    Remember: We update the addon with the latest scores and top runs multiple times each day. Update regularly to ensure you are seeing the freshest information. Using the RaiderIO Desktop Client you can keep your addon updated automatically!

    Detailed Addon Usage

    Our intent with this AddOn is to provide an easy way for people to get some information at a glance when forming groups. There is no substitute for talking with your fellow players, so be a pal and listen if an applicant whispers you. These are the fields we show, and when we show them:

    Character Raid & Mythic+ Tooltips

    Raid information in tooltips simply lists the best progress seen for the player.

    Mythic+ tooltips have a lot of parts to them:

    • Raider.IO M+ Score: This is the overall score for this character. If the score is from a previous season, then the value of the score is rounded to the nearest 10s, and is prefixed with ±. You can also identify the previous season score by looking for the (S#) suffix on the tooltip headline.
    • Best Run: This will indicate the Mythic+ level for the player’s best scoring run, along with the specific dungeon. Up to three plus signs + will be prefixed to the keystone level to indicate how much the keystone was upgraded during that run. Note: when this keyword is highlighted green it means that the player’s Best For Dungeon is also the same as their overall Best Run.
    • Best For Dungeon: You’ll see this line when using LFD to form or join a Keystone group. This will show the Mythic+ level of the player’s best scoring run for the chosen dungeon.
    • Timed #+ Runs: These lines indicate how many M+ runs have been completed by this player within the timer over the course of the current season. The player’s two highest categories of Timed Runs will show by default.
    • Main's Best M+ Score / Main's Current M+ Score: This indicates the best character score on this player’s account, if they have registered on Raider.IO and linked their Battle.Net account. This will only show if the Main’s Score is greater than the current character’s score. If someone has a good score on their main, then much of their prior experience will help them perform better in dungeons while on their alt.

    Role icons included on Mythic+ tooltips can be thought of as badges earned by accumulating certain amounts of score while playing as that role. Fully opaque icons indicate they’ve earned at least 80% of their overall score in that role. Semi-transparent role icons indicate they have earned at least 40% of their overall score in that role.

    Recruitment Tooltips

    We currently determine the profile to show based on a priority order for the entity and activity type. Our overall rationale is that we want the most common organized activities to take precedence when choosing what to show in-game.

    1. Guild + Raiding (only recruiters)
    2. Guild + Guild Mythic+ (only recruiters)
    3. Team + Team Mythic+ (only recruiters)
    4. Character + Raiding
    5. Character + Guild Mythic+
    6. Character + Team Mythic+
    7. Guild + Guild PVP (only recruiters)
    8. Guild + Guild Social (only recruiters)
    9. Character + Guild PVP
    10. Character + Guild Social

    Note: Anyone in your guild who has access to the Recruitment information will show your group’s recruitment profiles in-game. Meaning, it is based on the roles given to each rank. These ranks will show the tooltip in game, and will also be able to access recruitment information on the site:

    • GM / Captain
    • Officer
    • Recruiter

    Character Profile Tooltips

    You can view your personal M+ and Raid Progress profile when you open the Dungeon Finder. This will be shown as a large tooltip alongside the Dungeon Finder frame with additional details about your per-dungeon performance.

    This can be used to help understand what dungeons you should try to focus on in order to raise your score.

    Raider.IO Profile

    By default when you are in the Dungeon Finder it will show your own profile. However, you can press a modifier key (Shift/Alt/Ctrl/Cmd) to show the target character’s full profile instead. There is also a config option to invert this behavior.

    Keystone Tooltips

    You can view additional details when hovering over Mythic+ Keystone items, such as:

    • The highest key completed for each member of your group for the dungeon you are in, or queued for.

    • Avg. Timed +# Player Score: This is the rounded median score of players who have successfully completed Mythic+ runs in time at this level. This data is sampled from the past 60 days of runs tracked on Raider.IO, and it excludes the top and bottom 1% of scores at each level. This is intended to provide a guide for the type of score you might consider when forming or joining a group based on data seen across all players.

    Group Search

    You can pull up detailed information for all the characters in your group at once by utilizing the Raider.IO Group Search feature.

    Raider.IO Group Search

    • Click the magnifying glass icon at the bottom of the Dungeon Finder
    • Copy the text in the window that pops up
    • Go to https://raider.io and hit Ctrl-V or Cmd-V to paste this while the site is in the foreground.

    This will then take you to the Raider.IO Advanced Search page for all the characters in your group.

    Copy Character Raider.IO URL

    • Click the “Copy Raider.IO URL” button
    • Copy the text in the window that pops up
    • Go to https://raider.io and hit Ctrl-V or Cmd-V to paste this while the site is in the foreground.

    This will take you to that character’s profile page.

    In-Game Character Search (Advanced)

    Raider.IO In-Game Character Search

    You can look up any character in the current database by using the /rio search command.

    When you type this, you will be presented with a small frame where you can enter the realm name and character name to search for. If they are found, then their information will be pulled up and displayed.

    You can type /rio search to hide the window.

    Configuring the AddOn

    Our recommended settings are enabled by default, but we’ve provided several options to customize how and where the tooltips might show while in-game. Type /raiderio to open the Raider.IO options frame. Alternatively, you can also find a shortcut in the Interface > AddOn settings frame.

    Here you can easily enable or disable various features, including whether to show scores from each faction, and various tooltip customization options.

    Remember to click “Save” to save the changes, or “Cancel” to abort and close the dialog.

    Score Color Tiers

    Scores map to a specific color based on their range. We’ve followed the standard WoW quality colors, but added additional gradients between the base values to provide more brackets to ascend through. These tiers are recalculated based on actual scores.

    Patreon Rewards

    Interested in supporting development of Raider.IO and getting some rewards while you’re at it? We offer multiple levels of rewards.

    Friendly:

    • Browse Raider.IO AD-FREE!
    • Friendly Patron rank in Discord

    Honored:

    • Exclusive profile header background options
    • Minimum score requirement removed from addon
    • Elevated queue priority
    • Honored Patron rank in Discord
    • Plus all rewards from Friendly tier

    Revered:

    • Desktop client updates scores 4 times a day
    • Custom Vanity URL for your guild or character
    • Queue priority elevated above Honored level
    • Revered Patron rank in Discord
    • Plus all rewards from Friendly and Honored tiers

    Exalted:

    • Desktop client updates scores 8 times a day
    • Utilize up to 2 Custom Vanity URLs
    • Queue priority elevated above Revered level
    • Automatically qualify for all locked header backgrounds
    • Exalted Patron rank in Discord
    • Plus all rewards from Friendly, Honored, and Revered tiers

    Become a Patron

    Developer API

    We love our fellow developers! We wanted to provide anyone in the community a simple way to tap into the scores that are a part of this addon. Addon developers can do this by utilizing the RaiderIO table to access certain APIs we provide.

    If the documentation is out-of-date you can also get a lot of information straight from the source code. A lot of the functionality is annotated for the sake of the lua language server extension in vscode.

    RaiderIO.GetProfile

    These functions return nil or a RaiderIOProfile table.

    RaiderIO.GetProfile("target")
    RaiderIO.GetProfile("Name", "Realm"[, region])
    

    RaiderIOProfile

    This table contains data depending on what providers are loaded. This documentation is not complete, there are several internal values but they are all based on the core data that is documented below.

    {
      success = boolean
      region = "us" | "kr" | "eu" | "tw" | "cn"
      faction = 1 | 2
      name = "Name"
      realm = "Realm"
      mythicKeystoneProfile = RaiderIOMythicKeystoneProfile | nil
      raidProfile = RaiderIORaidProfile | nil
      recruitmentProfile = RaiderIORecruitmentProfile | nil
    }
    
    RaiderIOMythicKeystoneProfile
    {
      hasRenderableData = boolean - if false pretend the table was nil instead (the database is outdated so we don't want to show inaccurate data)
      currentRoleOrdinalIndex = number
      currentScore = number
      fortifiedDungeons = number[]
      fortifiedDungeonTimes = number[]
      fortifiedDungeonUpgrades = number[]
      fortifiedMaxDungeon = RaiderIOMythicKeystoneDungeon
      fortifiedMaxDungeonIndex = number
      fortifiedMaxDungeonLevel = number
      keystoneFifteenPlus = number
      keystoneFivePlus = number
      keystoneTenPlus = number
      keystoneTwentyPlus = number
      mainCurrentRoleOrdinalIndex = number
      mainCurrentScore = number | nil
      mainPreviousRoleOrdinalIndex = number
      mainPreviousScore = number | nil
      mainPreviousScoreSeason = number
      mplusCurrent = RaiderIOMythicKeystoneRoleInfo
      mplusMainCurrent = RaiderIOMythicKeystoneRoleInfo
      mplusMainPrevious = RaiderIOMythicKeystoneRoleInfo
      mplusPrevious = RaiderIOMythicKeystoneRoleInfo
      previousRoleOrdinalIndex = number
      previousScore = number
      previousScoreSeason = number
      sortedDungeons = RaiderIOMythicKeystoneDungeonProfile[]
      sortedMilestones = Milestone[]
      tyrannicalDungeons = number[]
      tyrannicalDungeonTimes = number[]
      tyrannicalDungeonUpgrades = number[]
      tyrannicalMaxDungeon = RaiderIOMythicKeystoneDungeon
      tyrannicalMaxDungeonIndex = number
      tyrannicalMaxDungeonLevel = number
      -- metatable data dynamically assigned depending on the weekly affix
      dungeons = number[]
      dungeonTimes = number[]
      dungeonUpgrades = number[]
      maxDungeon = RaiderIOMythicKeystoneDungeon
      maxDungeonIndex = number
      maxDungeonLevel = number
    }
    
    RaiderIOMythicKeystoneDungeonProfile
    {
      dungeon = RaiderIOMythicKeystoneDungeon
      level = number
      chests = 0 | 1 | 2 | 3
      fractionalTime = number - between 0.0 and 1.0
    }
    
    RaiderIOMythicKeystoneDungeon
    {
      index = number
      id = number
      instance_map_id = number
      keystone_instance = number
      lfd_activity_ids = number[]
      name = string
      shortName = string
      shortNameLocale = string
      timers = number[]
    }
    
    RaiderIOMythicKeystoneRole
    {
      [1] = "tank" | "healer" | "dps
      [2] = "full" | "partial"
    }
    
    RaiderIOMythicKeystoneRoleInfo
    {
      roles = RaiderIOMythicKeystoneRole[]
      score = number
      season = number | nil
    }
    
    RaiderIORaidProfile
    {
      hasRenderableData = boolean - if false pretend the table was nil instead (the database is outdated so we don't want to show inaccurate data)
      progress = RaiderIORaidProfileProgress[]
      previousProgress = RaiderIORaidProfileProgress[]
      sortedProgress = RaiderIORaidProfileSortedProgress[]
      raidProgress = RaiderIORaidProfileRaidProgress[]
    }
    
    RaiderIORaidProfileProgress
    {
      difficulty = 1 | 2 | 3
      progressCount = number
      raid = RaiderIORaidProfileRaid
      killsPerBoss = table<bossIndex, killCount>
    }
    
    RaiderIORaidProfileSortedProgress
    {
      isMainProgress = boolean
      isProgress = boolean
      isProgressPrev = boolean
      obsolete = boolean
      progress = RaiderIORaidProfileProgress[]
      tier = number
    }
    
    RaiderIORaidProfileRaidProgressInfo
    {
      count = number
      difficulty = number
      killed = boolean
    }
    
    RaiderIORaidProfileRaidProgress
    {
      current = boolean
      fated = string
      progress = RaiderIORaidProfileRaidProgressInfo
      progressCount = number
      raid = RaiderIORaidProfileRaid
      show = boolean
    }
    
    RaiderIORaidProfileRaidDungeon
    {
      index = number
      id = number
      instance_map_id = number
      lfd_activity_ids = number[]
      name = string
      shortName = string
      shortNameLocale = string
    }
    
    RaiderIORaidProfileRaid
    {
      dungeon = RaiderIORaidProfileRaidDungeon
      id = number
      mapId = number
      name = string
      shortName = string
      bossCount = number
      ordinal = number
    }
    
    RaiderIORecruitmentProfile
    {
      hasRenderableData = boolean - if false pretend the table was nil instead (the database is outdated so we don't want to show inaccurate data)
      entityType = number
      title = string[] - this locale key will yield the actual label from the locale table
      titleIndex = number
      tank = boolean
      healer = boolean
      dps = boolean
    }
    

    RaiderIO.ShowProfile

    Updates a tooltip widget and appends the character profile just like how RaiderIO does to the regular tooltips. This function uses the same arguments as RaiderIO.GetProfile except the first is the tooltip widget.

    RaiderIO.ShowProfile(tooltip, ...) => true | false - depending on if the tooltip was altered or not
    

    RaiderIO.GetScoreColor

    Returns the colors for a given score.

    RaiderIO.GetScoreColor(score) => red, green, blue - in the range of 0.0 to 1.0
    

    Deprecated

    Please refrain from using these API as they will be removed in future updates.

    RaiderIO.ProfileOutput
    RaiderIO.TooltipProfileOutput
    RaiderIO.DataProvider
    RaiderIO.HasPlayerProfile
    RaiderIO.GetPlayerProfile
    RaiderIO.ShowTooltip
    RaiderIO.GetRaidDifficultyColor
    RaiderIO.GetScore
    
    Visit original content creator repository https://github.com/RaiderIO/raiderio-addon
  • FOSScarina

    Logo

    The first app for 12 and 4 hole ocarinas that just happens to be 100% free and open-source!

    Inspiration

    While there are a lot of apps that do 4-hole ocarinas, 12-hole ocarinas have been left out in the dust. Luckily, we’re here to change that!

    What it does

    Our app emulates both 12 and 4 hole ocarinas, with plans to expand into 6 and 10 hole ocarinas in the future! Simply put your fingers on the screen, or in the case with the 12 and 10- hole ocarinas, put both thumbs on the volume buttons while pressing the rest of your fingers on the screen!

    How we built it

    We used Android Studio 3.0.0 to build a native Android app from scratch.

    Challenges we ran into

    Having never used Android Studio before, learning the ins and outs of Android on the spot was a bit difficult. In addition, we had to come up with manual implementations for several integral functions, such as sound production, that Android’s base SDK didn’t support.

    Accomplishments that we’re proud of

    While it was bumpy along the way, we managed to ship a working demo of FOSScarina with support for 4 and 12-hole ocarinas. This involved many different elements, such as sound production and the use of multiple fragments.

    What we learned

    Our crash-course in Android development!

    What’s next for FOSScarina

    Stay tuned to FOSScarina’s plans to expand into 6 and 10 hole ocarinas in the future!

    Visit original content creator repository https://github.com/negitoromaki/FOSScarina