text:
World cup 2019 so far.
Now that Bangladesh has scored 7 runs, we have our confirmed semi finalises in the cricket world cup 2019. There was a lot of calculations and jokes how Pakistan could make it to the semifinal on the basis of net run rate by beating Pakistan with 300+ runs. After all, there were so many similarities with the 1992 world cup,, how could Pakistan be eliminated in the league stage itself. Pakistan almost got eliminated in 1992 tough. Anyway as an Indian the 2nd best incentive after winning the world cup itself is beating Pakistan. Which we have been doing invariably right in every world cup encounter so far.
Personally, the history of the cricket world cup fascinates me more than anything else in the cricket. I did try to submit an article on it (Indias world cup campaign from 1975 to 1992) during 1996 world cup in my school magazine but it was rejected because it was not patriotic poetry or fictitious story. Anyway, now that we have internet and blogging social media platform we can write whatever we want. I am going to remember world cups from that point in time.
While I remember 1992 world cup in bits and pieces because adults in my house were glued to the TV for every match. I have faint memories of India beating Pakistan, everyone in the family was excited about the new guy called Sachin Tendulkar. , 1996 world cup is still fresh in my memory. I remember collecting scorecards from The Asian Age newspaper, pretty much from every match, including the final when India had already lost to Sri Lanka in Eden Gardens and for one of few times all Indians supported Australia in a match which is not against Pakistan.
1999 was in England, quite a strange system of qualifying for Semi finals calls Super Six, even more surprisingly Australia qualifying for final after the tied semi-final. We saw some massive partnerships from Indian batting tri who was in top 3 for ICC ratings for quite a long time. But a mere loss to Zimbabwe in the last Olonga over in the league stage probably cost India a lot.
2003 India were in final but honestly Australian team of that time was too powerful to be beaten in a world cup final.
2007 probably everyone wants to forget, right from India's loss to Bangladesh and Pakistan coach's death, except India scored 400+ in a match against Bermuda.
2011, back hope Indian team did it. It was about time. Tendulkar wasn't going to play any more world cups. First time after a long time, the world cup could be taken away from Australia.
2015, Aussies were back, it was their home turf after all. India was a string team who did not really lose any match till Australia eliminated them in Semi Final.
Now in 2019, the world cup is back to the home of cricket, England. We don't have any associate nations after a long time. No Zimbabwe, West Indies barely made it to the tournament beating Scotland in a qualifier match with help of a bad decision and D/L method. West Indies started with a massive win over Pak, chasing down in 13+ overs, but soon they started declining. That match probably cost Pakistan them in NRR for qualifying.
England who player wonderful cricket after being eliminated in the group stage in 2015, has a real chance. They have a very attacking batting line up with a habit of making 350+ scores more often than not in recent times. I can't really call it a home advantage as its not 1990's that teams, especially South Asian ones are not familiar with English condition, also most of the crowd are from South Asia. So India/Pak/SL/Ban has probably more advantage in England.
South Africa, has been really unpredictable lately but from the league matches, it seemed they are no more "choking", they are predictably performing badly. Bringing back ABD may not be a solution either. They need to find the new ABDs, Steyns and the Morkels.
Sri Lanka has been one of the worst performers since the Sanga/Jaywardhena/Dilshan trio has gone. We did not really expect them to be one of the leaders in the points table.
What rise of Australia, initially I predicted they can't make it to Semis. But as I write this, they are the toppers. Return of Warner and Smith has made the team as strong as they were one year ago if not stronger as the tournament progressed. While every team has a very good batting line up, the differentiating factor has been the key bowlers taking wickets. Aus's Starc and India's Bumrah are the once taking their team to top.
India, as usual, has a great pool of players. They have been doing well except Dhawan's injury who is an ICC tournament expert and Vijay Shanker's failed experiment. Indian spinner duo hasn't been effective to live up to the hype but fortunately, Shami getting back some rhythm. When in England, play the seamers, not everyone is Shane Warne.
It would be interesting to see how India performs against England who has beaten them in the group stage and NZ, who have beaten them in warm-ups.
Can England finally win a world cup?
Will New Zealand be again as Semifinal team?
Or, same old story, it's going to be Aussies.
No matter what, 1992 is not releasing :) and India has beaten Pakistan, rest does it matter at all?
Nevertheless, this world cup will be memorable because of the timings where you can enjoy most of the matches after work and BBC Test Match Special commentary.
More cricket talk please subscribe to our amateur cricket podcast Well Of Course.
Cricket CWC19 Sachin Tendulkar World Cup
Load Testing Using Gatling
Gatling is an open source load testing framework based on Scala programming language. One of the advantage of Gatling over other load testing framework that I have used is that the code is very elegant and readable, thanks to its own DSL. One may not have prior knowledge of Scala to get started with Gatling. There are some documentation in the Gatling website which will help you write simple HTTP calls to your webservices but it gets bit difficult to incorporate the exact scenario of your test case because there are not much variety of example code which you can quickly edit and use. In this article I will try to show most of the structural construct that are frequently used while making a series of dependent web-service calls, typically used by a mobile game client while interacting with the game server.
Setup instructions are well described in the getting started tutorial. Following scala code will make a POST request to a mock REST endpoint that I have created using mockable.io.
Bengali English word definition in Google Dictionary
It was good to see that Google Dictionary supports Bengali Language along with Hindi , Gujarati, , Marathi and Other south Indian Languages (Malayalam , Kanada , Telegu , Tamil)
http://www.google.com/dictionary?aq=f&langpair=bn|en&q=অভিঘাত+&hl=en
Similarly most of the Bengali words' english meaning can be determined as follows
http://www.google.com/dictionary?aq=f&langpair=en|bn&q=irony&hl=en
However the Bengali font size was so small that I had to Ctrl + "+" to make them properly visible.
I hope Only major remaining language Oriya will follow up.
This feature might be available shortly as part of other features of Google Search bar.
Automatically Deploying to Google Appengine from Github using Cloud Build
When it comes to CI/CD pipeline, Jenkins is one of the popular tools that a lot of software companies use. With google cloud build one can build and deploy their app right from source repository like GitHub to AppEngine. It's a pay as you go service. However the first 120 build-minutes per day is free, so one can very easily try for their side projects where the deployment frequency is not more than a few times a day. However its always a good idea to limit your billing account and have alerts on usage in case it goes over the free tier due to some build stuck and running indefinitely. Here we will take an example of a go based appengine standard project.
First, to have Cloud Build be able to deploy to appengine we need to give the service account it's going to use the roles that are required.
Find the project id
NUM=$(gcloud projects describe $PROJECT \ --format="value(projectNumber)") && echo ${NUM}
Derive the service account name from the project id and as…
We have a world chamipon !


text:
Q: $output displays incorrectly I got an issue where I run a foreach loop I want it to just display what's in the array() but when I output the loop it displays "arrayclient" instead of just client. What am I doing wrong?
<?php
            $data_array = array("client","task","brand");

            $output = '
';

            foreach($data_array as $data) {
                $output .= '
';
                $output .= '";
                $output .= '
'. $field = get_field_object($data);
                $output .= $field['label']. '
';
                $output .= '
'. $field['value']. '
';
                $output .= '
';
            }
            $output .= '
';
            echo $output;
            ?>

the reasonsing with $field = get_field_object($) is because i'm using a plugin to make custom fields on a post and want those fields to display because "client","task", and "brand" are those field labels.

A: Can you try
$field = get_field_object($data);
$output .= '
'. $field;

instead of
$output .= '
'. $field = get_field_object($data);

?
No clue what get_field_object does. It seems not to be a function that appears in the PHP reference. It would be helpful if you posted its' code.
Can you also provide the full output please?

A:  $output .= '
'. $field = get_field_object($data);
            $output .= $field['label']. '
';

Should be
  $field = get_field_object($data);
  $output .= '
'.$field['label'].'
';

A: You should use rather:
$output .= '
'. $field = get_field_object($data)[0];

Instead of:
$output .= '
'. $field = get_field_object($data);

As with other custom fields WordPress allows to exist several field values with the same key, so you have to specify which one you wish to output.

A: Thanks for the help everyone! I did try each and it seemed that the info that KutePHP gave seemed to work best. Here is my final code.
<?php
            $data_array = array("client","task","brand");
            $output = '
';

            foreach($data_array as $data) {
                $output .= '
';
                $output .= '";
                $field = get_field_object($data);
                $output .= '
'.$field['label'].'
';
                $output .= '
'.$field['value'].'
';
                $output .= '
';
            }
            $output .= '
';
            echo $output;
            ?>

redpajama_set_name: RedPajamaStackExchange


TicPods Free review - promolista!
When you think of true wireless headphones, chances are that the Apple AirPods spring to mind – and for good reason, with the popularity of Apple's buds paving the way for a multitude of new products to infiltrate the market.
While we were fans of the Apple AirPods, one of the biggest downsides of the earphones is the fact that they are only compatible with Apple's own voice assistant, Siri.
That's where the TicPods Free come in – from the minds behind the Ticwatch Pro, Ticwatch S and Tichome Mini , they've been cited as a more flexible alternative to the AirPods, coming in a range of colors, and enabled for Google Assistant and Amazon Alexa, as well as Siri.
Following a successful crowdfunding campaign, the TicPods Free are available to buy now from the Mobvoi website for $129 (£119 / AU$199).
Compared to the Apple AirPods, they are around $30 (£40 / AU$30) cheaper – not a huge saving, but based on the specs of the TicPods Free, you do get a lot for your money, with support for multiple voice assistants, active noise cancellation, and noise isolation.
If you're not looking to spend that much on earbuds, you can find pairs for under $100 like the Optoma NuForce BE Free5, but most retail between $100 – $200.
With any true wireless headphones, it's inevitable that comparisons with the Apple AirPods will be made, but the earbuds here are much bigger than Apple's alternative. We found they sit comfortably in the ear when you're listening to music and won't easily shake out – although it would be nice to see more than one other earbud size included in the box, as one size never fits all.
The TicPods Free have stems that sit out of your ear that contain the battery and touch controls. You can run your finger along the one on the right to change the volume, plus you can double tap to skip a track or hold your finger for a few seconds to boot up your voice assistant and ask a question.
Similar to the AirPods, the stems are pretty long – so if you're not a fan of that look, you probably aren't going to like these in-ears. Although having longer stems means that it's easier to use swipe gestures, we felt that they did look a little unwieldy and that they could be designed to look more discreet.
The case feels well-made with a snap-shut close, and small LED's on the front that light up green when you open it and while charging.
With an IPX5 water resistant rating, you'll find the earbuds will be resistant to both rain and sweat, but we wouldn't recommend dropping them in a puddle as it may cause some issues.
You have the choice of three colors too with the headphones being sold in either white, dark blue or red (but we found the red shade to be more orange than you'd expect, which is worth bearing in mind if you're thinking of buying them).
All three of the colors look good, but we'd opt for the dark blue ones if you're looking for a more discreet look – and if you're looking for a convincing AirPods dupe, stick with the white.
One of the biggest benefits here is that the TicPods Free will work with whatever default voice assistant you have on your phone. They work with Siri, Google Assistant and Alexa, depending on what one you have up and running on your phone – we tried them out with both Android and iOS devices, and found that the Bluetooth connectivity worked well, and we had no problems communicating with voice assistants using the earphones.
Making calls with the TicPods was fine, however the inbuilt mic isn't the most powerful in the world, and they can make you sound slightly distant to the person on the other end of the line.
We really like the touch controls on the sides of the stems, and found them to be really intuitive, with simple swipe and tap gestures designed to control music playback, Bluetooth, and voice assistant connectivity.
Functionality such as in-ear detection is here too, so once you place them in your ear you're automatically be greeted with what you were last listening to, which is handy.
To pause your music, you just need to remove the right earbud, meaning you don't need to fumble around for your phone if you want to stop listening.
In terms of audio quality, we felt the TicPods Free performed pretty well, with a good balance across treble, mid, and bass frequencies, and a decent amount of sonic power behind them.
However, we did notice a touch of distortion when using them at higher volumes, with guitar-based tracks in particular sounding slightly grainy – although bass guitars sounded warm and rounded. We tried them on Hazel English's 'More Like You' and we were impressed by the clarity of the different sonic layers and frequencies.
We also tested them with some synthy pop in the form of Bruno Mars' '24K Magic', and we were pleasantly surprised by the forcefulness of the bass – enough to make you want to tap your foot, but not so much that it overpowers the vocals and keys.
There's ambient noise cancellation at play as well as noise isolation, which we found to be quite effective at drowning out a fair level of environmental noise, in everywhere from the office to noisy trains.
Although Mobvoi claims the earbuds themselves will last for four hours from a single charge, we found it was closer to three – and that was without music constantly playing.
To get that much juice you'll have to charge them for 40 minutes, but the wireless charging case itself offers an extra 14 hours too and it comes with fast-charging built-in as well, which is great if you're on the go.
That's not as good as the AirPods, which we found last for five hours from a single charge, but it's worth bearing in mind that the TicPods Free are cheaper.
The TicPods Free offer everything that makes the rival true wireless headphones great, but here it's for a slightly lower price and the big benefit is its much wider compatibility.
The audio quality was impressive, and although guitars sometimes sounded a little grainy, it's a small price to pay for the amount of sonic power you get with these in-ears.
Of course, in-ear headphones are unlikely to appeal to true audiophiles as they are rarely as good as high-end over-ears, but if you're a casual listener, the TicPods Free will do just fine.
It's pretty clear that the TicPods Free were designed to look like the Apple AirPods, and if that's a style you like, these earbuds will probably suit you down to the ground.
We found they were fairly comfortable to wear – although if your ears are on the smaller side, you may find the casing digs into the conch part of your ear after a while.
The fact you can still use these on your iPhone, as well as Android phones, makes the TicPods Free a great alternative to the Apple AirPods and the audio quality, design and battery life all add up to make a good product in its own right.


text:
Porsgrunn er en bykommune i Vestfold og Telemark fylke i Norge. Kommunen omfatter de tidligere bykommuner Brevik og Porsgrunn og landkommunen Eidanger. Porsgrunn grænser i nord til Skien og Siljan, i øst til Larvik i Vestfold, og i vest til Bamble. Højeste punkt er Fjerdingen, 360 moh. Kommunen er en del af det område som kaldes Grenland.

Porsgrunn by ligger ved udløbet af Telemarksvassdraget og er en vigtig industriby. Den har fået navn efter en grund i Porsgrunnselven som var bevokset med pors (Myrica gale).

Porsgrunn er en industriby, præget af sværindustri og kemisk industri, hvor Norsk Hydro er den største industri-arbejdsgiver. Yara, en af verdens største kunstgødningsfabrikker, ligger i byen. Porsgrunds Porselænsfabrik, Eramet og Norcem er andre vigtige virksomheder i Porsgrunn.

Kilder og henvisninger

Kommuner i Vestfold og Telemark

Kommuner i Telemark

redpajama_set_name: RedPajamaWikipedia


text:
Step-by-step class guides are on the way! The 1-12 Mulgore Guide is the first guide to get all the individual class steps. At the top of the guide, simply select which class you are playing and the page will dynamically update all the steps in the guide for that class (both text and images). The rest of the guides will be slowly updated overtime to include all the class steps, but you can see how it's going to work with the 1-12 Mulgore. I want to thank crazyK and his Placeholderguild for helping me out with the individual class content. They are allowing me to get the 1-60 Alliance guide done while also getting all the class steps done at the same time, so everything can be ready for Classic launch (hopefully).
However, that's not the full extent of Blizzard's announcement. The developer behind World of Warcraft Classic has also announced that it will release a closed beta test for chosen (note this word) players to participate in. The closed beta is meant to test Blizzard's servers, which I'm guessing will be pretty full once the game actually releases. Blizzard hopes that this beta can prepare them for a smooth launch, since this is pretty big for World of Warcraft players.
Thanks so much for the replies. I think I am somewhat of a collector/roster builder. I go around doing the dailies but I also like buying pets just for their looks. I watched hazelnutty on youtube last night. I think I will focus on doing the expeditions when I have time to get all the pets that come from that. Then I will go back and do old raids like Eekwibble suggested.
"To fill our pool of beta and stress test participants, we'll be choosing dedicated players who meet select criteria from both the WoW Classic beta opt-in and the standard Warcraft beta opt-in. Participants will also need to have an active subscription or active game time on their Battle.net Account. While opting-in to the beta is the primary way to make sure you're in the running to join the test it doesn't guarantee an invitation to the closed beta test. We may also consider additional factors such as how long a player has been subscribed to the game so that we have the right mix of players to ensure great feedback toward making WoW Classic the very best experience for the community."
This is definitely why we do a beta test. We can also do things like reset the realm at a busy time like 4:30pm PDT to try and find the source of a certain issue where a crocolisk is losing it's brain due to how multiple processes are interacting and mirroring code to form a cohesive world. There were similar types of issues like this back in 2004 but we wanted to try and resolve this one before the weekend for the folks who are testing. (Blue Tracker / Official Forums)
I am currently working full time on my Vanilla WoW leveling guides. Soon there will be a 1-60 speed leveling guide for Alliance, along with in-game guide versions available for my members area. As of right now, there is no members area, but if you would like to show support for my efforts into this project, you can simply donate to me via Patreon if you like (you will get some cool rewards in return). Or you can donate directly with PayPal if you like. All donations are highly appreciated and they will only motivate me more to continue making the best vanilla WoW leveling guides on the web.
With the Classic beta now out it seems every related article somehow manages to spark the eternal war of "Vanilla was the best WoW sucks now" and "lol nostalgia goggles, Vanilla sucked, enjoy your two weeks of Classic". I have to say, even though I understand the principles behind the battle and the reasons people behave and talk this way... I actually REALLY don't get it on a deeper level.

redpajama_set_name: RedPajamaCommonCrawl


finished project!!! So cute and so much better!!!
I love your new blog! Could you now come to my house and organize and refresh my crazy life? I totally wish I was as creative and ambitious as you are!
I have never used a tack to make a hole for brads! I must be just dumb, but I will totally do that now! ha ha Love the new canisters -- so easy and soooo lucky you found the same one!


text:
using IntuiLab.Leap.DataStructures;
using Leap;
using System.Collections.Generic;

namespace IntuiLab.Leap.Utils
{
    /// <summary>
    /// This class contains utility functions for recognition algorithms
    /// </summary>
    internal static class LeapMath
    {
        /// <summary>
        /// Calculate the direction vector of the movement perming by the finger from the startFrame frame to the endFrame frame.
        /// </summary>
        /// <param name="pointableId">The id of the finger performing the movement.</param>
        /// <param name="startFrame">The frame containing the start position of the direction vector.</param>
        /// <param name="endFrame">The frame containing the end position of the direction vector.</param>
        /// <returns>The direction vector.</returns>
        public static Vector Direction(int pointableId, IFrame startFrame, IFrame endFrame)
        {
            Vector startPosition = startFrame.Finger(pointableId).TipPosition;
            Vector endPosition = endFrame.Finger(pointableId).TipPosition;
            return (endPosition - startPosition);
        }

        /// <summary>
        /// Calculate the speed of the finger between the startFrame frame and the endFrame frame in mm/s.
        /// </summary>
        /// <param name="finger">The finger which we want to calculate the speed.</param>
        /// <param name="startFrame">The start frame.</param>
        /// <param name="endFrame">The end frame.</param>
        /// <returns>The speed in mm/s.</returns>
        public static float Speed(int pointableId, IFrame startFrame, IFrame endFrame)
        {
            Vector startPosition = startFrame.Finger(pointableId).TipPosition;
            Vector endPosition = endFrame.Finger(pointableId).TipPosition;
            return ((endPosition - startPosition).Magnitude / (endFrame.Timestamp - startFrame.Timestamp)) * 1000000; // mm/s
        }

        /// <summary>
        /// Recognizes if the movement represented by the list of directions is linear.
        /// </summary>
        /// <param name="directions">The list of the direction vectors between each point of the discretized movement.</param>
        /// <param name="verboseMode">To display the log.</param>
        /// <returns>If the movement is linear or not.</returns>
        public static bool IsLinearDirection(List<Vector> directions, bool verboseMode)
        {
            List<float> angleBetweenDirection = new List<float>();

            // We calculate the angle between each direction vector to know the trajectory of the movement
            for (int i = 1; i < directions.Count; i++)
            {
                for (int j = 0; j < i; j++)
                {
                    angleBetweenDirection.Add(directions[i].AngleTo(directions[j]));
                }
            }

            // We test if the movement is linear
            // To do so, we compare the angle between the different directions, if it is small, the direction is linear
            foreach (var angle in angleBetweenDirection)
            {
                if (angle > ParametersOther.Instance.LeapMath_maxAngleForLinearDirection) // 0.5 =~ pi/6
                    return false;
            }

            return true;
        }

        /// <summary>
        /// Recognizes if a hand is motionless for the postures.
        /// </summary>
        /// <param name="positions">The list of the successive positions of the hand.</param>
        /// <returns>If the hand is motionless or not.</returns>
        public static bool IsImmobile(List<Vector> positions)
        {
            float minX = positions[0].x;
            float maxX = positions[0].x;
            float minY = positions[0].y;
            float maxY = positions[0].y;
            float minZ = positions[0].z;
            float maxZ = positions[0].z;

            // we calculate the min and max coordinates along each axis to define a kind of box which have to be small for considering the hand as motionless
            for (int i = 1; i < positions.Count; i++)
            {
                if (positions[i].x < minX)
                    minX = positions[i].x;
                else if (positions[i].x > maxX)
                    maxX = positions[i].x;

                if (positions[i].y < minY)
                    minY = positions[i].y;
                else if (positions[i].y > maxY)
                    maxY = positions[i].y;

                if (positions[i].z < minZ)
                    minZ = positions[i].z;
                else if (positions[i].z > maxZ)
                    maxZ = positions[i].z;
            }

            float maxDisplacementForImmobility = ParametersOther.Instance.LeapMath_maxDisplacementForImmobility;
            float detectionAreaBoundary = ParametersOther.Instance.LeapMath_areaBoundaryForImmobility; // the hand have also to be more or less above the Leap to avoid untimely detection

            if (maxX - minX < maxDisplacementForImmobility && maxY - minY < maxDisplacementForImmobility && maxZ - minZ < maxDisplacementForImmobility && minX > -detectionAreaBoundary && maxX < detectionAreaBoundary && minZ > -detectionAreaBoundary && maxZ < detectionAreaBoundary)
                return true;
            else
                return false;
        }

        /// <summary>
        /// Tests if there is the same count of fingers in all frames and assigns this count to a variable.
        /// </summary>
        /// <param name="frames">The list of frames to test.</param>
        /// <param name="fingersCount">The variable which will contain the count of fingers.</param>
        /// <returns>If there is the same fingers count in each frame.</returns>
        public static bool FingersCount(List<IFrame> frames, out int fingersCount)
        {
            fingersCount = frames[0].Fingers.Count;
            foreach (IFrame frame in frames)
            {
                if (frame.Fingers.Count != fingersCount)
                    return false;
            }
            return true;
        }

        /// <summary>
        /// Test if at least one hand is above the Leap. Permits to reduce the Leap's field of detection and to avoid untimely detection of hands.
        /// This function is implemented because the Leap detects hand when there is nothing, for exemple it considers my head as a hand when I'm just sitting on my chair.
        /// </summary>
        /// <param name="hands">The list of hands to test</param>
        /// <returns>If at least one hand is above the Leap</returns>
        public static bool IsAboveTheLeap(HandList hands)
        {
            foreach (Hand hand in hands)
            {
                if (hand.PalmPosition.x > -ParametersOther.Instance.LeapMath_xBoundaryForHandDetection
                    && hand.PalmPosition.x < ParametersOther.Instance.LeapMath_xBoundaryForHandDetection
                    && hand.PalmPosition.z > -ParametersOther.Instance.LeapMath_zBoundaryForHandDetection
                    && hand.PalmPosition.z < ParametersOther.Instance.LeapMath_zBoundaryForHandDetection)
                {
                    return true;
                }
            }
            return false;
        }

        /// <summary>
        /// Test if at least one finger is above the Leap. Permits to reduce the Leap's field of detection and to avoid untimely detection of hands (for HandPresent/HandLost events).
        /// </summary>
        /// <param name="fingers">The list of finger to test</param>
        /// <returns>If at least one finger is above the Leap</returns>
        public static bool IsAboveTheLeap(FingerList fingers)
        {
            foreach (Finger finger in fingers)
            {
                if (finger.TipPosition.x > -ParametersOther.Instance.LeapMath_xBoundaryForHandDetection
                    && finger.TipPosition.x < ParametersOther.Instance.LeapMath_xBoundaryForHandDetection
                    && finger.TipPosition.z > -ParametersOther.Instance.LeapMath_zBoundaryForHandDetection
                    && finger.TipPosition.z < ParametersOther.Instance.LeapMath_zBoundaryForHandDetection)
                {
                    return true;
                }
            }
            return false;
        }
    }
}

redpajama_set_name: RedPajamaGithub