tag:blogger.com,1999:blog-56384353116109200742024-02-07T06:11:02.025-08:00My Gadget BlogThis Blog is about the gadgets I have and those I want to have.John Cruzehttp://www.blogger.com/profile/07838474765128004393noreply@blogger.comBlogger132125tag:blogger.com,1999:blog-5638435311610920074.post-28962983842900916392020-09-09T00:20:00.001-07:002020-09-09T00:20:20.957-07:00My Initial Project Idea: Personal Real-time Location System<p> It was by accident that I got into drones lately. I hade 3 tiny drones in the past(the unbranded Chinese drones sold at SM Toy Kingdom) but my curiosity was killed by these drones because it did not meet my expectations. 2 Months ago, I got to noticed the DJI store at Sm North Edsa and got me a small drone(tello). Before I purchased it, I usually ask these questions so that I will have an idea what's it capable of:</p><p>1. Can it balance on its own without me exerting much effort to make fly and not crash immediately?</p><p>2. Will it hover just like the toy in the movie "flubber"?</p><p>3. Can I do some programming to enable to perform certain task on it own? ("flight mission").</p><p>The seller at the DJI store said yes to all of my questions so I requested a demo and he did grant my request and it seems that 1 and 2 questions as my deal breaker was fully met and demo'ed so without any hesitation, I purchased it.</p><p>I only got to fly the tello inside the tiny room I am renting 1 to 3 times every week and watching youtube videos and researching on what are the possibilities I can do with it. </p><p>As my knowledge increased in droning, I realized that the tello is indeed so tiny and not only that, it lacks the most basic features I need to develop a certain system just to jumpstart my learning curve on the subject matter.</p><p>I came up with an idea that the drone should be able to perform a flight mission twice a day to collect data and store this data and as data accumulates, i will search for patterns that can not be seen by naked the eye but it is there(data mining).</p><p>This is my initial thougths on this project. Will add more information soon. Part of it is face recognition, optical character recognition, extensive use of google maps and on the hardware side, I would initially be needing an arduino or raspberry pi, battery charge level sensing to automatically turn off the power when the battery is fully charge and a custom drone charging station because the idea behind this is that this whole system will be operated in a remote location.</p><p>And certainly tello can not be used for this purpose so last week, I bought the dji mini. It is still a tiny drone but it can already meet my project's initial specification. </p>John Cruzehttp://www.blogger.com/profile/07838474765128004393noreply@blogger.com9tag:blogger.com,1999:blog-5638435311610920074.post-71016284861076405762019-04-12T22:28:00.001-07:002019-04-12T22:34:57.315-07:00A very good example of Contractual Employment CaseContractual employment is ok for short term employment but when it is renewed several times, that's when things changes and violation of employer can occur. Contractual employment is a threat to economic stability for obvious reasons. And when an employer keeps on renewing but do not offer regular employment, that employer is a scammer. Still in the IT industry, a lot of these agencies offers contractual employment because they are being paid by a bigger scammer, the scammer who only want to enrich themselves by amassing a lot of revenues derived from the works of programmers. These agencies may not aware of the these facts or they are aware but not scared because they know someone which is obvious from the case outcome I filed.<br />
<div>
<br /></div>
<div>
A good example is the case of FUJI TELEVISION NETWORK, INC vs ARLENE S. ESPIRITU. you may view the details of the case <a href="https://www.lawphil.net/judjuris/juri2014/dec2014/gr_204944_2014.html" target="_blank">here</a>. The power to control which is essential in the 4 fold test of employee-employer relationship include to employer's power to deduct absences from salary or any other forms like in this case of fuji:</div>
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiSXv41WpScsgmspjHqfirwxA0J2pvseHAddXG2EOkzQmHMQgmCfv0qvCN7abPieDtOt58cmb7k-Uochl8izhW6FFg-lLj8SXBUwKoxFf4LBdftiTYJdEVCGZtWefYN-QV4dTMihLWv5rHu/s1600/fuji.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img alt="" border="0" data-original-height="94" data-original-width="736" height="51" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiSXv41WpScsgmspjHqfirwxA0J2pvseHAddXG2EOkzQmHMQgmCfv0qvCN7abPieDtOt58cmb7k-Uochl8izhW6FFg-lLj8SXBUwKoxFf4LBdftiTYJdEVCGZtWefYN-QV4dTMihLWv5rHu/s400/fuji.png" title="" width="400" /></a></div>
<div>
Fuji has just affirmed that Arlene was their regular employee. This is the same in my case, if I am late, agency will deduct each minute of late and I have no-work, no-pay arrangement no benefits whatsoever.. Agency controlled how they will pay me and I have no bargaining rights. Arlene had bargaining rights, she can demand that her salary be increased every time they renewed her contract. Her contract is being renewed on a yearly basis. My contract is being renewed every thee months. Arlene enjoyed a lot of economic benefits and still she won the case, she even won her case at the NLRC when she filed her first MR(Motion for Reconsideration). Fuji does no deny they don't have employee-employer relationship which is obvious in the screenshot above, but my agency deny it, and NLRC obviously affirmed it but the Court of Appeals reversed it.</div>
<div>
<br /></div>
<div>
I wont give any conclusion, this is just my analysis and opinion. I hope and pray the people who handle my case will see the case of Arlene and compare it to mine. My case is a lot worse than hers and yet she won.</div>
<div>
<br /></div>
John Cruzehttp://www.blogger.com/profile/07838474765128004393noreply@blogger.com11tag:blogger.com,1999:blog-5638435311610920074.post-23045119066317809102019-02-05T06:09:00.001-08:002019-02-28T23:35:35.062-08:00Should the Contract be Dictated By One Party?I was applying for a job(the job posting was in jobstreet a website for job seekers not contractors) and during the interview, the interviewer asked me if I could accept project based position(why would she initiate this? I would assume their job posting was a scam because they were looking for contractors not employees.), I was desperate to find a job because I had no money so I said yes but if I had money I could have replied if terms of the contract is acceptable to both parties then why not. This is already a habit of the agencies/IT companies to offer project based positions when the advertisement did not mentioned it. Legitimate Programming jobs is history because it is being blocked by these agencies/IT companies. And because of this, programmers are of the same ranks with janitors. To restore the prestige enjoyed by being a programmer is to eliminate the existence of thises agencies. Purging must start immediately. PROGRAMMERS help in the improvement of operational efficiency and reduction of operational cost. Processes that were used to take several days (and 24hours of operation) to finish can already be done in a few minutes. And with the introduction of SAP, all processes within a huge corporation can already be certified as highly accurate and because of this, more investors are willing to pour in their capital because of these trustworhy operational processes.<br />
<br />
In order for an IT company to be recognized as IT company should develop it's own products not just because it has clients who asked them to create such a product. Companies that develop products on a contract basis provides unstable and unsecure job opportunities. A third world country like the Philippines should discourage or ban these companies from operating in the country. If you try to search jobstreet, companies like these are all over some like company with accentuation even have like 30 to 40 ads for the same position not to mention the other companies offering the same position and their client is company of accents. And most applicants came also from this company of accentuation. Or the company that started from a garage and the striped blue who's managers passes on full photo-copied versions of books. A legitimate IT company is like Microdoft, SAP, Oracle.<br />
<br />
Let's go back to the first topic...I had observed that saying yes immediately can have catastrophic effects. Companies are abusive and always takes advantage of the situation. So for the past 6 months, when a prospective recruiter calls me, I immefiately ask them if their client is an agency or end user. For me, knowing this fact could immefiately determine the scamming schemes of this IT comanies/agencies.<br />
<br />
Here are my plans if ever I am offered a contractual position and both agreed that the terms of contract are acceptable to both parties:<br />
1) The contract price for short term engagements is Php1M. Why? This is to dicourage these scammers from proceeding with their evil plans.<br />
<br />
2) If they agreed on the first condition, my next term is that a security and non refundable deposit should be immediately paid which is equal to a of minimum 50% of contract price. This should discourage the scammer from offering fake job openings. I had experienced several times that I would discover that upon accepting the job offer, and reporting on the first day, there is really no job opening, they just want to waste my time. This is even not the worst, I heard that others after being trained , they will be informed that the project was cancelled.<br />
<br />
3) If the prospective client agreed on the 1st and 2nd conditions, my third term is client should pay double during idle times. And should there be idle times for 3 consecutive days should be considered breach of contract and therefore client should pay the ramaining unpaid contract price plus 50% penalty.<br />
<br />
And if client still agrees with this, then it is time to scrutinize the educational background, track record, ask gor sample outputs such as sample technical documentation.These are important, because my last client had these teams that were having 90% inaccuracy suggesting that it was a scam. The manager even keeps on saying he is not contented with the output but he did counted how many revisions he asked me, he did not counted how may errors he had. And one team member would change critical settings without informing me which results in a lot of errors. I am quite puzzled because during the early stages, he would inform everyone that he had finished his part and advices me to proceed. So he knows the the consequences of his actions if he makes changes without my knowledge. Not to mention the gay local manager who is in the loop of email exchanges does not even do anything, it is either he is an illiterate or a puppet of the scammers. It was really a rediculous project and should have reported the incidence to proper authorities but decided not to but should I encounter a similar situation, I really should do it to get rid of such evil elements and prevent them from victimizing poor prople like me.John Cruzehttp://www.blogger.com/profile/07838474765128004393noreply@blogger.com5tag:blogger.com,1999:blog-5638435311610920074.post-18540746958800985512018-10-21T08:41:00.002-07:002018-10-23T18:44:55.915-07:00Busy Sunday with Sparkfun's nRf52832 Dev BoardMy Sunday(Oct 21, 2018) has been so so so busy because of my beacon experiment. Actually for 2 weeks now, I was stuck at why my battery charge level monitoring circuit would not work(I was just toggling between the board's A4 and A5 analog pins). And I gave up on it and went on to do another task to make the piezo speaker work with the board. I faced another very challenging task why it does not work with digital pin 10, then I remembered previously when experimented with the LED on/off sketch and I used digital pin 15 and it worked, so I transferred the connection to that pin and it worked very well. Because of this I realized that maybe the analog pins A4 and A5 are made for a different purpose so I tried to experiment with A6 and finally, I am getting good results. So, I am able to make both work.<br />
<br />
With this success, I prepared a simple sketch that will broadcast Ibeacon, will communicate with the pc to continuously transmit battery charge level(2V up tp 4.2V) and add GATT Services to get the battery charge level and be able to turn on / off the piezo speaker. So sad that the nRF52832 Dev Board is not compatible with Arduino's Tone library, I am not able to upload the Super Mario Brothers theme music into it.<br />
<br />
Creating the program(sketch) is the most critical part because the battery life depends on it, so the sketch must be highly optimized to save power and battery will at least last longer than 1 day. The sketch I created is not the best solution, there are better ways to do it to make it conserve energy and the 800mAH battery could last longer than 3 months. The piezo speaker can consume more than 50mA alone, while connecting to the device would consume 30mAnot to mention the builtin voltage regulator has a normal current leakage of 10 mA and of course the red LED connected to the power source normall consumes 16-18 mA(but this can be disconnected easily as sparkfun provided the connection at the back), at normal operation it(the nRf52832 ic alone) normally consumes around 7mA. I heard that other sketches can lower the normal consumption to 0.3mA or even down to 1microA that should be enough to make it last for several days by putting the device at deep sleep. The sketch I created would only let the device enter the low power mode. I have not tried to make it enter into deep sleep mode because the last time I tried it, the nRF connect app could not connect to it. Maybe there is a technique to make it not to interfere with the connection process.<br />
<br />
To be honest, the connection is very stable, it does not disconnect making it ideal as a key finder.<br />
<br />
Here is the hardware setup:<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgbj0hi3tRg0pWVv6YS7ilzbSAIJWw6eAaEhOwE6Hrd7J8M415hn_vt-B_lcpUDCbzHSRLtBwOxjcXYS5f5fouY42fpA4_QgVBX2OBhbc1QolfRcQsZK-hUUcZvEPHtMmieBAj0p0sXXylN/s1600/beacon.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="812" data-original-width="932" height="278" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgbj0hi3tRg0pWVv6YS7ilzbSAIJWw6eAaEhOwE6Hrd7J8M415hn_vt-B_lcpUDCbzHSRLtBwOxjcXYS5f5fouY42fpA4_QgVBX2OBhbc1QolfRcQsZK-hUUcZvEPHtMmieBAj0p0sXXylN/s320/beacon.png" width="320" /></a></div>
<div class="separator" style="clear: both; text-align: center;">
<br /></div>
My actual device on a breadboard:<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjBPlzVveVbwzx5GsvdRBhmdGBpuXRxYGrsvQropkjrMBv24A6EqOAwuarqd0euu5u0mYb-lAdKfWYBG0uK7uyNgYbKsJ37ZRpCQuP8hViyh7hr-CYdbnzDUUl3BK5CYcKT6KX7KkrNKK4H/s1600/breadboard.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="960" data-original-width="720" height="320" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjBPlzVveVbwzx5GsvdRBhmdGBpuXRxYGrsvQropkjrMBv24A6EqOAwuarqd0euu5u0mYb-lAdKfWYBG0uK7uyNgYbKsJ37ZRpCQuP8hViyh7hr-CYdbnzDUUl3BK5CYcKT6KX7KkrNKK4H/s320/breadboard.jpg" width="240" /></a></div>
<div class="separator" style="clear: both; text-align: center;">
<br /></div>
<div class="separator" style="clear: both; text-align: left;">
With this current configuration, I can charge the battery while programming it. </div>
<div class="separator" style="clear: both; text-align: left;">
<br /></div>
<div class="separator" style="clear: both; text-align: left;">
Sample Serial Output:</div>
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEi96Hf5poNK76iYz2TDpx99s0MazOgC6FaBdKH3bLtFcUZAeeOXliSzHKwmwO1pTVL5BMTVoOhLa8hsQ1vHoQw1j6KjLms7zecRNBV7SV_peqPINIYihEXSzniIUS_YnVloz0p5XjKOulNB/s1600/com3port.PNG" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="534" data-original-width="681" height="250" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEi96Hf5poNK76iYz2TDpx99s0MazOgC6FaBdKH3bLtFcUZAeeOXliSzHKwmwO1pTVL5BMTVoOhLa8hsQ1vHoQw1j6KjLms7zecRNBV7SV_peqPINIYihEXSzniIUS_YnVloz0p5XjKOulNB/s320/com3port.PNG" width="320" /></a></div>
<div class="separator" style="clear: both; text-align: left;">
<br /></div>
<div class="separator" style="clear: both; text-align: left;">
The nRF Connect App Screen:</div>
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjyQyfkNBP8q0dl8kSlAhDkT7KOxm0NgEH_szVgNObKtwelD2VbpdQ5ZDw24gSIKG1uPTmFsb6XVBtL6onBLYWe0tNrS-nfloq41a7NA472QPOiFtRlN95jyVTTd7JHpSYu1-C3SRu1aeoY/s1600/nrf+connect.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="547" data-original-width="558" height="313" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjyQyfkNBP8q0dl8kSlAhDkT7KOxm0NgEH_szVgNObKtwelD2VbpdQ5ZDw24gSIKG1uPTmFsb6XVBtL6onBLYWe0tNrS-nfloq41a7NA472QPOiFtRlN95jyVTTd7JHpSYu1-C3SRu1aeoY/s320/nrf+connect.png" width="320" /></a></div>
<div class="separator" style="clear: both; text-align: left;">
<br /></div>
<div class="separator" style="clear: both; text-align: left;">
<br /></div>
<div class="separator" style="clear: both; text-align: left;">
Here is the screen recording:(you can hear the actual beeping of the beacon:</div>
<div class="separator" style="clear: both; text-align: left;">
<br /></div>
<iframe allowfullscreen="" class="YOUTUBE-iframe-video" data-thumbnail-src="https://i.ytimg.com/vi/2V-5gTolSfc/0.jpg" frameborder="0" height="266" src="https://www.youtube.com/embed/2V-5gTolSfc?feature=player_embedded" width="320"></iframe><br />
<div class="separator" style="clear: both; text-align: left;">
<br /></div>
And finally the sketch:<br />
You may download the sketch <a href="https://drive.google.com/open?id=1BPMg5X2fltArqwLnmAIUc1zm49I8ayj2" target="_blank">here</a>.John Cruzehttp://www.blogger.com/profile/07838474765128004393noreply@blogger.com3tag:blogger.com,1999:blog-5638435311610920074.post-32327395325757558792018-09-24T02:57:00.000-07:002018-09-24T02:57:15.005-07:00Key Fields or Index Fields in a Data Base TableKey Fields or Index Fields are quite useful in a database table. They were meant to have permanent or fixed values throughout their record lifetime not until the record is deleted. Key Fields makes sure that every record unique. Aside from this the database is equipped with logic(search algorithm) which makes use of index fields to perform fast and efficient search and sorting functions. I remember at one point in my programmer career when still software I am supporting is still struggling to make a name in he industry, one of the the client's problem was the program was running extremely slow so I investigated and found out that several select statements were not using index fields in there search parameter. I am aware that the software is capable of creating customized indexes so I created customized indexes and the result was 80% faster.<br />
<br />
With this basic idea of database concepts, programmers will be able to create a group of tables that are optimized in terms query and sorting speeds. It is a fundamental concept that should not be forgotten. Always remember that if a field is meant to be modified, do not use as index field. It is a mortal sin to do it. Everybody will lough at you.<br />
<br />
What happens when it is unavoidable because there is a possibility that all key fields are the same except that modifiable field? The answer is record will not be saved in the database. That's when a serial number as key field will come to the rescue. It makes sure that every record entered in the table is unique. It is just a design tip.<br />
<br />
Just expressing my thought, duhhh!!!John Cruzehttp://www.blogger.com/profile/07838474765128004393noreply@blogger.com1tag:blogger.com,1999:blog-5638435311610920074.post-57709202800492789652018-07-30T22:12:00.000-07:002018-07-30T23:12:25.564-07:00Make Sparkfun's nrf52832 IOT Board an IbeaconLike I said, the nrf52832 breakout board can be programmed to become an Ibeacon using the blepheripheral library, in fact it has a sample sketch. But I think the sample sketch is not applicable to what I am trying to achieve so, I decided not to use the sample sketch. The main reason is that it needs an interrupt and a timer just to change the frame from ibeacon to eddystone, so it is not good.<br />
<br />
But, using the included ibeacon library as guide, it enabled me to understand how to turn the device into ibeacon. I used Ibeacon Detector app to capture the data packets or advertising packets, and used the captured data to change the blepheripheral manufurerdata and that's it. I just turned it into ibeacon.<br />
<br />
Here is the sample ibeacon advertising packet:<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgI8avhZjR36pJ5e9sKvtBJ9X2AByKVL7swdP-795Ju65n7QHLbpFPNr_f8FtpJdiyWXg3POlRYIyjYMeK7YFNvVdT6u3JaVqCOKGB5pKDCrzRUpZUTxgmzRkW-Tl6yd-eO2zyMJvz9O-N0/s1600/ibeacon1.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="313" data-original-width="803" height="124" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgI8avhZjR36pJ5e9sKvtBJ9X2AByKVL7swdP-795Ju65n7QHLbpFPNr_f8FtpJdiyWXg3POlRYIyjYMeK7YFNvVdT6u3JaVqCOKGB5pKDCrzRUpZUTxgmzRkW-Tl6yd-eO2zyMJvz9O-N0/s320/ibeacon1.jpg" width="320" /></a></div>
<div class="separator" style="clear: both; text-align: center;">
</div>
<br />
This is the manufacturerdata I used:<br />
0x4c, 0x00, 0x02, 0x15, 0xa1, 0x96, 0xc8, 0x76, 0xde, 0x8c, 0x4c, 0x47, 0xab, 0x5a, 0xd7, 0xaf, 0xd5, 0xae, 0x71, 0x27, 0x00, 0x12, 0x00, 0x25, 0xcb, 0x5c<br />
<br />
The breakdown is as follows:<br />
0x4c 0x00 = Apple Company<br />
0x02 0x15 = Ibeacon Identifier<br />
0xa1 0x96 0xc8 0x76 0xde 0x8c 0x4c 0x47 0xab 0x5a 0xd7 0xaf 0xd5 0xae 0x71 0x27 =UUID<br />
0x00 0x12 = Major<br />
0x00 0x25 = Minor<br />
0xcb 0x5c = Transmitted Power(-53dBm)<br />
<br />
Here is the complete sketch:<br />
<blockquote class="tr_bq">
<blockquote class="tr_bq">
<blockquote class="tr_bq">
#include <SPI.h></blockquote>
<blockquote class="tr_bq">
#include <BLEPeripheral.h></blockquote>
<blockquote class="tr_bq">
<br /></blockquote>
<blockquote class="tr_bq">
const char * localName = "LED On"; </blockquote>
<blockquote class="tr_bq">
BLEPeripheral blePeriph();</blockquote>
<blockquote class="tr_bq">
<br /></blockquote>
<blockquote class="tr_bq">
void setup() {</blockquote>
<blockquote class="tr_bq">
// put your setup code here, to run once:</blockquote>
<blockquote class="tr_bq">
Serial.begin(115200);</blockquote>
<blockquote class="tr_bq">
blePeriph.setDeviceName(localName);</blockquote>
<blockquote class="tr_bq">
blePeriph.setLocalName(localName);</blockquote>
<blockquote class="tr_bq">
blePeriph.setTxPower(measuredPower);</blockquote>
<blockquote class="tr_bq">
const unsigned char manufacturerData[26] = {0x4c, 0x00, 0x02, 0x15, 0xa1, 0x96, 0xc8, 0x76, 0xde, 0x8c, 0x4c, 0x47, 0xab, 0x5a, 0xd7, 0xaf, 0xd5, 0xae, 0x71, 0x27, 0x00, 0x12, 0x00, 0x25, 0xcb, 0x5c};</blockquote>
<blockquote class="tr_bq">
unsigned int lng = 26;</blockquote>
<blockquote class="tr_bq">
blePeriph.setManufacturerData(manufacturerData, lng);</blockquote>
<blockquote class="tr_bq">
blePeriph.begin();</blockquote>
<blockquote class="tr_bq">
</blockquote>
<blockquote class="tr_bq">
}</blockquote>
<blockquote class="tr_bq">
<br /></blockquote>
<blockquote class="tr_bq">
void loop() {</blockquote>
<blockquote class="tr_bq">
// put your main code here, to run repeatedly:</blockquote>
<blockquote class="tr_bq">
blePeriph.poll();</blockquote>
<blockquote class="tr_bq">
}</blockquote>
</blockquote>
</blockquote>
John Cruzehttp://www.blogger.com/profile/07838474765128004393noreply@blogger.com0tag:blogger.com,1999:blog-5638435311610920074.post-17918318803012742782018-07-29T04:42:00.001-07:002018-07-29T17:35:15.534-07:00Changing the Local Name of Sparkfun's nrf52832 IOT BoardI had been playing with Sparkfun's nrf52832 IOT Board(there is no Chinese spoof version yet and I guess there will never be) ever since I found the IB003N-SHT to be defective. My goal is to develop a firmware using Arduino IDE to make the board function as Ibeacon/Eddystone and at the same be able to advertise sensor data in a different frame. I am still familiarizing my self how to make things done and am currently trying make a prototype whether it is possible to change beacon parameters without hard-resetting the device.<br />
<br />
I have so far succeeded. My initial test was to change the local name which a very common function and I have not made it to function as a beacon. I am taking it 1 step at a time. I used the sample program provided by Sparkfun on their website which is the<a href="https://learn.sparkfun.com/tutorials/nrf52832-breakout-board-hookup-guide?_ga=2.37238432.1492861582.1532790120-30782741.1531322096#ble-blink-example" target="_blank"> Ble Blink Example</a>. I added the following features:<br />
<br />
<ol>
<li>Added a new Service to change the local name</li>
<li>Added a characteristics under the new Service</li>
<li>When the value on the said characteristic change, it will change the local name and reset the BLE.</li>
</ol>
<div>
The logic is very much the same as the original program when turning on/off the LED connected at pin 7. And here is the source code :</div>
<blockquote class="tr_bq">
<blockquote class="tr_bq">
// Import libraries (BLEPeripheral depends on SPI)</blockquote>
<blockquote class="tr_bq">
#include <SPI.h></blockquote>
<blockquote class="tr_bq">
#include <BLEPeripheral.h></blockquote>
<blockquote class="tr_bq">
<br /></blockquote>
<blockquote class="tr_bq">
//////////////</blockquote>
<blockquote class="tr_bq">
// Hardware //</blockquote>
<blockquote class="tr_bq">
//////////////</blockquote>
<blockquote class="tr_bq">
#define LED_PIN 7 // LED on pin 7</blockquote>
<blockquote class="tr_bq">
#define LED_ACTIVE LOW // Pin 7 LED is active low</blockquote>
<blockquote class="tr_bq">
#define LED_DEFAULT LOW</blockquote>
<blockquote class="tr_bq">
<br /></blockquote>
<blockquote class="tr_bq">
///////////////////////</blockquote>
<blockquote class="tr_bq">
// BLE Advertisments //</blockquote>
<blockquote class="tr_bq">
///////////////////////</blockquote>
<blockquote class="tr_bq">
const char * localName = "LED Off"; //change the local name</blockquote>
<blockquote class="tr_bq">
BLEPeripheral blePeriph;</blockquote>
<blockquote class="tr_bq">
BLEService bleServ("1207");</blockquote>
<blockquote class="tr_bq">
BLEService chgName("1208");//added new service</blockquote>
<blockquote class="tr_bq">
BLECharCharacteristic ledChar("1207", BLERead | BLEWrite);</blockquote>
<blockquote class="tr_bq">
BLECharCharacteristic chgChar("1208", BLERead | BLEWrite);//added new characteristics</blockquote>
<blockquote class="tr_bq">
int vb =0;</blockquote>
<blockquote class="tr_bq">
void setup() </blockquote>
<blockquote class="tr_bq">
{</blockquote>
<blockquote class="tr_bq">
Serial.begin(115200); // Set up serial at 115200 baud</blockquote>
<blockquote class="tr_bq">
pinMode(LED_PIN, OUTPUT);</blockquote>
<blockquote class="tr_bq">
digitalWrite(LED_PIN, !LED_ACTIVE);</blockquote>
<blockquote class="tr_bq">
<br /></blockquote>
<blockquote class="tr_bq">
setupBLE();</blockquote>
<blockquote class="tr_bq">
}</blockquote>
<blockquote class="tr_bq">
<br /></blockquote>
<blockquote class="tr_bq">
void loop() </blockquote>
<blockquote class="tr_bq">
{</blockquote>
<blockquote class="tr_bq">
blePeriph.poll();</blockquote>
<blockquote class="tr_bq">
//--</blockquote>
<blockquote class="tr_bq">
if (ledChar.written())</blockquote>
<blockquote class="tr_bq">
{</blockquote>
<blockquote class="tr_bq">
int ledState = ledChar.value();</blockquote>
<blockquote class="tr_bq">
if (ledState) {</blockquote>
<blockquote class="tr_bq">
digitalWrite(LED_PIN, LED_ACTIVE);</blockquote>
<blockquote class="tr_bq">
} else {</blockquote>
<blockquote class="tr_bq">
digitalWrite(LED_PIN, !LED_ACTIVE);</blockquote>
<blockquote class="tr_bq">
}</blockquote>
<blockquote class="tr_bq">
}</blockquote>
<blockquote class="tr_bq">
//--</blockquote>
<blockquote class="tr_bq">
//--This my added service when change this is triggered</blockquote>
<blockquote class="tr_bq">
if (chgChar.written())</blockquote>
<blockquote class="tr_bq">
{</blockquote>
<blockquote class="tr_bq">
int chgState = chgChar.value();</blockquote>
<blockquote class="tr_bq">
</blockquote>
<blockquote class="tr_bq">
if (chgState) {</blockquote>
<blockquote class="tr_bq">
</blockquote>
<blockquote class="tr_bq">
blePeriph.end();</blockquote>
<blockquote class="tr_bq">
setupBLE0();</blockquote>
<blockquote class="tr_bq">
</blockquote>
<blockquote class="tr_bq">
} else {</blockquote>
<blockquote class="tr_bq">
</blockquote>
<blockquote class="tr_bq">
blePeriph.end();</blockquote>
<blockquote class="tr_bq">
setupBLE1();</blockquote>
<blockquote class="tr_bq">
}</blockquote>
<blockquote class="tr_bq">
}</blockquote>
<blockquote class="tr_bq">
//--</blockquote>
<blockquote class="tr_bq">
}</blockquote>
<blockquote class="tr_bq">
<br /></blockquote>
<blockquote class="tr_bq">
void setupBLE()</blockquote>
<blockquote class="tr_bq">
{</blockquote>
<blockquote class="tr_bq">
// Advertise name and service:</blockquote>
<blockquote class="tr_bq">
blePeriph.setDeviceName(localName);</blockquote>
<blockquote class="tr_bq">
blePeriph.setLocalName(localName);</blockquote>
<blockquote class="tr_bq">
blePeriph.setAdvertisedServiceUuid(bleServ.uuid());</blockquote>
<blockquote class="tr_bq">
<br /></blockquote>
<blockquote class="tr_bq">
// Add service</blockquote>
<blockquote class="tr_bq">
blePeriph.addAttribute(bleServ);</blockquote>
<blockquote class="tr_bq">
// Add characteristic</blockquote>
<blockquote class="tr_bq">
blePeriph.addAttribute(ledChar);</blockquote>
<blockquote class="tr_bq">
//my New Service and characteristic</blockquote>
<blockquote class="tr_bq">
blePeriph.addAttribute(chgName);</blockquote>
<blockquote class="tr_bq">
blePeriph.addAttribute(chgChar);</blockquote>
<blockquote class="tr_bq">
<br /></blockquote>
<blockquote class="tr_bq">
// Now that device6, service, characteristic are set up,</blockquote>
<blockquote class="tr_bq">
// initialize BLE:</blockquote>
<blockquote class="tr_bq">
blePeriph.begin();</blockquote>
<blockquote class="tr_bq">
// Set led characteristic to default value:</blockquote>
<blockquote class="tr_bq">
ledChar.setValue(!LED_ACTIVE); </blockquote>
<blockquote class="tr_bq">
}</blockquote>
<blockquote class="tr_bq">
void setupBLE1()</blockquote>
<blockquote class="tr_bq">
{</blockquote>
<blockquote class="tr_bq">
// Advertise name and service:</blockquote>
<blockquote class="tr_bq">
blePeriph.setDeviceName("LED Off");</blockquote>
<blockquote class="tr_bq">
blePeriph.setLocalName("LED Off");</blockquote>
<blockquote class="tr_bq">
// initialize BLE:</blockquote>
<blockquote class="tr_bq">
blePeriph.begin();</blockquote>
<blockquote class="tr_bq">
}</blockquote>
<blockquote class="tr_bq">
void setupBLE0()</blockquote>
<blockquote class="tr_bq">
{</blockquote>
<blockquote class="tr_bq">
// Advertise name and service:</blockquote>
<blockquote class="tr_bq">
blePeriph.setDeviceName(localName);</blockquote>
<blockquote class="tr_bq">
blePeriph.setLocalName(localName);</blockquote>
<blockquote class="tr_bq">
// initialize BLE:</blockquote>
<blockquote class="tr_bq">
blePeriph.begin();</blockquote>
<blockquote class="tr_bq">
}</blockquote>
<div>
And here is the video on how it is done(1208 is the new service visible in nRF Connect:</div>
</blockquote>
<div class="separator" style="clear: both; text-align: center;">
<iframe allowfullscreen="" class="YOUTUBE-iframe-video" data-thumbnail-src="https://i.ytimg.com/vi/bUDajuxpLP0/0.jpg" frameborder="0" height="266" src="https://www.youtube.com/embed/bUDajuxpLP0?feature=player_embedded" width="320"></iframe></div>
<br />John Cruzehttp://www.blogger.com/profile/07838474765128004393noreply@blogger.com3tag:blogger.com,1999:blog-5638435311610920074.post-47060004615146475432018-07-27T06:42:00.005-07:002018-07-27T06:59:35.971-07:00IB003N-SHT Honest ReviewNot long ago, I bought this beacons from Alibaba. What attracted me most and main consideration of choosing this beacons against a number of China made beacons are the following:<br />
<br />
<br />
<ol>
<li>It can broadcast 3 frames(Ibeacon, eddystone(URL or UID) and Accelerometer)</li>
<li>It has a specialize temperature sensor</li>
<li>It has buzzer</li>
</ol>
<br />
For some reasons, the Chinese seller had delayed the delivery considering that I paid expensive shipping charge($30) but the delivery time took almost a month which is just like having it shipped for free via postal mail(small packets) but I didn't mind it since the product I bought are really loaded with tons features.<br />
<br />
Ok the item arrived and my initial testing which is to check whether it really can broadcast the 3 frames and it worked. Days later, when I tried to check the data being broadcasted and verify if it really has all the goodies and to my surprised, I found that it is not what they claimed it be which really had disappointed me. Here are my actual findings:<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<iframe allowfullscreen="" class="YOUTUBE-iframe-video" data-thumbnail-src="https://i.ytimg.com/vi/ZehblokKDwc/0.jpg" frameborder="0" height="266" src="https://www.youtube.com/embed/ZehblokKDwc?feature=player_embedded" width="320"></iframe></div>
<ol>
<li><b>Ibeacon and Temperature Sensor issue</b>. According to their documentation, the temperature readings are being broadcasted at the major and minor (least significant bits). During my test, I could not find the major value and the minor value turns out to be the least significant bit. I reported this issue to the Chinese seller and after a few days of discussion, they have admitted that the major value is unusable. They did not mentioned this in the technical documentation they have provided nor on their advertisement. Another issue I found is that most of the time, the temperature reading is 0 which is weird and I found this to be a hardware defect.</li>
<li><b>Eddystone issue</b>. The data being broadcasted is not Eddystone standard compliant. The main identifer of Eddystone "AAFE" is missing, I have confirmed this because even nRFConnect can not identify the frame as Eddystone. Their counting of UID begins at the "02" byte which is absolutely wrong. The transmittion power is missing. And worst is that when I tried to populate the characteristics "FFD02", the Eddystone frame goes blank which stunned or shocked me.</li>
<li><b>Buzzer Issue.</b> 20dB is very loud, and based on their technical documentaion, it can be adjusted through GATT. But during my testing, the loudness could not be adjusted. With that loudness, I could hardly hear it.</li>
</ol>
<div>
After I found these defects, I stopped the testing of other features. I have already concluded that the IB003N-SHT is full of defects. I tried to negotiate with the Chinese seller by returning the product to them due to the above mentioned defects, but I got this reply from them:</div>
<div>
<br /></div>
<blockquote class="tr_bq">
"Our products have no defects, but if you are not satisfied, you may return the items to us. But pls do not include the batteries. We will deduct $2 for each item for the batteries. We will test each items after receiving them from you and we find no defects, we will refund your money. Shipping and delivery charge will be deducted."</blockquote>
<div>
<br /></div>
<div>
I think this is not what I have expected from them, with this transaction, I would suffer $127 loss which way too much.</div>
<div>
<br /></div>
<div>
<br /></div>
John Cruzehttp://www.blogger.com/profile/07838474765128004393noreply@blogger.com7tag:blogger.com,1999:blog-5638435311610920074.post-72414145273230929572018-06-28T05:47:00.000-07:002018-06-28T05:47:08.533-07:00Reading Temperature and Humidity on AppsFactory BeaconsAppsFactory Beacons have SHT20 High precision Temperature and Humidity sensor embedded in them. Reading the values from the beacons is not that easy that is why this post is written which will serve as guide. Temperature and Humidity is important as it will allow building owners discover patterns that can not be detected by ordinary humans not unless of course humans are so super intelligent that they may not need tools to predict or discover patterns which could suggest something is just about to happen.<br />
<br />
There are two ways to read the sensor data which are as follows:<br />
<br />
<ol>
<li>can be read via GATT</li>
<li>can be included in the beacon advertisement data.</li>
</ol>
<br />
Here is the detail:<br />
<br />
1. Reading the Temperature and Humidity via GATT Service<br />
<blockquote class="tr_bq">
The data can be accessed via GATT Service 0xFFB0 see table below:
</blockquote>
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjYBWiA9xYfg5KqWbMVXKTg8EOALLP0FJZlfYJw3OIgBJ64k_5uBhpZKU_6wohkj79nwBS_HTbifyQ-7-eB-XxSHErf0CDacJNb8T7A7HayIChLWQpDKX6iy6GP-sVf7MwffgTP4EIyHBkU/s1600/temp_gatt.PNG" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="360" data-original-width="932" height="153" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjYBWiA9xYfg5KqWbMVXKTg8EOALLP0FJZlfYJw3OIgBJ64k_5uBhpZKU_6wohkj79nwBS_HTbifyQ-7-eB-XxSHErf0CDacJNb8T7A7HayIChLWQpDKX6iy6GP-sVf7MwffgTP4EIyHBkU/s400/temp_gatt.PNG" width="400" /></a></div>
<blockquote class="tr_bq">
The characteristic 0xFFB3 is used to enable the measured Teperature and Humidity on the Advertisement Data. The possible values are as follows(2 bytes):</blockquote>
<br />
<blockquote class="tr_bq">
<ul>
<li>0x0 - Enable</li>
<li>0x00 - Disable </li>
</ul>
</blockquote>
<blockquote class="tr_bq">
Other values maybe entered to specify the rate which it will be advertised, example if 0x0F was entered means the temp and humidity will be advertised every 30 seconds. </blockquote>
2. Reading the Temperature and Humidity from Beacon Advertisement Data<br />
<blockquote class="tr_bq">
The Temperature and Humidity is included at the last bytes of the major and minor of the Ibeacon frame.</blockquote>
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhNvbxncC8LBeM7d2Exjd8w9e5rQcVtAeB_QPkV-ZsOT2GzqkMaQaNV01SKFQD-4Z6Ez5-PFxNpcyHMmYV_hM67f1zTHg306bOTrNfHiNzELHPT7Rp6reW0cFZsd8K3aj0SmK0t8JTGAYOG/s1600/temp_adv.PNG" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="432" data-original-width="943" height="183" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhNvbxncC8LBeM7d2Exjd8w9e5rQcVtAeB_QPkV-ZsOT2GzqkMaQaNV01SKFQD-4Z6Ez5-PFxNpcyHMmYV_hM67f1zTHg306bOTrNfHiNzELHPT7Rp6reW0cFZsd8K3aj0SmK0t8JTGAYOG/s400/temp_adv.PNG" width="400" /></a></div>
<div class="separator" style="clear: both; text-align: left;">
After obtaining the value, the conversion formula to get the actual values are as follows:</div>
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEigkILg4UsyIrXtTJICwWe9gEwtLyUQyWW_DJIpzEFgy4IK-t5B-QwIQPM_aug0ShunqpvG9a1HipH8CGSeCyLJBDmNJXuymqgdDTGl-Xok-uNZ9sURGHo1ISQhi6QJRytbDiI3xjVoN1UP/s1600/temp_conv.PNG" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="435" data-original-width="970" height="178" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEigkILg4UsyIrXtTJICwWe9gEwtLyUQyWW_DJIpzEFgy4IK-t5B-QwIQPM_aug0ShunqpvG9a1HipH8CGSeCyLJBDmNJXuymqgdDTGl-Xok-uNZ9sURGHo1ISQhi6QJRytbDiI3xjVoN1UP/s400/temp_conv.PNG" width="400" /></a></div>
<div class="separator" style="clear: both; text-align: left;">
<br /></div>
John Cruzehttp://www.blogger.com/profile/07838474765128004393noreply@blogger.com1tag:blogger.com,1999:blog-5638435311610920074.post-18959407310328631902018-06-25T22:56:00.001-07:002018-06-25T23:13:14.757-07:00Beacon Scanner App UpdatedRemember the app I created to scan Ibeacons and list them on screen and wrote about it that it is possible to modify the app to scan EddyStones as well? To prove it, I have decided to modify it myself. In case you haven't read the previous posts, here are the links:<br />
<blockquote class="tr_bq">
<a href="https://gadgetzoneblog.blogspot.com/2015/02/a-simple-ibeacon-scanner-app-in-android.html" target="_blank">A Simple Ibeacon Scanner App in Android</a></blockquote>
<blockquote class="tr_bq">
<a href="http://gadgetzoneblog.blogspot.com/2018/02/an-update-to-ibeacon-scanner-app-for.html" target="_blank">An Update to the Ibeacon Scanner App for Android</a></blockquote>
The a small change I made is to change the name of device whether it is an Ibeacon or an EddyStone-UID.<br />
<br />
Like I said, the file DeviceScanActivity.java needs to be modified to detect the 3 Eddystone frames, but I only modified it to scan the UID frame on for demo purposes. And here is the code I insterted:<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjmitLozHfI7SGp1u36B4upgX7xBSerfZJ4ZnJqsMF9z94XnhxzGhG6mNi3fUAu0D6NXxZAglHjEyzeEm_PKydXh_wYEesByVjKJqOFNpecwG_QLaGbRvvo8khODlqs9td4KqNtYF9E22pf/s1600/codes.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="432" data-original-width="792" height="217" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjmitLozHfI7SGp1u36B4upgX7xBSerfZJ4ZnJqsMF9z94XnhxzGhG6mNi3fUAu0D6NXxZAglHjEyzeEm_PKydXh_wYEesByVjKJqOFNpecwG_QLaGbRvvo8khODlqs9td4KqNtYF9E22pf/s400/codes.png" width="400" /></a></div>
<br />
This is the raw data taken from Ibeacon Detector App:<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjcThszM3LYcA1D9F8Lkt-in0tjxvjR-YejD3c6-Ig1hBrB67OfkaF7JrhDzzkknvnoVIYJKl7XPrFDbNydvCsYQvWtEI-y2FnA_iTtndtLW4R90ZZNs3foMW5hhI_GC594ZlmoU82Yingw/s1600/raw.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="277" data-original-width="540" height="164" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjcThszM3LYcA1D9F8Lkt-in0tjxvjR-YejD3c6-Ig1hBrB67OfkaF7JrhDzzkknvnoVIYJKl7XPrFDbNydvCsYQvWtEI-y2FnA_iTtndtLW4R90ZZNs3foMW5hhI_GC594ZlmoU82Yingw/s320/raw.png" width="320" /></a></div>
<br />
And here is the resulting app:<br />
<div class="separator" style="clear: both; text-align: center;">
<iframe allowfullscreen="" class="YOUTUBE-iframe-video" data-thumbnail-src="https://i.ytimg.com/vi/Zdx9JS1JfDw/0.jpg" frameborder="0" height="266" src="https://www.youtube.com/embed/Zdx9JS1JfDw?feature=player_embedded" width="320"></iframe></div>
<br />
<br />John Cruzehttp://www.blogger.com/profile/07838474765128004393noreply@blogger.com0tag:blogger.com,1999:blog-5638435311610920074.post-24345487336092505672018-06-10T22:56:00.001-07:002018-06-10T22:59:05.140-07:00How to Setup AppsFactory Beacons to Broadcast Ibeacon/EddyStone/TLM(Sensor Data) AppsFactory Beacons Model A just arrived and has made me busy doing tests on each features that the beacons were design to have whether it really works. Doing the program was not that easy and to see your design work as expected makes you happy. <br />
<br />
One notable feature of the beacons is that it can be configured over the air using nRfConnect App for Android or IOS. And can be made to broadcast ibeacon, eddystone and sensor data at an alternating interval. the beacon is also capable of motion triggered broadcast but I haven't test this part yet.<br />
<br />
BTW, the sensor data consists of acceleration and temperature data. I will this this part later.<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjY24bwWNlCCmu9GzPplcrE3CujstGwT0azm-yNpKzZkasrwvyV1TpDoj8QX4p-Y1HbVorQa_NaGI49VpoxafQehT34yrf1RJZMRrqipx2eyCfDfiGr5e5CQUEBG9WOLHuRFFVBP6CSll8w/s1600/appfactory.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="945" data-original-width="1260" height="240" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjY24bwWNlCCmu9GzPplcrE3CujstGwT0azm-yNpKzZkasrwvyV1TpDoj8QX4p-Y1HbVorQa_NaGI49VpoxafQehT34yrf1RJZMRrqipx2eyCfDfiGr5e5CQUEBG9WOLHuRFFVBP6CSll8w/s320/appfactory.jpg" width="320" /></a></div>
<br />
<br />
I have designed the beacon to be configured at Bluetooth service 0xff70, and under this is characteristic 0x2a80. The possible values that can be enterered are the ff:<br />
No advertisement: 0x01<br />
iBeacon only: 0x02<br />
Eddystone only:0x08<br />
TLM only: 0x20<br />
To broadcast all three frames : 0x02 + 0x08 + 0x20 = 0x2A<br />
<br />
And here is the video:<br />
<div class="separator" style="clear: both; text-align: center;">
<iframe allowfullscreen="" class="YOUTUBE-iframe-video" data-thumbnail-src="https://i.ytimg.com/vi/ujX-qQCiDPc/0.jpg" frameborder="0" height="266" src="https://www.youtube.com/embed/ujX-qQCiDPc?feature=player_embedded" width="320"></iframe></div>
<br />
<br />John Cruzehttp://www.blogger.com/profile/07838474765128004393noreply@blogger.com0tag:blogger.com,1999:blog-5638435311610920074.post-68814987171046747322018-05-20T21:55:00.000-07:002018-05-20T21:55:23.897-07:00How To Make China to Be not AggressiveWith all the current buzz about China being too aggressive by militarizing the South China Sea which include the West Philippine Sea, the world can still make China not to be too aggressive. I think these are the best ways to do it:<br />
<br />
1. Send all Chinese back to their homeland. Would you believe that it took China just a decade to overtake the Filipinos as the biggest Asian community in the USA alone? The Philippines took almost 5 decades to send 3M Pinoys to the US. This could have been possible because most Chinese found their way through Canada and then went to the US.<br />
<br />
2. Ignore Chinese presence all over the world. Do not buy China made product. By doing this, Robinsons, SM, and other big mall operators will lose their commercial viability since 80% of their products come from China, not to mention the owners.<br />
<br />
3. DO not be an opportunist. Just because someone is rich you will want to accept his marriage proposal. Just because you are poor and it is your chance to become rich is not an excuse that you will not be labled as opportunist.<br />
<br />
4. Maintain closer relationship with your allies and rely more on locally produced goods. Stop importing too much, even if the locally made products are inferior in terms of quality or more expensive, always remember that if you buy China made products, you are killing your country. The country should support R&D in electric motors and batteries to make electric vehicles. We already know how to manufacture solar panels so we can already achieve energy sufficiency. By doing this we can cut our imports by 50% since most of our imports are gasoline and energy related products.<br />
<br />
5. Convince the US to ban all imports/exports to China like weapons, electronics, raw materials, chemicals, machineries, etc. The world could be at worst killing itself if they keep on buying products from China.<br />
<br />
6. Ban all tourists coming from China even if they come from Hong Kong, Macau, Singapore, Malaysia, or Taiwan. Chinese make up 20% of the population in South East Asia so be cautious about dealing with these countries. And even with this huge communities, fellow South East Asians should be aware of their presence and the future of their country. I think the local Chinese are also competing with Pinoys in obtaining US visas that is why it has become very to difficult to obtain US visa.<br />
<br />
7. Ban Chinese ownership in strategic and important industries like Airline, Telecommunications, Broadcasting, Infrastructure Development. Look at what happened to the last purchased of MRT trains, until now those trains are not yet being used, the people behind those must be prosecuted and should be made liable and labled as terrorists.<br />
<br />
8. You can not rely on the US as an ally since they have very healthy economic relationship with China and they look at the Philippines as a tiny country and of no significance to world affairs so why rely on US for military help? Why haven't Pinoys developed weapon systems that could have served as the source of the country's strength? It could not just have been more than that, the Government could have generated jobs. Or exported those weapons to support the local economy.<br />
<br />
<br />John Cruzehttp://www.blogger.com/profile/07838474765128004393noreply@blogger.com0tag:blogger.com,1999:blog-5638435311610920074.post-27523463120516760092018-05-13T07:39:00.001-07:002018-05-14T23:02:54.046-07:005 Indications that the IT Project is FakeI got involved with different types of IT projects over the years and got scammed several times and wanted to share this based on experience. If you are in the same field you will agree with this too. Here are the 5 indications that the IT project is fake:<br />
<br />
1. Measure the number of errors of the documents being handed to you. Yes, they are not Americans so it is an excuse to write carabao English or is it because they were hired for another reason? Errors(excluding those grammatical errors) in Technical Designs are those that are written to too specific. Instead of just writing: "Return an error if the customer code is not maintained in SAP Master Data"; the pretentious Technical Architect would write: "After obtaining customer code, you must check if the customer code exist in table lfa1". They should not be involving themselves in specifics but should just concentrate on higher level description and the different business scenarios. Giving too specific instructions would lead to more confusions and the programmer would just cut and paste which could lead to a more prolonged test period and you can not blame the programmer since you are invading his territory which he would immediately assume you are in full command which make their job a whole lot easier. Programming entails a lot of careful planning and meticulous design to produce a highly optimized solution. And giving too much information means you are the one who planned it and it is your design and not the programmer. There are a lot instance and I would say a major challenge to describe a certain specification and to hurdle such challenges, creativity and of course your competency is the key. The preparation of Technical Documents and Functional Specifications are more expensive than doing the actual programming or coding so you must realize that being a TA or BA or FA, you can already relax because you are on top of the Software Development Life Cycle, well that is where you are wrong.<br />
<br />
2. Measure the competence of your peers. Do this secretly, if all your peers are female, you should begin to suspect something is going on.<br />
<br />
3. Frequency of work and how fast it should be done and how many people have the same position like you have. Begin observing how they behave and all your movement must be calculated. The world's resources is scarse.<br />
<br />
4. Other than your peers, how does the company's employees behave and the surrounding environment, how was it? Do they start offering other services or want to offer except that they just keep looking at you?<br />
<br />
5. There are other circumstances where it is up to you to interpret which can trigger something in you that you think violates certain moral standards, do not ignore it. Your instincts does not lie to you.<br />
<br />John Cruzehttp://www.blogger.com/profile/07838474765128004393noreply@blogger.com0tag:blogger.com,1999:blog-5638435311610920074.post-6091906779991101422018-05-02T05:39:00.002-07:002018-05-02T05:39:53.853-07:00Agencies In Metro Manila still Flourishes Agencies(Companies who's clients are Companies that do not want to have regular employees) still flourishes in Metro Manila.This in spite of the fact that Pinoys opted to vote for a semi illiterate President who promised to eradicate contractualization.<br />
<br />
Contractualization destabilizes livelihood of individuals. It makes the person in constant struggle to find decent jobs. It really makes me angry to hear recruiters having fun to find a guy that is willing to accept jobs on a contractual basis. This is what overloading of buses is like. Constant struggle just to get a place so that one can go home it's because there are no decent jobs on the country side, people are poor and have no knowledge to create opportunities and big companies take advantage of this situation. This vulnerability that is exposed for all scammers to take advantage of is what makes Agencies flourish. Even IT companies aka Agencies are there. They survive on big Companies that are not willing to hire employees and regularized them. I understand that they are poor but why do they make use of technology that they can't afford anyway? It is because they take advantage of the poor.<br />
<br />
This is an unfair competition, one should be aware of this and should be able to crate a way to equalize or balance the competition. One should be aware that life is a like a rolling wheel, one may be on top today but he is not sure what is going to happen in the future. There is always a balancing force as one becomes powerful that is when the opposition intensifies their effort to ovethrow him.John Cruzehttp://www.blogger.com/profile/07838474765128004393noreply@blogger.com0tag:blogger.com,1999:blog-5638435311610920074.post-18718130153261891852018-04-23T07:06:00.000-07:002018-04-23T07:06:47.806-07:00Breath Fresh Air anytime with Breath Happy Multi Function AirpuriferThe air we breath is getting dirtier each day. Based on the study <span style="background-color: white; color: #0c131b; font-family: "pt serif" , serif; font-size: 16px; letter-spacing: 0.32px;">conducted by the Environmental Protection Agency (EPA), the air </span><em style="-webkit-font-smoothing: antialiased; background-color: white; box-sizing: border-box; color: #0c131b; font-family: "PT Serif", serif; font-size: 16px; letter-spacing: 0.32px; line-height: inherit; text-rendering: auto;">inside</em><span style="background-color: white; color: #0c131b; font-family: "pt serif" , serif; font-size: 16px; letter-spacing: 0.32px;"> a home might be two to five times more contaminated with pollutants, be it animal dander, cigarette smoke, or soot.</span><br />
<span style="background-color: white; color: #0c131b; font-family: "pt serif" , serif; font-size: 16px; letter-spacing: 0.32px;"><br /></span>
<span style="background-color: white; color: #0c131b; font-family: "pt serif" , serif; font-size: 16px; letter-spacing: 0.32px;">Enter the air purifier. They can be hugely beneficial for allergy and asthma sufferers, as well as anyone who lives near major highways or other pollutant-filled areas, like coal plants. The best ones use fans to cycle air through a series of filters, capturing impurities and jetting clean air back into the room. Choosing the right one comes down to its CADR rating — the measurement for how well an air purifier actually works. Aside from that, the right type of filter — a true HEPA is key — and making it sure it can accommodate the size of room you want will have you breathing easy.</span><br />
<span style="background-color: white; color: #0c131b; font-family: "pt serif" , serif; font-size: 16px; letter-spacing: 0.32px;"><br /></span>
<span style="color: #0c131b; font-family: "pt" serif , serif;"><span style="background-color: white; letter-spacing: 0.32px;">Breath Happy Air purifier performs way above the minimum expectations set by CADR because it uses several air filtration stages.It is also equipped with UV Light and IONizer to ensure that bad odors and contaminant are eliminated effectively.</span></span><br />
<span style="color: #0c131b; font-family: "pt" serif , serif;"><span style="background-color: white; letter-spacing: 0.32px;"><br /></span></span>
<span style="color: #0c131b; font-family: "pt" serif , serif;"><span style="background-color: white; letter-spacing: 0.32px;">Here are the images:</span></span><br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhQtSsC5kUdCX5Xg8F4P4YGea1dF3hyphenhyphenqEMV3LJrYHukT_ZseTQlPFvxOroXIlqM8QkN5yvyv17qb1Mu8WFXA0HaC1GVEXLQXqmidRCkf6TbZjkygzkspbYFqW1mWheqcD3FWpGK0kUulhww/s1600/HTB1EUlHohPI8KJjSspfq6ACFXXao.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="742" data-original-width="1000" height="237" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhQtSsC5kUdCX5Xg8F4P4YGea1dF3hyphenhyphenqEMV3LJrYHukT_ZseTQlPFvxOroXIlqM8QkN5yvyv17qb1Mu8WFXA0HaC1GVEXLQXqmidRCkf6TbZjkygzkspbYFqW1mWheqcD3FWpGK0kUulhww/s320/HTB1EUlHohPI8KJjSspfq6ACFXXao.jpg" width="320" /></a></div>
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhC3UgdNx9QnIoWlaS6EPXrcn6hDAmJHOxZOmgWmde-E4ckbiU4cW_XJnpfvk7vZzj-cUrm3AUKi0-MNzZaAnk2eBlrO0LtzazhEJWjhGXeHTlshEJ2UAOc3n8G7Cti9gIR7RATWLRkywv4/s1600/HTB1EuPQn8fH8KJjy1Xbq6zLdXXaS.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="848" data-original-width="1000" height="271" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhC3UgdNx9QnIoWlaS6EPXrcn6hDAmJHOxZOmgWmde-E4ckbiU4cW_XJnpfvk7vZzj-cUrm3AUKi0-MNzZaAnk2eBlrO0LtzazhEJWjhGXeHTlshEJ2UAOc3n8G7Cti9gIR7RATWLRkywv4/s320/HTB1EuPQn8fH8KJjy1Xbq6zLdXXaS.jpg" width="320" /></a></div>
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhbSgG3kXtYAu2iq71jWmrEcSoDNtxKfZ_AWufUvfQZgYQ9j_yVhhSqU60tc2f0TrreHEKoQgUibhqOECB9I9H7YBSxFR_v_w_0qrivKPta-4TpiMpxmSyupC8u28YasSAarDd8SXc1JkUH/s1600/HTB1gx6_n9YH8KJjSspdq6ARgVXaH.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="546" data-original-width="1000" height="174" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhbSgG3kXtYAu2iq71jWmrEcSoDNtxKfZ_AWufUvfQZgYQ9j_yVhhSqU60tc2f0TrreHEKoQgUibhqOECB9I9H7YBSxFR_v_w_0qrivKPta-4TpiMpxmSyupC8u28YasSAarDd8SXc1JkUH/s320/HTB1gx6_n9YH8KJjSspdq6ARgVXaH.jpg" width="320" /></a></div>
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjNMS2rbLII-Qtvj5A6pJ7G7GdZbtuhR9kLXkYcRVmAUyXA2TnbgSorneLVdSzPuL9LcGN3e3iRa6aQc7TR6-CM7qXTFWHwUlnGtl1xDIRy3r_wncz6tULeKphHpwqUoEcL02aXKiD_dNio/s1600/HTB1hAZfekfb_uJkSmFPq6ArCFXaI.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="1000" data-original-width="1000" height="320" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjNMS2rbLII-Qtvj5A6pJ7G7GdZbtuhR9kLXkYcRVmAUyXA2TnbgSorneLVdSzPuL9LcGN3e3iRa6aQc7TR6-CM7qXTFWHwUlnGtl1xDIRy3r_wncz6tULeKphHpwqUoEcL02aXKiD_dNio/s320/HTB1hAZfekfb_uJkSmFPq6ArCFXaI.jpg" width="320" /></a></div>
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgJxblXI1M02NKKJnk0UeMMS98TXg9mGyer529AaSvyTLbEMcup9MwO1t0QZgcqHr5Dom0ms0xBXW7UWoICJRt3it3cM3XH9d-o2zSTp-fAPEEZh41EDU-3QABSJVcfWr1lD06-X58LYGIb/s1600/HTB1Ho8BflLN8KJjSZFPq6xoLXXab.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="818" data-original-width="1000" height="261" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgJxblXI1M02NKKJnk0UeMMS98TXg9mGyer529AaSvyTLbEMcup9MwO1t0QZgcqHr5Dom0ms0xBXW7UWoICJRt3it3cM3XH9d-o2zSTp-fAPEEZh41EDU-3QABSJVcfWr1lD06-X58LYGIb/s320/HTB1Ho8BflLN8KJjSZFPq6xoLXXab.jpg" width="320" /></a></div>
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhT4uYGwFDEGEGBfW6pFL5oAgS7yrEf3v3um89y_stsO_Y-92BADSO3-LY0w4ujQncwi-qBVw3XpDTnK-SURUKi61Y9m-z1zoXv1FKq9bEr4bcrU8Eo0m-G7sG6IqXfNESRDFdNLXn-vcNs/s1600/HTB1jJb_n3vD8KJjSsplq6yIEFXaB.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="1000" data-original-width="1000" height="320" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhT4uYGwFDEGEGBfW6pFL5oAgS7yrEf3v3um89y_stsO_Y-92BADSO3-LY0w4ujQncwi-qBVw3XpDTnK-SURUKi61Y9m-z1zoXv1FKq9bEr4bcrU8Eo0m-G7sG6IqXfNESRDFdNLXn-vcNs/s320/HTB1jJb_n3vD8KJjSsplq6yIEFXaB.jpg" width="320" /></a></div>
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhE2z1K2ed0ByA-vzLGlvqF-_EDMqTVwnnts4RSGm7BpjJxjogBpcjDnW4FuVCrzMRxWBfnp3sjIkm0HAXFateTLswkkYZ6vaRLmZcbna_G4td2_RhXyDgjMue7EFwxNLDWUsbkU2087Knz/s1600/HTB1M_U0n8TH8KJjy0Fiq6ARsXXak.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="900" data-original-width="1000" height="288" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhE2z1K2ed0ByA-vzLGlvqF-_EDMqTVwnnts4RSGm7BpjJxjogBpcjDnW4FuVCrzMRxWBfnp3sjIkm0HAXFateTLswkkYZ6vaRLmZcbna_G4td2_RhXyDgjMue7EFwxNLDWUsbkU2087Knz/s320/HTB1M_U0n8TH8KJjy0Fiq6ARsXXak.jpg" width="320" /></a></div>
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgm_oYHo9Jp4WmVAZW3DA9WcTMrMgUdvbva-S8TT7ZliUVGBvGQjim7yRrAxQ9fYhSanJjsjDsqwko1GmpsyQf23HZ9DR5Kd35FHVsMqG6ph8IuTXZ7z21iMwlZMJ0G2Bq4eYQLqswCPPCo/s1600/HTB1SlxVob_I8KJjy1Xaq6zsxpXaW.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="1000" data-original-width="1000" height="320" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgm_oYHo9Jp4WmVAZW3DA9WcTMrMgUdvbva-S8TT7ZliUVGBvGQjim7yRrAxQ9fYhSanJjsjDsqwko1GmpsyQf23HZ9DR5Kd35FHVsMqG6ph8IuTXZ7z21iMwlZMJ0G2Bq4eYQLqswCPPCo/s320/HTB1SlxVob_I8KJjy1Xaq6zsxpXaW.jpg" width="320" /></a></div>
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgmHfu1lfPfOjf_PWXeFjjgZLZz8wR-EnEWs4-OXL35fAiC4mR3wcqNzNBSpgUHAwUcpKDxrDypNaHjVNtHhFguyqs5-2sQMu8U_Wk_n1yA-6TtQ9sd_wU33fRGV_yrKa5zWo1hObS3odAN/s1600/HTB1VeEuejgy_uJjSZKbq6xXkXXaJ.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="580" data-original-width="1000" height="185" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgmHfu1lfPfOjf_PWXeFjjgZLZz8wR-EnEWs4-OXL35fAiC4mR3wcqNzNBSpgUHAwUcpKDxrDypNaHjVNtHhFguyqs5-2sQMu8U_Wk_n1yA-6TtQ9sd_wU33fRGV_yrKa5zWo1hObS3odAN/s320/HTB1VeEuejgy_uJjSZKbq6xXkXXaJ.jpg" width="320" /></a></div>
<span style="color: #0c131b; font-family: "pt" serif , serif;"><span style="background-color: white; letter-spacing: 0.32px;">Ideally, air purifiers can remove the existing air contaminants but it is not finite, so for example the pollution directly comes from the exhaust of a car, the device due to its small size could not do miracle to remove all pollution coming from the car. It is better to get rid of the source first but does not yet guarantee that the car is only the source there are other sources inside the house and these sources does not produce air pollution as fast as the car or the smell from your neighbors while they are cooking. This is where the device can perform well. Another observation I found while using the device is that it could not suck in the air inside a room it needs an assistance from an electric fan to effectively keep the air circulating inside the room so that all air particles and contaminants will be constantly moving and as they go near the device, they get sucked in and purified.</span></span><br />
<span style="color: #0c131b; font-family: "pt" serif , serif;"><span style="background-color: white; letter-spacing: 0.32px;"><br /></span></span>
<span style="color: #0c131b; font-family: "pt" serif , serif;"><span style="background-color: white; letter-spacing: 0.32px;">I used to live in a neighborhood wherein I forget to close the window, some people will intentionally leave their car running the whole night just below my window or someone will smoke or cook a food that emits really pungent odor. So each night, I make sure that the whole room is sealed with very little air from out side coming in and I use this airpurifier device to get rid of any remaining air pollutants and of course an electric fan to keep the room cool and keep the air circulating.</span></span><br />
<span style="color: #0c131b; font-family: "pt" serif , serif;"><span style="background-color: white; letter-spacing: 0.32px;"><br /></span></span>
<span style="color: #0c131b; font-family: "pt" serif , serif;"><span style="background-color: white; letter-spacing: 0.32px;">I dont expect everybody to experience the same thing I did but as this device is necessary for any circumstances since there is car everywhere, people cook their food, people smoke, there paints on the walls and all over the house.</span></span><br />
<span style="color: #0c131b; font-family: "pt" serif , serif;"><span style="background-color: white; letter-spacing: 0.32px;"><br /></span></span>
<span style="color: #0c131b; font-family: "pt" serif , serif;"><span style="background-color: white; letter-spacing: 0.32px;"><br /></span></span>John Cruzehttp://www.blogger.com/profile/07838474765128004393noreply@blogger.com0tag:blogger.com,1999:blog-5638435311610920074.post-24730106633903101672018-03-07T07:25:00.000-08:002018-03-08T21:23:59.973-08:00Electronic Device Assembly Business Nowadays with the miniaturization of machines, small businessmen or engineers with brilliant ideas can easily compete with the giant players. Production machines used to be available only to people with huge funds has become cheaper and people that can afford to buy a car can easily invest their money in these machines to start an electronics assembly business from pcb fab to enclosure. And the best part is all these machines can easily fit on a small apartment.<br />
<br />
The machines needed to start the business are the folliwing:<br />
<br />
1. Design and Prototyping Equipments<br />
<br />
<ul>
<li>Personal Computer</li>
<li>Mini Cnc(90mm x 120mm work area) for pcb prototyping</li>
<li>3d Printer for the prototyping of enclosures</li>
<li>Laser Cutter for enclosure porotyping</li>
<li>Oscilloscope/Multimeter and other tools</li>
<li>CAD Software</li>
</ul>
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgkmxgcD_hjObCMLeu7esY3QjqLw8IZdomwUpWvBm9NdTV3UnwNVMPkNVZTewNcfEBsEB84Fg-Jt73vs8Q_K3RDkflgA6IQU8zUwRTAGWzavJb4maMO1hd7DrcrRgP6n7KnNyT4WQNfOBrm/s1600/FB_IMG_1520415857805.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="720" data-original-width="720" height="320" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgkmxgcD_hjObCMLeu7esY3QjqLw8IZdomwUpWvBm9NdTV3UnwNVMPkNVZTewNcfEBsEB84Fg-Jt73vs8Q_K3RDkflgA6IQU8zUwRTAGWzavJb4maMO1hd7DrcrRgP6n7KnNyT4WQNfOBrm/s320/FB_IMG_1520415857805.jpg" width="320" /></a></div>
<div>
<br /></div>
<br />
2. Production Machines<br />
<br />
<div>
<ul>
<li>Pick and Place Machine</li>
<li>Cnc Router-300*400</li>
<li>Reflow Oven</li>
<li>Pcb Stencil Printer</li>
<li>Mini Plastic Injection Machine</li>
<li>Laser Cutter- 300*400</li>
</ul>
</div>
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhMCOO9JjnvU-AympoqCi4YyX_5QVHiKeSmLA06ZDD7nqPXqMKYVjQwTndL9-eFlj0xrCHeM78NN6hyphenhyphen99RbQHPbG-ONDLtbkEPL1e6iLdHYTOd6INigqqlqs-6I4IvKppk8UTowaoUBrN0D/s1600/SMT-Production-line-CHMT36VA-Vision-Pick-and-Place-Machine-3040-Stencil-Printer-Reflow-Oven-T962A-Hot.jpg_640x640q90.jpg_+%25282%2529.webp" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="640" data-original-width="640" height="320" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhMCOO9JjnvU-AympoqCi4YyX_5QVHiKeSmLA06ZDD7nqPXqMKYVjQwTndL9-eFlj0xrCHeM78NN6hyphenhyphen99RbQHPbG-ONDLtbkEPL1e6iLdHYTOd6INigqqlqs-6I4IvKppk8UTowaoUBrN0D/s320/SMT-Production-line-CHMT36VA-Vision-Pick-and-Place-Machine-3040-Stencil-Printer-Reflow-Oven-T962A-Hot.jpg_640x640q90.jpg_+%25282%2529.webp" width="320" /></a></div>
<div>
<br /></div>
<div>
All the above mentioned machines could only cost about the same price as a brand new Toyota Vios or less than 1Million pesos.</div>
<div>
<br /></div>
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjBAFPWKkrfbW5oiLxArrKp-mOb26whyCY41ZWSptlI4ZM6CwqTAay0L4EoCeEP-0jDI1-0akruWwfBkwgSI0pBwipqdEzhtXmw1I4zTmg_B7q2WW3aLEcfnZjncmmEMPdZkBiawNa_ULmK/s1600/HTB1kdhyGXXXXXbZXVXXq6xXFXXXn.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="366" data-original-width="566" height="206" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjBAFPWKkrfbW5oiLxArrKp-mOb26whyCY41ZWSptlI4ZM6CwqTAay0L4EoCeEP-0jDI1-0akruWwfBkwgSI0pBwipqdEzhtXmw1I4zTmg_B7q2WW3aLEcfnZjncmmEMPdZkBiawNa_ULmK/s320/HTB1kdhyGXXXXXbZXVXXq6xXFXXXn.jpg" width="320" /></a></div>
<div>
<br /></div>
<div>
The business is ideal for contract manufacturing or would cater to the market where inventors require to produce less than 100 units for experimenting how their product will be accepted by their target market. This market segment is where I belong because I have very limited budget. Based on my experience, the creation of the plastic mould itself is already unaffordable because it would cost around Php100,000(this is made in China because somebody has told me that the mould used in mineral water bottle caps was worth Php 375000 done locally) already and the manufacturer only accept a minimum of 1000 units. Plastic moulds can already be 3d printed because there are filaments that only melts at 210 degrees celcious while thermo plastics(the material used in plastic injection) easily melts at 130 degrees.</div>
<div>
<br /></div>
<div>
The equipments are also ideal and must haves for every school and/or Univerisities because these machines are also being used by the industry so it is good for students to have hands on experience and if they have access to this equipments they will be encourage to be creative and who knows they could produce new products that could become like Samsung or Apple someday. The sales of both companies is enough to make the Phillippines become a very rich country.</div>
John Cruzehttp://www.blogger.com/profile/07838474765128004393noreply@blogger.com0tag:blogger.com,1999:blog-5638435311610920074.post-53757592238455777882018-02-19T02:12:00.000-08:002018-02-24T00:52:40.001-08:00Create a powerful Bluetooth based Network of BeaconsBeacons are not just for increasing sales or giving out more interactive physical environment to enhance user's experience. Beacons can be a powerful tool to detect patterns before a major catastrophe can happen resulting in the protection of properties and life.<br />
<div>
<br /></div>
<div>
A network of sensors for monitoring temperature and humidity, detect if an object has moved when should not have moved, an employee forgot to close the window or door, an employee stayed too long at the pantry or know how many customers checked a certain product are just a few of the useful data that can be collected with the networked beacons. </div>
<div class="separator" style="clear: both; text-align: center;">
</div>
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhBAdFzxiODFYVrQxL_6SZ8ai10HwmoUNbVZ6m1JkpxXp-WMEnKFz_I4EtU-U1jUh5yBqKiiiVEE30nt-ZD4piefDmZ5KMxvjOmWdoNu-w9U6xIfxuIFCOPakvXlEbITNjKd8sT5UNrkqoz/s1600/networkedbeacons.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="588" data-original-width="1220" height="153" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhBAdFzxiODFYVrQxL_6SZ8ai10HwmoUNbVZ6m1JkpxXp-WMEnKFz_I4EtU-U1jUh5yBqKiiiVEE30nt-ZD4piefDmZ5KMxvjOmWdoNu-w9U6xIfxuIFCOPakvXlEbITNjKd8sT5UNrkqoz/s320/networkedbeacons.png" width="320" /></a></div>
<div>
<br /></div>
<div class="separator" style="clear: both; text-align: center;">
</div>
<div>
The above figure shows all the necessary beacon types one will need to implement a networked beacons. </div>
<div>
<br /></div>
<div>
Here are the actual images of the sensors and the gateway:</div>
<div>
<br /></div>
<div>
The Kit:(This is a great package to test a lot of use case scenarios. Available at <a href="https://www.olx.ph/item/beacon-development-kit-eddystones-ibeacons-sensors-ID8ghhh.html?h=293ec848d5" target="_blank">olx</a>.)</div>
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgD5sXQgKQj_EeBH56LN_lO0KRAF8Crxpl5ktA0rQ3lGjPcFYRPKasvhB-FspZCckCZolOmOmcQVHI2ZpF_t7HtNXDhGgvFqY0ZTNH85B2C0GrFdNrFFBOMsVouRor4d7989DxfTzXDlYhH/s1600/beaconkit.PNG" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="285" data-original-width="322" height="283" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgD5sXQgKQj_EeBH56LN_lO0KRAF8Crxpl5ktA0rQ3lGjPcFYRPKasvhB-FspZCckCZolOmOmcQVHI2ZpF_t7HtNXDhGgvFqY0ZTNH85B2C0GrFdNrFFBOMsVouRor4d7989DxfTzXDlYhH/s320/beaconkit.PNG" width="320" /></a></div>
<br />
The Kit includes the following beacons(excluding the Apps Factory Beacon):<br />
<br />
<b>C7:</b><br />
<br />
<blockquote class="tr_bq">
Size: 90 x 60 x 4 mm<br />
Ibeacon Only<br />
Disposable(Battery can not be replaced)<br />
This is an ideal substitute to rfid badges</blockquote>
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhe5hHSo0s5YISOxX2YHtI8GBY3QJaEaVnM5VlYfG1YY8z2fCgEIUloFDBb552H19BzEXg0IYu-qjg0OzSDoMzfhJpjtm6Smbk1KUmhI-_-iLlJgZPLMFVOpY4-D_NvxK3UnvsxE2D5qsYq/s1600/c7.PNG" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="134" data-original-width="165" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhe5hHSo0s5YISOxX2YHtI8GBY3QJaEaVnM5VlYfG1YY8z2fCgEIUloFDBb552H19BzEXg0IYu-qjg0OzSDoMzfhJpjtm6Smbk1KUmhI-_-iLlJgZPLMFVOpY4-D_NvxK3UnvsxE2D5qsYq/s1600/c7.PNG" /></a></div>
<b>E2:</b><br />
<br />
<blockquote class="tr_bq">
Size: 72 x 72 x 18mm<br />
Ibeacon + EddyStone<br />
External ON/OFF switch<br />
Battery can be replaced</blockquote>
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiOxeEDw2xZ9WJUYPOJAWEcSvHYaGAuELAROe5yYUb-Kh4Z_3jlTAuwTSDNaJnNpRF912Ep3lxzGKzUNuMjdArdFo9UlsTCkncqGtm1v4Lsgl9PPKBqE1A_wGFEY4FGvPVESm7SBbsKR2-K/s1600/e2.PNG" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="207" data-original-width="236" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiOxeEDw2xZ9WJUYPOJAWEcSvHYaGAuELAROe5yYUb-Kh4Z_3jlTAuwTSDNaJnNpRF912Ep3lxzGKzUNuMjdArdFo9UlsTCkncqGtm1v4Lsgl9PPKBqE1A_wGFEY4FGvPVESm7SBbsKR2-K/s1600/e2.PNG" /></a></div>
<br />
<b>E6:</b><br />
<br />
<blockquote class="tr_bq">
Size: 42.5 x 23.5 x 5.3mm<br />
Ambient Light Sensor<br />
Battery can be replaced<br />
<div>
<br /></div>
</blockquote>
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgopMcg7sTilyPoY6dkY4d5I7_XtR4DdIoY3PYkILTBVKUZZRiuMRQBJGxDWX-dYX4_U7ZMItOlIv8FXTAmdyiCgFCh0I6VT3EFbNcb7f-vbGLNqzBnuACmQPDWL7kO4ZgHyF7XL2-rXJXk/s1600/e6.PNG" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="175" data-original-width="198" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgopMcg7sTilyPoY6dkY4d5I7_XtR4DdIoY3PYkILTBVKUZZRiuMRQBJGxDWX-dYX4_U7ZMItOlIv8FXTAmdyiCgFCh0I6VT3EFbNcb7f-vbGLNqzBnuACmQPDWL7kO4ZgHyF7XL2-rXJXk/s1600/e6.PNG" /></a></div>
<br />
<b>G1(Gateway):</b><br />
<br />
<blockquote class="tr_bq">
Size: 150 x 150 x 36mm<br />
Bluetooth to Wifi Gateway<br />
MicroUSB Power Input(5V1A)</blockquote>
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEi9EErzfDmotPtFEVhVOhXsIWbs8n9gXi315W4ufhA8kZF4WTeF93EBoZTEC_8Q_6oXgHlpgLUdyLmlAMyVZsnvPOkh0WEP9l5M5IygPpV92LPZm-wCg4jFA9QN9uZeyFcLIcvLvifvYH6F/s1600/g1.PNG" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="378" data-original-width="656" height="184" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEi9EErzfDmotPtFEVhVOhXsIWbs8n9gXi315W4ufhA8kZF4WTeF93EBoZTEC_8Q_6oXgHlpgLUdyLmlAMyVZsnvPOkh0WEP9l5M5IygPpV92LPZm-wCg4jFA9QN9uZeyFcLIcvLvifvYH6F/s320/g1.PNG" width="320" /></a></div>
<div class="separator" style="clear: both; text-align: center;">
<br /></div>
<br />
<b>I3:</b><br />
<blockquote class="tr_bq">
Size: 72 x 45 x 22mm<br />
Ibeacon Only<br />
200m Range<br />
Battery can be replaced</blockquote>
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjdd4h-yQ7boPxmJMqEzGM7SjxQGgRPVxktmd_p_xAaTRCMogC6ZVkD8ZdEAUZ2GF340Mox_fdmCw7xga9Uu6ayyukRNJZMXC2ORbbsxn-gFshyphenhyphenGGykNaTp4HDFKagnDCtSwxKzcWQlqeQS/s1600/i3.PNG" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="218" data-original-width="218" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjdd4h-yQ7boPxmJMqEzGM7SjxQGgRPVxktmd_p_xAaTRCMogC6ZVkD8ZdEAUZ2GF340Mox_fdmCw7xga9Uu6ayyukRNJZMXC2ORbbsxn-gFshyphenhyphenGGykNaTp4HDFKagnDCtSwxKzcWQlqeQS/s1600/i3.PNG" /></a></div>
<br />
<br />
<b>I7:</b><br />
<blockquote class="tr_bq">
Size: 50 x 50 x 15mm<br />
Ibeacon + EddyStone + Accelerometer<br />
External On/Off Switch<br />
Battery can be replaced</blockquote>
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiR95QucIjtnFzlGjMaAzznUYFMdl5gtX_lKyEKsxGdqg4-9BLHfdeW3rV0d_eW6CYNcMQW5w1Ya1fCu7s6wsPhbCO4xixqX708yZx90mcQQm1bBFb63ko2vvkleTQW0PsBKfOGDW720egs/s1600/i7.PNG" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="226" data-original-width="284" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiR95QucIjtnFzlGjMaAzznUYFMdl5gtX_lKyEKsxGdqg4-9BLHfdeW3rV0d_eW6CYNcMQW5w1Ya1fCu7s6wsPhbCO4xixqX708yZx90mcQQm1bBFb63ko2vvkleTQW0PsBKfOGDW720egs/s1600/i7.PNG" /></a></div>
<div>
<br /></div>
<div>
S1:<br />
<br />
<blockquote class="tr_bq">
Size: 70.6 x 38 x 17.8mm<br />
Ibeacon Only + EddyStone + Temperature + Humidity Sensor<br />
Battery can be replaced</blockquote>
</div>
<div>
<br /></div>
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiVJF52erAtFIIPcPolQ2GZmRkeHxdNZAepQaKqTA7Cv2rpggvHwzEegMG3egEhsk-MXyx44ojPYyeE56P0bw3rEW_awE9ZALVUIzQEJhKSf9MVOUl7PP2XBo9kMoBmPwvitr4Ik33MTkIq/s1600/S1.PNG" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="158" data-original-width="189" height="267" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiVJF52erAtFIIPcPolQ2GZmRkeHxdNZAepQaKqTA7Cv2rpggvHwzEegMG3egEhsk-MXyx44ojPYyeE56P0bw3rEW_awE9ZALVUIzQEJhKSf9MVOUl7PP2XBo9kMoBmPwvitr4Ik33MTkIq/s320/S1.PNG" width="320" /></a></div>
<div>
<br /></div>
<div>
Apps Factory Beacon with Buzzer:</div>
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgNDNseLJUc-PhDbW929zNb4bWrnOes8gMNW-4pstFc0ps0uBpwMO7PmvmrAyIgtyWNFJsWMqZCZvrskrvlX2M6cfjCh7_CCBz7NunyKc8TOJL60fM3kPSp87dkvwNHERPEED3KQkjuHkvo/s1600/appfactory.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="393" data-original-width="324" height="320" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgNDNseLJUc-PhDbW929zNb4bWrnOes8gMNW-4pstFc0ps0uBpwMO7PmvmrAyIgtyWNFJsWMqZCZvrskrvlX2M6cfjCh7_CCBz7NunyKc8TOJL60fM3kPSp87dkvwNHERPEED3KQkjuHkvo/s320/appfactory.jpg" width="263" /></a></div>
<div>
<br /></div>
<div>
<br /></div>
John Cruzehttp://www.blogger.com/profile/07838474765128004393noreply@blogger.com0tag:blogger.com,1999:blog-5638435311610920074.post-88140674765570807472018-02-14T08:29:00.000-08:002018-03-01T23:46:01.119-08:00IT Company and Manpower AgencyAn IT Company develops its own products and sells them to end users. They own the copyrights and their products are original.<br />
<br />
A Manpower Agency recruits individuals and deploy them to their so called "client". These manpower agencies always dominate job sites and facebook groups for programmers.<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEj8Cz2AAeFt6oPvus0BR0RZAp0p5n0XjsO_aVROWStJ8OK3fD_DRhH-5QJPws9kzNqvLvfBXS_rPvlEUVaJLR6z1c-LJeZrrhMW3nk_yWi0TpbHfZ_5nalrSlsmTVZ3NMSxo83JxTwYB5fk/s1600/tumblr_nasiplAH851qhu3vxo1_500.gif" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="281" data-original-width="500" height="179" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEj8Cz2AAeFt6oPvus0BR0RZAp0p5n0XjsO_aVROWStJ8OK3fD_DRhH-5QJPws9kzNqvLvfBXS_rPvlEUVaJLR6z1c-LJeZrrhMW3nk_yWi0TpbHfZ_5nalrSlsmTVZ3NMSxo83JxTwYB5fk/s320/tumblr_nasiplAH851qhu3vxo1_500.gif" width="320" /></a></div>
<br />
There is a big question why manpower agencies name their companies as IT Companies to disguise themselves as IT Companies. A big question is why do they do this? This tactics originates from the USA and usually funded by the Chinese with Indians as their partners where ponzi schemes abounds.<br />
<br />
I was lured into this because I was really in need of money and these scammers offers job with no interviews but offers no security but I was in it for the quick cash and I am not ignorant that these people are actually scammers they will say they are an IT Company which I dont believe or shoyld I say never believed at all. These are usually females walking all over the metro they easily fill in any available space like when you're eating at a mall and there is a vacant seat, 99% of the time, it will be filled up by a female recruiting or selling anything under the sun or when you ride an fx or jeepney, 99% of the passengers is always females. I am not a female hater I have just observed that their numbers is way too much to take. It is just too abnormal and vommiting. My mom does not go out much nor my relatives nor our neighbors. Is living in a small space makes them go out and hunt for something all the time? Is there someone that tells them they should always stay on the street? I dont see them buying, they just walk all over and keep on riding public transport. I just wonder what they feed on.<br />
<br />
These females are so proud of their jobs, I've read an article written by these females and they think of themselves as IT managers as she wrote, the client complained that she gave them a junior but they asked for a senior. I just could not imagine that they treat programming jobs as a commodity this female described in her article how she was able to pull out the junior and replaced him with a senior. It was a glorified scamming scheme and yet she's so proud of it.<br />
<br />
Update:<br />
I applied for a job at a certain tech company and not surprised that all recruiters again are females, but did not succeeded because it was not my primary skills and had not used it professionaly.<br />
<br />
While on my way home, a female sat beside me and during our journey she put her sweaty arms on top of my legs which is very unusual. She also pretends looking at her cellphone but was somewhat wants to tell me something, this behavior is somewhat similar to those females in the office of the client of the agency that I am referring to in this post. (As I recall correctly when I am still working at the agency's client, there is not a day where their females keep looking at me as if I am a walking cash)I was waiting for her to say something but the vehicle stopped and a passenger got out so I immediately stayed away from this female and a manong sat between us. After a few minutes a sports car passed by and the female looked at me as if she wants me to buy her a sports car, that made me conclude that she was a well you know. She could have been tracking me and the "sitting beside me" incidence is not a coincidence. She could have been tracking me even when I am still at the office where I am applying. I heard that outsourcing from foreign clients usually involves in sex trade, but not all of course but with this incident, I am not surprised.<br />
<br />
Even when I was on an airplane going to Thailand which was almost 10yrs ago, those Pinay looking ladies at the airplane exhibited similar behavior. They see single traveling male as a walking cash. This is why HIV is getting a big problem besause a lot of companies are very discreet, they should show their true colors to prevent hiv.John Cruzehttp://www.blogger.com/profile/07838474765128004393noreply@blogger.com0tag:blogger.com,1999:blog-5638435311610920074.post-41594426514777180832018-02-12T03:17:00.001-08:002018-02-12T03:17:37.946-08:00An Update to the Ibeacon Scanner App for AndroidI have found a time to review the source code of the <a href="https://gadgetzoneblog.blogspot.com/2015/02/a-simple-ibeacon-scanner-app-in-android.html">Ibeacon Scanner App</a> and it would be easy to add the feature to include scanning Eddystone Beacons. To do this, the file DeviceScanActivity.java needs to be modified to detect the 3 Eddystone frames(UID, TLM, URL).<br />
<br />
Here is the portion of the file that needs to be modified:<br />
<br />
<blockquote class="tr_bq">
public void onLeScan(final BluetoothDevice device, final int rssi, final byte[] scanRecord) {<br />
int startByte = 2;<br />
<span style="color: blue;">boolean patternFound = false;</span><br />
<span style="color: purple;"> while (startByte <= 5) {</span><br />
<span style="color: purple;"> if ( ((int) scanRecord[startByte + 2] & 0xff) == 0x02 && //Identifies an iBeacon</span><br />
<span style="color: purple;"> //Identifies correct data length</span><br />
<span style="color: purple;"> ((int) scanRecord[startByte + 3] & 0xff) == 0x15) {</span><br />
<span style="color: purple;"> patternFound = true;</span><br />
<span style="color: purple;"> break;</span><br />
<span style="color: purple;"> }</span><br />
<span style="color: purple;"> startByte++;</span><br />
<span style="color: purple;"> }</span><br />
if (patternFound) {<br />
//Convert to hex String<br />
byte[] uuidBytes = new byte[16];<br />
System.arraycopy(scanRecord, startByte+4, uuidBytes, 0, 16);<br />
String hexString = bytesToHex(uuidBytes);<br />
<br />
//Here is your UUID<br />
String uuid = hexString.substring(0,8) + "-" +<br />
hexString.substring(8,12) + "-" +<br />
hexString.substring(12,16) + "-" +<br />
hexString.substring(16,20) + "-" +<br />
hexString.substring(20,32);<br />
mUUID[mElems]=uuid;<br />
mRSSI[mElems]= String.valueOf(rssi);<br />
mElems++;<br />
//Here is your Major value<br />
int major = (scanRecord[startByte+20] & 0xff) * 0x100 + (scanRecord[startByte+21] & 0xff);<br />
<br />
//Here is your Minor value<br />
int minor = (scanRecord[startByte+22] & 0xff) * 0x100 + (scanRecord[startByte+23] & 0xff);<br />
runOnUiThread(new Runnable() {<br />
</blockquote>
<div>
<br /></div>
The variable <span style="color: blue;"> </span><span style="color: blue;">patternFound</span><span style="color: blue;"> </span>was used to detect the ibeacon pattern and the scanRecord variable currently contains the data being processed and which is being examined whether it contains the ibeacon pattern. And from this, we can already insert the code to identify the current contents of scanRecord if it is an Eddystone pattern.<br />
<br />John Cruzehttp://www.blogger.com/profile/07838474765128004393noreply@blogger.com1tag:blogger.com,1999:blog-5638435311610920074.post-78656342862820501472017-12-28T03:13:00.002-08:002017-12-28T03:13:35.023-08:00Eddystone URL Encoding : A Beginner's GuideFor beginners who need to know how to convert url into UINT8_T, This can be a very helpful information:<br /><br />To begin with, beginners need to know exactly what the URL frame contains and here is the details:<br /><br />The first 9 bytes of the frame are just prefix. To check the content of the prefix value, see the picture below:<br /><br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjL-UYC3oRUz5HqtE_9eaFLcnBK75GOI2qoFamuro60dTWqHDGVhQEsTH6nXbqYFQesrvbA0fI2p7xLiBUxmFSSOp_2yl7u6INjGy82itZzw_IeKlj_IbSlveLDEPD6EhmY2rtC4-p1VfY/s1600/url.PNG" imageanchor="1" style="color: #888888; margin-left: 1em; margin-right: 1em; text-decoration: none;"><img border="0" data-original-height="132" data-original-width="312" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjL-UYC3oRUz5HqtE_9eaFLcnBK75GOI2qoFamuro60dTWqHDGVhQEsTH6nXbqYFQesrvbA0fI2p7xLiBUxmFSSOp_2yl7u6INjGy82itZzw_IeKlj_IbSlveLDEPD6EhmY2rtC4-p1VfY/s1600/url.PNG" style="background: rgb(255, 255, 255); border: 1px solid rgb(238, 238, 238); box-shadow: rgba(0, 0, 0, 0.0980392) 1px 1px 5px; padding: 5px; position: relative;" /></a></div>
<br />The 10th and 11th byte is constant having the value "AAFE". And starting on the 12th byte is the actual eddystone frame which is broken down into the following:<br />
<h2 style="border-bottom: 1px solid rgb(234, 236, 239); box-sizing: border-box; color: #24292e; font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", Helvetica, Arial, sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol"; font-size: 22px; line-height: 1.25; margin: 24px 0px 16px; padding-bottom: 0.3em; position: relative;">
Frame Specification</h2>
<table style="border-collapse: collapse; border-spacing: 0px; box-sizing: border-box; color: #24292e; display: block; font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", Helvetica, Arial, sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol"; font-size: 16px; margin-bottom: 16px; margin-top: 0px; overflow: auto; width: 888px;"><thead style="box-sizing: border-box;">
<tr style="background-color: white; border-top: 1px solid rgb(198, 203, 209); box-sizing: border-box;"><th style="border: 1px solid rgb(223, 226, 229); box-sizing: border-box; padding: 6px 13px;">Byte offset</th><th style="border: 1px solid rgb(223, 226, 229); box-sizing: border-box; padding: 6px 13px;">Field</th><th style="border: 1px solid rgb(223, 226, 229); box-sizing: border-box; padding: 6px 13px;">Description</th></tr>
</thead><tbody style="box-sizing: border-box;">
<tr style="background-color: white; border-top: 1px solid rgb(198, 203, 209); box-sizing: border-box;"><td style="border: 1px solid rgb(223, 226, 229); box-sizing: border-box; padding: 6px 13px;">0</td><td style="border: 1px solid rgb(223, 226, 229); box-sizing: border-box; padding: 6px 13px;">Frame Type</td><td style="border: 1px solid rgb(223, 226, 229); box-sizing: border-box; padding: 6px 13px;">Value = <code style="background-color: rgba(27, 31, 35, 0.0470588); border-radius: 3px; box-sizing: border-box; font-family: SFMono-Regular, Consolas, "Liberation Mono", Menlo, Courier, monospace; font-size: 13.6px; margin: 0px; padding: 0.2em 0.4em;">0x10</code></td></tr>
<tr style="background-color: #f6f8fa; border-top: 1px solid rgb(198, 203, 209); box-sizing: border-box;"><td style="border: 1px solid rgb(223, 226, 229); box-sizing: border-box; padding: 6px 13px;">1</td><td style="border: 1px solid rgb(223, 226, 229); box-sizing: border-box; padding: 6px 13px;">TX Power</td><td style="border: 1px solid rgb(223, 226, 229); box-sizing: border-box; padding: 6px 13px;">Calibrated Tx power at 0 m</td></tr>
<tr style="background-color: white; border-top: 1px solid rgb(198, 203, 209); box-sizing: border-box;"><td style="border: 1px solid rgb(223, 226, 229); box-sizing: border-box; padding: 6px 13px;">2</td><td style="border: 1px solid rgb(223, 226, 229); box-sizing: border-box; padding: 6px 13px;">URL Scheme</td><td style="border: 1px solid rgb(223, 226, 229); box-sizing: border-box; padding: 6px 13px;">Encoded Scheme Prefix</td></tr>
<tr style="background-color: #f6f8fa; border-top: 1px solid rgb(198, 203, 209); box-sizing: border-box;"><td style="border: 1px solid rgb(223, 226, 229); box-sizing: border-box; padding: 6px 13px;">3+</td><td style="border: 1px solid rgb(223, 226, 229); box-sizing: border-box; padding: 6px 13px;">Encoded URL</td><td style="border: 1px solid rgb(223, 226, 229); box-sizing: border-box; padding: 6px 13px;">Length 1-17</td></tr>
</tbody></table>
<br />The URL prefix have constant designated values:<br /><br />
<h3 style="box-sizing: border-box; color: #24292e; font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", Helvetica, Arial, sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol"; font-size: 1.25em; line-height: 1.25; margin: 24px 0px 16px; position: relative;">
URL Scheme Prefix</h3>
<div style="box-sizing: border-box; color: #24292e; font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", Helvetica, Arial, sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol"; font-size: 16px; margin-bottom: 16px;">
The URL Scheme Prefix byte defines the identifier scheme, an optional prefix and how the remainder of the URL is encoded.</div>
<table style="border-collapse: collapse; border-spacing: 0px; box-sizing: border-box; color: #24292e; display: block; font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", Helvetica, Arial, sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol"; font-size: 16px; margin-bottom: 16px; margin-top: 0px; overflow: auto; width: 888px;"><thead style="box-sizing: border-box;">
<tr style="background-color: white; border-top: 1px solid rgb(198, 203, 209); box-sizing: border-box;"><th align="left" style="border: 1px solid rgb(223, 226, 229); box-sizing: border-box; padding: 6px 13px;">Decimal</th><th align="left" style="border: 1px solid rgb(223, 226, 229); box-sizing: border-box; padding: 6px 13px;">Hex</th><th align="left" style="border: 1px solid rgb(223, 226, 229); box-sizing: border-box; padding: 6px 13px;">Expansion</th></tr>
</thead><tbody style="box-sizing: border-box;">
<tr style="background-color: white; border-top: 1px solid rgb(198, 203, 209); box-sizing: border-box;"><td align="left" style="border: 1px solid rgb(223, 226, 229); box-sizing: border-box; padding: 6px 13px;">0</td><td align="left" style="border: 1px solid rgb(223, 226, 229); box-sizing: border-box; padding: 6px 13px;">0x00</td><td align="left" style="border: 1px solid rgb(223, 226, 229); box-sizing: border-box; padding: 6px 13px;"><code style="background-color: rgba(27, 31, 35, 0.0470588); border-radius: 3px; box-sizing: border-box; font-family: SFMono-Regular, Consolas, "Liberation Mono", Menlo, Courier, monospace; font-size: 13.6px; margin: 0px; padding: 0.2em 0.4em;">http://www.</code></td></tr>
<tr style="background-color: #f6f8fa; border-top: 1px solid rgb(198, 203, 209); box-sizing: border-box;"><td align="left" style="border: 1px solid rgb(223, 226, 229); box-sizing: border-box; padding: 6px 13px;">1</td><td align="left" style="border: 1px solid rgb(223, 226, 229); box-sizing: border-box; padding: 6px 13px;">0x01</td><td align="left" style="border: 1px solid rgb(223, 226, 229); box-sizing: border-box; padding: 6px 13px;"><code style="background-color: rgba(27, 31, 35, 0.0470588); border-radius: 3px; box-sizing: border-box; font-family: SFMono-Regular, Consolas, "Liberation Mono", Menlo, Courier, monospace; font-size: 13.6px; margin: 0px; padding: 0.2em 0.4em;">https://www.</code></td></tr>
<tr style="background-color: white; border-top: 1px solid rgb(198, 203, 209); box-sizing: border-box;"><td align="left" style="border: 1px solid rgb(223, 226, 229); box-sizing: border-box; padding: 6px 13px;">2</td><td align="left" style="border: 1px solid rgb(223, 226, 229); box-sizing: border-box; padding: 6px 13px;">0x02</td><td align="left" style="border: 1px solid rgb(223, 226, 229); box-sizing: border-box; padding: 6px 13px;"><code style="background-color: rgba(27, 31, 35, 0.0470588); border-radius: 3px; box-sizing: border-box; font-family: SFMono-Regular, Consolas, "Liberation Mono", Menlo, Courier, monospace; font-size: 13.6px; margin: 0px; padding: 0.2em 0.4em;">http://</code></td></tr>
<tr style="background-color: #f6f8fa; border-top: 1px solid rgb(198, 203, 209); box-sizing: border-box;"><td align="left" style="border: 1px solid rgb(223, 226, 229); box-sizing: border-box; padding: 6px 13px;">3</td><td align="left" style="border: 1px solid rgb(223, 226, 229); box-sizing: border-box; padding: 6px 13px;">0x03</td><td align="left" style="border: 1px solid rgb(223, 226, 229); box-sizing: border-box; padding: 6px 13px;"><code style="background-color: rgba(27, 31, 35, 0.0470588); border-radius: 3px; box-sizing: border-box; font-family: SFMono-Regular, Consolas, "Liberation Mono", Menlo, Courier, monospace; font-size: 13.6px; margin: 0px; padding: 0.2em 0.4em;">https://</code></td></tr>
</tbody></table>
<br />The URL Expansion also have constant values:<br />
<table style="border-collapse: collapse; border-spacing: 0px; box-sizing: border-box; color: #24292e; display: block; font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", Helvetica, Arial, sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol"; font-size: 16px; margin-bottom: 16px; margin-top: 0px; overflow: auto; width: 888px;"><thead style="box-sizing: border-box;">
<tr style="background-color: white; border-top: 1px solid rgb(198, 203, 209); box-sizing: border-box;"><th align="left" style="border: 1px solid rgb(223, 226, 229); box-sizing: border-box; padding: 6px 13px;">Decimal</th><th align="left" style="border: 1px solid rgb(223, 226, 229); box-sizing: border-box; padding: 6px 13px;">Hex</th><th align="left" style="border: 1px solid rgb(223, 226, 229); box-sizing: border-box; padding: 6px 13px;">Expansion</th></tr>
</thead><tbody style="box-sizing: border-box;">
<tr style="background-color: white; border-top: 1px solid rgb(198, 203, 209); box-sizing: border-box;"><td align="left" style="border: 1px solid rgb(223, 226, 229); box-sizing: border-box; padding: 6px 13px;">0</td><td align="left" style="border: 1px solid rgb(223, 226, 229); box-sizing: border-box; padding: 6px 13px;">0x00</td><td align="left" style="border: 1px solid rgb(223, 226, 229); box-sizing: border-box; padding: 6px 13px;">.com/</td></tr>
<tr style="background-color: #f6f8fa; border-top: 1px solid rgb(198, 203, 209); box-sizing: border-box;"><td align="left" style="border: 1px solid rgb(223, 226, 229); box-sizing: border-box; padding: 6px 13px;">1</td><td align="left" style="border: 1px solid rgb(223, 226, 229); box-sizing: border-box; padding: 6px 13px;">0x01</td><td align="left" style="border: 1px solid rgb(223, 226, 229); box-sizing: border-box; padding: 6px 13px;">.org/</td></tr>
<tr style="background-color: white; border-top: 1px solid rgb(198, 203, 209); box-sizing: border-box;"><td align="left" style="border: 1px solid rgb(223, 226, 229); box-sizing: border-box; padding: 6px 13px;">2</td><td align="left" style="border: 1px solid rgb(223, 226, 229); box-sizing: border-box; padding: 6px 13px;">0x02</td><td align="left" style="border: 1px solid rgb(223, 226, 229); box-sizing: border-box; padding: 6px 13px;">.edu/</td></tr>
<tr style="background-color: #f6f8fa; border-top: 1px solid rgb(198, 203, 209); box-sizing: border-box;"><td align="left" style="border: 1px solid rgb(223, 226, 229); box-sizing: border-box; padding: 6px 13px;">3</td><td align="left" style="border: 1px solid rgb(223, 226, 229); box-sizing: border-box; padding: 6px 13px;">0x03</td><td align="left" style="border: 1px solid rgb(223, 226, 229); box-sizing: border-box; padding: 6px 13px;">.net/</td></tr>
<tr style="background-color: white; border-top: 1px solid rgb(198, 203, 209); box-sizing: border-box;"><td align="left" style="border: 1px solid rgb(223, 226, 229); box-sizing: border-box; padding: 6px 13px;">4</td><td align="left" style="border: 1px solid rgb(223, 226, 229); box-sizing: border-box; padding: 6px 13px;">0x04</td><td align="left" style="border: 1px solid rgb(223, 226, 229); box-sizing: border-box; padding: 6px 13px;">.info/</td></tr>
<tr style="background-color: #f6f8fa; border-top: 1px solid rgb(198, 203, 209); box-sizing: border-box;"><td align="left" style="border: 1px solid rgb(223, 226, 229); box-sizing: border-box; padding: 6px 13px;">5</td><td align="left" style="border: 1px solid rgb(223, 226, 229); box-sizing: border-box; padding: 6px 13px;">0x05</td><td align="left" style="border: 1px solid rgb(223, 226, 229); box-sizing: border-box; padding: 6px 13px;">.biz/</td></tr>
<tr style="background-color: white; border-top: 1px solid rgb(198, 203, 209); box-sizing: border-box;"><td align="left" style="border: 1px solid rgb(223, 226, 229); box-sizing: border-box; padding: 6px 13px;">6</td><td align="left" style="border: 1px solid rgb(223, 226, 229); box-sizing: border-box; padding: 6px 13px;">0x06</td><td align="left" style="border: 1px solid rgb(223, 226, 229); box-sizing: border-box; padding: 6px 13px;">.gov/</td></tr>
<tr style="background-color: #f6f8fa; border-top: 1px solid rgb(198, 203, 209); box-sizing: border-box;"><td align="left" style="border: 1px solid rgb(223, 226, 229); box-sizing: border-box; padding: 6px 13px;">7</td><td align="left" style="border: 1px solid rgb(223, 226, 229); box-sizing: border-box; padding: 6px 13px;">0x07</td><td align="left" style="border: 1px solid rgb(223, 226, 229); box-sizing: border-box; padding: 6px 13px;">.com</td></tr>
<tr style="background-color: white; border-top: 1px solid rgb(198, 203, 209); box-sizing: border-box;"><td align="left" style="border: 1px solid rgb(223, 226, 229); box-sizing: border-box; padding: 6px 13px;">8</td><td align="left" style="border: 1px solid rgb(223, 226, 229); box-sizing: border-box; padding: 6px 13px;">0x08</td><td align="left" style="border: 1px solid rgb(223, 226, 229); box-sizing: border-box; padding: 6px 13px;">.org</td></tr>
<tr style="background-color: #f6f8fa; border-top: 1px solid rgb(198, 203, 209); box-sizing: border-box;"><td align="left" style="border: 1px solid rgb(223, 226, 229); box-sizing: border-box; padding: 6px 13px;">9</td><td align="left" style="border: 1px solid rgb(223, 226, 229); box-sizing: border-box; padding: 6px 13px;">0x09</td><td align="left" style="border: 1px solid rgb(223, 226, 229); box-sizing: border-box; padding: 6px 13px;">.edu</td></tr>
<tr style="background-color: white; border-top: 1px solid rgb(198, 203, 209); box-sizing: border-box;"><td align="left" style="border: 1px solid rgb(223, 226, 229); box-sizing: border-box; padding: 6px 13px;">10</td><td align="left" style="border: 1px solid rgb(223, 226, 229); box-sizing: border-box; padding: 6px 13px;">0x0a</td><td align="left" style="border: 1px solid rgb(223, 226, 229); box-sizing: border-box; padding: 6px 13px;">.net</td></tr>
<tr style="background-color: #f6f8fa; border-top: 1px solid rgb(198, 203, 209); box-sizing: border-box;"><td align="left" style="border: 1px solid rgb(223, 226, 229); box-sizing: border-box; padding: 6px 13px;">11</td><td align="left" style="border: 1px solid rgb(223, 226, 229); box-sizing: border-box; padding: 6px 13px;">0x0b</td><td align="left" style="border: 1px solid rgb(223, 226, 229); box-sizing: border-box; padding: 6px 13px;">.info</td></tr>
<tr style="background-color: white; border-top: 1px solid rgb(198, 203, 209); box-sizing: border-box;"><td align="left" style="border: 1px solid rgb(223, 226, 229); box-sizing: border-box; padding: 6px 13px;">12</td><td align="left" style="border: 1px solid rgb(223, 226, 229); box-sizing: border-box; padding: 6px 13px;">0x0c</td><td align="left" style="border: 1px solid rgb(223, 226, 229); box-sizing: border-box; padding: 6px 13px;">.biz</td></tr>
<tr style="background-color: #f6f8fa; border-top: 1px solid rgb(198, 203, 209); box-sizing: border-box;"><td align="left" style="border: 1px solid rgb(223, 226, 229); box-sizing: border-box; padding: 6px 13px;">13</td><td align="left" style="border: 1px solid rgb(223, 226, 229); box-sizing: border-box; padding: 6px 13px;">0x0d</td><td align="left" style="border: 1px solid rgb(223, 226, 229); box-sizing: border-box; padding: 6px 13px;">.gov</td></tr>
<tr style="background-color: white; border-top: 1px solid rgb(198, 203, 209); box-sizing: border-box;"><td align="left" style="border: 1px solid rgb(223, 226, 229); box-sizing: border-box; padding: 6px 13px;">14..32</td><td align="left" style="border: 1px solid rgb(223, 226, 229); box-sizing: border-box; padding: 6px 13px;">0x0e..0x20</td><td align="left" style="border: 1px solid rgb(223, 226, 229); box-sizing: border-box; padding: 6px 13px;">Reserved for Future Use</td></tr>
<tr style="background-color: #f6f8fa; border-top: 1px solid rgb(198, 203, 209); box-sizing: border-box;"><td align="left" style="border: 1px solid rgb(223, 226, 229); box-sizing: border-box; padding: 6px 13px;">127..255</td><td align="left" style="border: 1px solid rgb(223, 226, 229); box-sizing: border-box; padding: 6px 13px;">0x7F..0xFF</td><td align="left" style="border: 1px solid rgb(223, 226, 229); box-sizing: border-box; padding: 6px 13px;">Reserved for Future Use</td></tr>
</tbody></table>
<br />And the remaining strings in url are converted to hex ascii codes. The URL is 17 bytes including the expansion value.<br /><br />Here is the raw data from nRF Connect App:<br /><br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjgRNaJXfCTg9fqBz7fzrdVSJM4A11VlJ7xSNhQHTLk4Q-tv0n36qnflvSfFDMjGoaD2GXoVnhf2Q_1WpibhYxFq2ctWbWe5UieWqC0XVFALs_71gLlb5EZ7f1iY1tW3HTF_RTwxEnpLXQ/s1600/Screenshot_20171228-120854.png" imageanchor="1" style="color: #888888; margin-left: 1em; margin-right: 1em; text-decoration: none;"><img border="0" data-original-height="1280" data-original-width="720" height="320" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjgRNaJXfCTg9fqBz7fzrdVSJM4A11VlJ7xSNhQHTLk4Q-tv0n36qnflvSfFDMjGoaD2GXoVnhf2Q_1WpibhYxFq2ctWbWe5UieWqC0XVFALs_71gLlb5EZ7f1iY1tW3HTF_RTwxEnpLXQ/s320/Screenshot_20171228-120854.png" style="background: rgb(255, 255, 255); border: 1px solid rgb(238, 238, 238); box-shadow: rgba(0, 0, 0, 0.0980392) 1px 1px 5px; padding: 5px; position: relative;" width="180" /></a></div>
<br /><br />
<div class="separator" style="clear: both; text-align: center;">
</div>
And here is the actual raw data:<br /><br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEg5HRG3Vk_xgIlCV1mOIZGe2Zlirvu6167sICmLoo_TW5J1hVkSz28M8qgBT61x8RPY2A5lQIJJj9a4Ha9YPpGItBpbuzAMg8VixdEtIFCTIhuTB0pxA1fFZL_N5Dfv7wsaCm3KT761i54/s1600/rawdata.png" imageanchor="1" style="color: #888888; margin-left: 1em; margin-right: 1em; text-decoration: none;"><img border="0" data-original-height="312" data-original-width="718" height="139" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEg5HRG3Vk_xgIlCV1mOIZGe2Zlirvu6167sICmLoo_TW5J1hVkSz28M8qgBT61x8RPY2A5lQIJJj9a4Ha9YPpGItBpbuzAMg8VixdEtIFCTIhuTB0pxA1fFZL_N5Dfv7wsaCm3KT761i54/s320/rawdata.png" style="background: rgb(255, 255, 255); border: 1px solid rgb(238, 238, 238); box-shadow: rgba(0, 0, 0, 0.0980392) 1px 1px 5px; padding: 5px; position: relative;" width="320" /></a></div>
<br /><br />To Interpret the data<br />
<table style="border-collapse: collapse; border-spacing: 0px; box-sizing: border-box; color: #24292e; display: block; font-size: 16px; margin-bottom: 16px; margin-top: 0px; overflow: auto; width: 888px;"><thead style="box-sizing: border-box;">
<tr style="background-color: white; border-top: 1px solid rgb(198, 203, 209); box-sizing: border-box;"><th style="border: 1px solid rgb(223, 226, 229); box-sizing: border-box; padding: 6px 13px;">Byte offset</th><th style="border: 1px solid rgb(223, 226, 229); box-sizing: border-box; padding: 6px 13px;">Field</th><th style="border: 1px solid rgb(223, 226, 229); box-sizing: border-box; padding: 6px 13px;">Value</th></tr>
</thead><tbody style="box-sizing: border-box;">
<tr style="background-color: white; border-top: 1px solid rgb(198, 203, 209); box-sizing: border-box;"><td style="border: 1px solid rgb(223, 226, 229); box-sizing: border-box; padding: 6px 13px;">0</td><td style="border: 1px solid rgb(223, 226, 229); box-sizing: border-box; padding: 6px 13px;">Frame Type</td><td style="border: 1px solid rgb(223, 226, 229); box-sizing: border-box; padding: 6px 13px;"><span style="background-color: #f6f8fa;">0x10 </span></td></tr>
<tr style="background-color: #f6f8fa; border-top: 1px solid rgb(198, 203, 209); box-sizing: border-box;"><td style="border: 1px solid rgb(223, 226, 229); box-sizing: border-box; padding: 6px 13px;">1</td><td style="border: 1px solid rgb(223, 226, 229); box-sizing: border-box; padding: 6px 13px;">TX Power</td><td style="border: 1px solid rgb(223, 226, 229); box-sizing: border-box; padding: 6px 13px;">0x04 </td></tr>
<tr style="background-color: white; border-top: 1px solid rgb(198, 203, 209); box-sizing: border-box;"><td style="border: 1px solid rgb(223, 226, 229); box-sizing: border-box; padding: 6px 13px;">2</td><td style="border: 1px solid rgb(223, 226, 229); box-sizing: border-box; padding: 6px 13px;">URL Scheme</td><td style="border: 1px solid rgb(223, 226, 229); box-sizing: border-box; padding: 6px 13px;">0x00 = "<span style="color: blue;">http://www.</span>"</td></tr>
<tr style="background-color: #f6f8fa; border-top: 1px solid rgb(198, 203, 209); box-sizing: border-box;"><td style="border: 1px solid rgb(223, 226, 229); box-sizing: border-box; padding: 6px 13px;">3+</td><td style="border: 1px solid rgb(223, 226, 229); box-sizing: border-box; padding: 6px 13px;">Encoded URL</td><td style="border: 1px solid rgb(223, 226, 229); box-sizing: border-box; padding: 6px 13px;"><span style="font-size: x-small;">0x06D696E65777465636807</span><br />The last 2 digits "07" is the URL extension for "<span style="color: blue;">.com</span>"</td></tr>
</tbody></table>
<span style="background-color: #f6f8fa;"><span style="color: #24292e;">0x06D696E657774656368 when converted to string is "</span><span style="color: blue;">minewtech</span><span style="color: #24292e;">". I used the foloowing website for the conversion:</span></span><br /><span style="background-color: #f6f8fa;"><span style="color: #24292e;"><br /></span></span><span style="background-color: #f6f8fa;"><span style="color: #24292e;"><a href="http://www.unit-conversion.info/texttools/hexadecimal/#data" style="color: #888888; text-decoration: none;">http://www.unit-conversion.info/texttools/hexadecimal/#data</a></span></span><br />
<div>
<span style="color: #24292e;"><br /></span></div>
<div>
<span style="background-color: white; color: #24292e; font-family: Arial, Tahoma, Helvetica, FreeSans, sans-serif;">Combining the decoded data that we will get "http://www.minewtech.com"</span></div>
<div>
<span style="background-color: white; color: #24292e; font-family: Arial, Tahoma, Helvetica, FreeSans, sans-serif;"><br /></span></div>
John Cruzehttp://www.blogger.com/profile/07838474765128004393noreply@blogger.com1tag:blogger.com,1999:blog-5638435311610920074.post-14716120349260159222017-12-24T04:49:00.001-08:002017-12-26T19:21:29.661-08:00Google Nearby Troubleshooting Guide and the Minew EddystonesThis serves as a continuation of my post<a href="https://gadgetzoneblog.blogspot.com/2017/12/google-nearby-101.html" target="_blank"> Google Nearby 101</a>. As I have mentioned in my previous post, there are a bunch of cons that a developer should be aware of using Google Nearby. In summary, here are the cons:<br />
<br />
<ol>
<li>smartphone has to be connected to the internet</li>
<li>the screen must be opened to receive the notification</li>
<li>bluetooth and location services must also be turned on</li>
<li>notification had no sound</li>
<li>the notification disappears all by itself after 10 to 20 minutes(sometimes less than 2 minutes)</li>
<li>once the notification is deleted, it will not reappear too soon because of google's standard notification backoff policy</li>
</ol>
<br />
One important information that I have not mentioned in my previous post although it is not con but it is very important is that the URL must be "https" other than this, the configuration will not work.<br />
<br />
Knowing the cons can help in speeding up the development of Apps. Another important aspect to take note of is that the Nearby Service is not in the hands of developers and there are occasions when Google shuts down the service which may trick other developers which will make them think that Google NearBy is not stable. Based on my personal experience this is how I was able to determine that when my smartphone is not able to get the notification and the cause is that the Google Nearby Service is not running is as follows:<br />
<br />
<blockquote class="tr_bq">
I used several apps to check if my eddystones are working like the following: </blockquote>
<blockquote class="tr_bq">
<ol>
<li><b> Ibeacon Detector.</b> This app when run in Android 6.0 shows the different frames coming from the eddystones by refreshing the screen each time it receives the new frame. If there is no new frame received, the screen does not refresh so I know when the eddystones is not working.</li>
<li><b> nRf Connect App.</b> This app does the same thing as the Ibeacon Detector app but it identifies the frame type and shows each values it receives with proper labeling like the temperature, uuid, instance id, etc. so this is better the Ibeacon Detector App.</li>
<li><b>BeaconSet+</b>. This app shows all the frames it received and it does not refresh the screen. It will not be able to detect the eddystones if the datat it receives is incomplete.</li>
</ol>
</blockquote>
I use these 3 apps to confirm if the source of error is coming from the Google Nearby Service using the logic: "<i>My eddystones are working but I am not able to receive the notification but I confirm that a few minutes ago, it was working fine.</i>"<br />
<br />
<br />
<b>The Hardware</b><br />
For some other reasons, knowing better the Eddystone being used can also be very important. As a developer, your knowledge of how the eddystones work should be at leas above average or at least know more than the end-user. You should be very familiar how it operates and know when the battery is still fully charged.<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgCUMAo3NDa35O2_Layzl4FflB5DBZChUpse9RV885p1DiouwaXfG2eKMGX7Q_aDW87CJpJyNo2FU7omQg4w5CAo53WiQ1HVrzt74nDMlrlsgP648RCFEXMJ2ZpUv_VF1UR1rUFnQJHWOp_/s1600/minew.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="454" data-original-width="666" height="218" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgCUMAo3NDa35O2_Layzl4FflB5DBZChUpse9RV885p1DiouwaXfG2eKMGX7Q_aDW87CJpJyNo2FU7omQg4w5CAo53WiQ1HVrzt74nDMlrlsgP648RCFEXMJ2ZpUv_VF1UR1rUFnQJHWOp_/s320/minew.png" width="320" /></a></div>
<br />
The eddystones I am using(Minew I6 models) operates this way:<br />
<br />
<ol>
<li>Upon insertion of the battery, it goes to connectible mode for 1 minute. During this mode, it will not transmit the URL and TLM frames. </li>
<li>You can use the nRF Connect to configure the eddystones while in connectible mode.</li>
<li>Google Nearby will not work during this 1 minute period.</li>
<li>I determine if the battery charge is weak when I put 2 beacons in close range which will make them compete to get their signals be received by other devices, and the ones that loose is the one with weak battery charge. Although the measured battery charge level shown in nRF Connect can also be accurate.</li>
</ol>
<div>
For now, all of this information is based on my personal experiences which I am so willing to share.</div>
John Cruzehttp://www.blogger.com/profile/07838474765128004393noreply@blogger.com0tag:blogger.com,1999:blog-5638435311610920074.post-72953156314013810672017-12-20T02:11:00.000-08:002017-12-22T00:18:53.881-08:00Locating a Point Using 3 BeaconsBeacons can be used to track the movement of object on a given space like in our example, is perhaps a Fashion Store with a regular rectangular shape. Assuming the object is a smartphone with a beacon app installed and has stable internet connection to transmit data back to the shop owner's back end app. These data will be the rssi(received signal strength) of each beacons received every 1 second.<br />
<div class="separator" style="clear: both; text-align: center;">
</div>
<div>
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEg1XVBG8JngVOLWqP5LCb_zPPql3H_WUED0p40DuK_WldqRC5hyxYp122subRj-squmTzNFxVR0mW1LkHp1uO_KMYfuluxp-0IAFE5JgSktmwlNeQGnU9dI2lMEPFzs2wNK3uKp1Vqghc5B/s1600/trilateration.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="554" data-original-width="1094" height="201" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEg1XVBG8JngVOLWqP5LCb_zPPql3H_WUED0p40DuK_WldqRC5hyxYp122subRj-squmTzNFxVR0mW1LkHp1uO_KMYfuluxp-0IAFE5JgSktmwlNeQGnU9dI2lMEPFzs2wNK3uKp1Vqghc5B/s400/trilateration.png" width="400" /></a></div>
<div class="separator" style="clear: both; text-align: center;">
</div>
<div class="separator" style="clear: both; text-align: center;">
</div>
<br />
The back end app by default, knows exactly the position of the three beacons.</div>
<div>
<br /></div>
<div>
So with these sets of data available, the location of the smartphone can be traced every second using trilateration algorithm which is a process of finding the location of the point using the geometry of circles, spheres and triangle. More information about trilateration is in <a href="https://en.wikipedia.org/wiki/Trilateration" target="_blank">wikipedia</a>.<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
</div>
Using the rssi transmitted by the smartphone, and since we know the distance of each beacon from each other(d and e), we have a lot of data to use in determining the exact location of the point. We will also assume that all points of interest in the scenario lie on the same plane. The formula for computing distance in meters from rssi is as follows:<br />
<code style="background: rgb(248, 248, 248); color: #333333; font-family: Consolas, Menlo, Monaco, "Lucida Console", "Liberation Mono", "DejaVu Sans Mono", "Bitstream Vera Sans Mono", "Courier New", monospace; font-size: 14px;"><br /></code>
<code style="background: rgb(248, 248, 248); color: #333333; font-family: Consolas, Menlo, Monaco, "Lucida Console", "Liberation Mono", "DejaVu Sans Mono", "Bitstream Vera Sans Mono", "Courier New", monospace; font-size: 14px;">RSSI = -20 * log10(distance in meters) + RssiAtOneMeter</code><br />
<code style="background: rgb(248, 248, 248); color: #333333; font-family: Consolas, Menlo, Monaco, "Lucida Console", "Liberation Mono", "DejaVu Sans Mono", "Bitstream Vera Sans Mono", "Courier New", monospace; font-size: 14px;">distance in meters = pow(10, (RssiAtOneMeter - ReceivedRSSI) / 20)</code><br />
<code style="background: rgb(248, 248, 248); color: #333333; font-family: Consolas, Menlo, Monaco, "Lucida Console", "Liberation Mono", "DejaVu Sans Mono", "Bitstream Vera Sans Mono", "Courier New", monospace; font-size: 14px;"><br /></code>
<code style="background: rgb(248, 248, 248); color: #333333; font-family: Consolas, Menlo, Monaco, "Lucida Console", "Liberation Mono", "DejaVu Sans Mono", "Bitstream Vera Sans Mono", "Courier New", monospace; font-size: 14px;">source: <a href="https://www.rn.inf.tu-dresden.de/dargie/papers/icwcuca.pdf" target="_blank">Evaluation of the Reliability of RSSI for Indoor Localization</a></code><br />
<br />
In the above picture, we can easily determine the value of x and y by Trigonometry's Pythagorian Theorem:<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEj7_Rr8kj-DjdfIXt7AHFvFyChQPFBBBxCmuQ8KJn-zK-St_fmdbwL37hUw1oW-6VCTQO9L2dvlew6_3lpgB0kDuyDySgHgy-00Pk3zYn0AjQ6zzeSU9h424SKiR6ABY-sn3GXHRF4cYIJx/s1600/trigo.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="468" data-original-width="604" height="247" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEj7_Rr8kj-DjdfIXt7AHFvFyChQPFBBBxCmuQ8KJn-zK-St_fmdbwL37hUw1oW-6VCTQO9L2dvlew6_3lpgB0kDuyDySgHgy-00Pk3zYn0AjQ6zzeSU9h424SKiR6ABY-sn3GXHRF4cYIJx/s320/trigo.png" width="320" /></a></div>
<br />
<div class="separator" style="clear: both; text-align: center;">
</div>
<div class="separator" style="clear: both;">
<br /></div>
<div class="separator" style="clear: both;">
Using the eaquation:</div>
<div class="separator" style="clear: both;">
</div>
<div class="separator" style="clear: both; text-align: center;">
</div>
<br />
<div class="separator" style="-webkit-text-stroke-width: 0px; clear: both; color: black; font-family: "Times New Roman"; font-size: medium; font-style: normal; font-variant-caps: normal; font-variant-ligatures: normal; font-weight: 400; letter-spacing: normal; margin: 0px; orphans: 2; text-align: left; text-decoration-color: initial; text-decoration-style: initial; text-indent: 0px; text-transform: none; white-space: normal; widows: 2; word-spacing: 0px;">
<span style="background-color: white; border: 0px; color: #1e2022; display: inline-block; font-family: "museo300" , "verdana" , sans-serif; font-size: 16.38px; height: 0px; line-height: normal; margin: 0px; padding: 0px; position: relative; text-align: center; transition: none; vertical-align: 0px; white-space: nowrap; width: 5.375em;"><span style="border: 0px; clip: rect(1.102em 1005.38em 2.384em -999.997em); left: 0em; line-height: normal; margin: 0px; padding: 0px; position: absolute; top: -2.134em; transition: none; vertical-align: 0px;"><span class="mrow" id="MathJax-Span-2" style="border: 0px; display: inline; line-height: normal; margin: 0px; padding: 0px; position: static; transition: none; vertical-align: 0px;"><span class="texatom" id="MathJax-Span-3" style="border: 0px; display: inline; line-height: normal; margin: 0px; padding: 0px; position: static; transition: none; vertical-align: 0px;"><span class="mrow" id="MathJax-Span-4" style="border: 0px; display: inline; line-height: normal; margin: 0px; padding: 0px; position: static; transition: none; vertical-align: 0px;"><span class="msubsup" id="MathJax-Span-5" style="border: 0px; display: inline; line-height: normal; margin: 0px; padding: 0px; position: static; transition: none; vertical-align: 0px;"><span style="border: 0px; display: inline-block; height: 0px; line-height: normal; margin: 0px; padding: 0px; position: relative; transition: none; vertical-align: 0px; width: 0.98em;"><span style="border: 0px; clip: rect(3.422em 1000.49em 4.216em -999.997em); left: 0em; line-height: normal; margin: 0px; padding: 0px; position: absolute; top: -4.026em; transition: none; vertical-align: 0px;"><span class="mi" id="MathJax-Span-6" style="border: 0px; display: inline; font-family: MathJax_Math-italic; line-height: normal; margin: 0px; padding: 0px; position: static; transition: none; vertical-align: 0px;">x</span><span style="border: 0px; display: inline-block; height: 4.032em; line-height: normal; margin: 0px; padding: 0px; position: static; transition: none; vertical-align: 0px; width: 0px;"></span></span><span style="border: 0px; left: 0.553em; line-height: normal; margin: 0px; padding: 0px; position: absolute; top: -4.454em; transition: none; vertical-align: 0px;"><span class="mn" id="MathJax-Span-7" style="border: 0px; display: inline; font-family: "mathjax_main"; font-size: 11.5807px; line-height: normal; margin: 0px; padding: 0px; position: static; transition: none; vertical-align: 0px;">2</span><span style="border: 0px; display: inline-block; height: 4.032em; line-height: normal; margin: 0px; padding: 0px; position: static; transition: none; vertical-align: 0px; width: 0px;"></span></span></span></span></span></span><span class="mo" id="MathJax-Span-8" style="border: 0px; display: inline; font-family: "mathjax_main"; line-height: normal; margin: 0px; padding: 0px 0px 0px 0.247em; position: static; transition: none; vertical-align: 0px;">+</span><span class="texatom" id="MathJax-Span-9" style="border: 0px; display: inline; line-height: normal; margin: 0px; padding: 0px 0px 0px 0.247em; position: static; transition: none; vertical-align: 0px;"><span class="mrow" id="MathJax-Span-10" style="border: 0px; display: inline; line-height: normal; margin: 0px; padding: 0px; position: static; transition: none; vertical-align: 0px;"><span class="msubsup" id="MathJax-Span-11" style="border: 0px; display: inline; line-height: normal; margin: 0px; padding: 0px; position: static; transition: none; vertical-align: 0px;"><span style="border: 0px; display: inline-block; height: 0px; line-height: normal; margin: 0px; padding: 0px; position: relative; transition: none; vertical-align: 0px; width: 0.858em;"><span style="border: 0px; clip: rect(3.178em 1000.43em 4.216em -999.997em); left: 0em; line-height: normal; margin: 0px; padding: 0px; position: absolute; top: -4.026em; transition: none; vertical-align: 0px;"><span class="mi" id="MathJax-Span-12" style="border: 0px; display: inline; font-family: MathJax_Math-italic; line-height: normal; margin: 0px; padding: 0px; position: static; transition: none; vertical-align: 0px;">y</span><span style="border: 0px; display: inline-block; height: 4.032em; line-height: normal; margin: 0px; padding: 0px; position: static; transition: none; vertical-align: 0px; width: 0px;"></span></span><span style="border: 0px; left: 0.43em; line-height: normal; margin: 0px; padding: 0px; position: absolute; top: -4.454em; transition: none; vertical-align: 0px;"><span class="mn" id="MathJax-Span-13" style="border: 0px; display: inline; font-family: "mathjax_main"; font-size: 11.5807px; line-height: normal; margin: 0px; padding: 0px; position: static; transition: none; vertical-align: 0px;">2</span><span style="border: 0px; display: inline-block; height: 4.032em; line-height: normal; margin: 0px; padding: 0px; position: static; transition: none; vertical-align: 0px; width: 0px;"></span></span></span></span></span></span><span class="mo" id="MathJax-Span-14" style="border: 0px; display: inline; font-family: "mathjax_main"; line-height: normal; margin: 0px; padding: 0px 0px 0px 0.308em; position: static; transition: none; vertical-align: 0px;">=</span><span class="texatom" id="MathJax-Span-15" style="border: 0px; display: inline; line-height: normal; margin: 0px; padding: 0px 0px 0px 0.308em; position: static; transition: none; vertical-align: 0px;"><span class="mrow" id="MathJax-Span-16" style="border: 0px; display: inline; line-height: normal; margin: 0px; padding: 0px; position: static; transition: none; vertical-align: 0px;"><span class="msubsup" id="MathJax-Span-17" style="border: 0px; display: inline; line-height: normal; margin: 0px; padding: 0px; position: static; transition: none; vertical-align: 0px;"><span style="border: 0px; display: inline-block; height: 0px; line-height: normal; margin: 0px; padding: 0px; position: relative; transition: none; vertical-align: 0px; width: 0.858em;"><span style="border: 0px; clip: rect(3.422em 1000.43em 4.216em -999.997em); left: 0em; line-height: normal; margin: 0px; padding: 0px; position: absolute; top: -4.026em; transition: none; vertical-align: 0px;"><span class="mi" id="MathJax-Span-18" style="border: 0px; display: inline; font-family: MathJax_Math-italic; line-height: normal; margin: 0px; padding: 0px; position: static; transition: none; vertical-align: 0px;">b</span><span style="border: 0px; display: inline-block; height: 4.032em; line-height: normal; margin: 0px; padding: 0px; position: static; transition: none; vertical-align: 0px; width: 0px;"></span></span><span style="border: 0px; left: 0.43em; line-height: normal; margin: 0px; padding: 0px; position: absolute; top: -4.454em; transition: none; vertical-align: 0px;"><span class="mn" id="MathJax-Span-19" style="border: 0px; display: inline; font-family: "mathjax_main"; font-size: 11.5807px; line-height: normal; margin: 0px; padding: 0px; position: static; transition: none; vertical-align: 0px;">2</span><span style="border: 0px; display: inline-block; height: 4.032em; line-height: normal; margin: 0px; padding: 0px; position: static; transition: none; vertical-align: 0px; width: 0px;"></span></span></span></span></span></span></span><span style="border: 0px; display: inline-block; height: 2.14em; line-height: normal; margin: 0px; padding: 0px; position: static; transition: none; vertical-align: 0px; width: 0px;"></span></span></span><span style="background-color: white; border-left-style: solid; border-width: 0px; color: #1e2022; display: inline-block; font-family: "museo300" , "verdana" , sans-serif; font-size: 13px; height: 1.388em; line-height: normal; margin: 0px; overflow: hidden; padding: 0px; position: static; text-align: center; transition: none; vertical-align: -0.15em; white-space: nowrap; width: 0px;"></span></div>
<div class="separator" style="clear: both; text-align: left;">
<br /></div>
<div class="separator" style="clear: both; text-align: left;">
<br /></div>
</div>
John Cruzehttp://www.blogger.com/profile/07838474765128004393noreply@blogger.com0tag:blogger.com,1999:blog-5638435311610920074.post-34704810451456378392017-12-17T05:23:00.000-08:002017-12-17T15:17:18.177-08:00Google Nearby 101It has been a huge challenge for business owners how to get people download their apps so that they can send notifications containing rich information about their products, services and promotions. One of the best idea how to get people's attention is to send them notifications even if they have not downloaded the app. This is a good idea aside from hiring somebody to be stationed in front of the store to convince people download the app and giving away flyers. The advantage of the electronic form is that it can be done 24/7 all year round.<br />
<br />
Google introduced sometime in 2016 the Physical Web integrated with Chrome Internet Browser and using Eddystones. But the transmission and detection is intermitent and unreliable so it did not became very popular. About 7 months ago(not so sure) Google introduced the Nearby Messaging Service to replace the Physical Web and I only got to know about this 3 days ago and since then, I had been experimenting with it. Based on my tests, this is more stable and reliable even though the greatest setback is that the smartphone has to be connected to the internet to retrieve information about the beacon and in order to receive the notification, the screen must be opened and bluetooth and location services must also be turned on. But at least the service is consistent and stable. I also noticed that the notification had no sound at least on my cherry mobile flare xl 2 and the samsung s8 which I experimented with at the concept store and the notification disappears all by itself after 10 to 20 minutes. I wonder why google did not made the notification the same as receiving an sms message. The aliexpress app had the same notification characteristics as the sms messaging. Or at least google provided a way to let users configure it that way. And lastly, do take note that once the notification is deleted, it will not reappear too soon because of google's standard notification backoff policy. I figured a way to make the notification reappear quickly by disabling - enabling the bluetooth service.<br />
<br />
All android smartphones with at least KitKat(4.43) version had this Google Nearby. And are ready to receive the Eddystone signal. The photo below is the screenshot of my SKK Android Kitkat showing the notification from google nearby and the physical web software. Both notifications came from the same eddystone beacon. In this device, both google nearby and physical web are not reliable. I just forced both software to detect the beacon signal.<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEijfXNHqHozSA6oXWcep4HatJHad4Lf-DjbIwATOueq-cw53jYAOFWxzYymKU_kAZ5GcBn0EFTfnPw06ZtZEPsj1UX2u7txrKtXxfc16q_5O6Q-GI8nAgKkG09koVgCA7VLUnin7ELj-8Bg/s1600/FB_IMG_1513552051806.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="1280" data-original-width="720" height="320" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEijfXNHqHozSA6oXWcep4HatJHad4Lf-DjbIwATOueq-cw53jYAOFWxzYymKU_kAZ5GcBn0EFTfnPw06ZtZEPsj1UX2u7txrKtXxfc16q_5O6Q-GI8nAgKkG09koVgCA7VLUnin7ELj-8Bg/s320/FB_IMG_1513552051806.jpg" width="180" /></a></div>
<br />
<br />
Here is how I made the google nearby worked:<br />
<br />
1. I created a Google Cloud Platform Project. This should be easy because if you are in the Beacon Dashboard which can be found here<a href="https://developers.google.com/beacons/dashboard/" target="_blank"> link</a>, The first screen will abvice you to create a project.:<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiG2xgZBp5_DQYQwuZAYQqDw1g7cli5eaaqxNnTz7umOqoZpJwVKPnhvg1LejtCv2focW3gGLCo_6UPiu8VBAmn_UV0mdFax95VzpDQBHRzA-KNJ7kckGYwMCT5ZPfnUBGbD9zJd6e3aRkE/s1600/beacon6.JPG" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="456" data-original-width="895" height="163" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiG2xgZBp5_DQYQwuZAYQqDw1g7cli5eaaqxNnTz7umOqoZpJwVKPnhvg1LejtCv2focW3gGLCo_6UPiu8VBAmn_UV0mdFax95VzpDQBHRzA-KNJ7kckGYwMCT5ZPfnUBGbD9zJd6e3aRkE/s320/beacon6.JPG" width="320" /></a></div>
And here is the project I created:<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjaj72FmOXPJMP9zZuFICvJGv5u7kQ9bhTg46HMO-ofVXVdpIDx-RzpmQ4GXsRnn-lMpEgNFgF1slZVgCd3-9DOuIMmCjMsbrMFhpHFq-ujiFwP-cCzDbCc0VQ26H2eG6eDElYoFPxDYNRz/s1600/beacon7.JPG" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="571" data-original-width="974" height="187" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjaj72FmOXPJMP9zZuFICvJGv5u7kQ9bhTg46HMO-ofVXVdpIDx-RzpmQ4GXsRnn-lMpEgNFgF1slZVgCd3-9DOuIMmCjMsbrMFhpHFq-ujiFwP-cCzDbCc0VQ26H2eG6eDElYoFPxDYNRz/s320/beacon7.JPG" width="320" /></a></div>
<br />
2. After you created the project, it will take you back to the first screen and click your project to select it.<br />
<br />
3. Download the Beacon Tools app in Play Store to register the beacon. Open the app and it will ask you to choose your project. Just select your project and the next screen will detect your beacon unregistered. The screen shot below shows the Eddystone URL frame. This frame cant be registered in Google Nearby. Only the UID or EID frames are allowed which I already did. Just make sure that the eddystone is in connectible mode.<br />
<div class="separator" style="clear: both; text-align: center;">
</div>
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiGBidqDL4_H_hDHgMG9XBYxry145BwyZzoiQXJnlm27YhJbL79-tZYY_1Kiaj02nGDU2M6zR9v7f0oDQM4u-phP0sGT7duDWU968q7cFDSW6j6KirpEsjTADSTRsge3Ypljnr90gKbrCSx/s1600/beacon3.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="960" data-original-width="540" height="320" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiGBidqDL4_H_hDHgMG9XBYxry145BwyZzoiQXJnlm27YhJbL79-tZYY_1Kiaj02nGDU2M6zR9v7f0oDQM4u-phP0sGT7duDWU968q7cFDSW6j6KirpEsjTADSTRsge3Ypljnr90gKbrCSx/s320/beacon3.jpg" width="180" /></a></div>
<br />
And here is the registered UID Frame:<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgZ98tJV99tthqOxDuu2JOcFkEPyNrWEQ6ejVjYyeOJidfMcphaSn4P80hY8k_LklAjwNXmu-zECmnwEBK06dIaoGGAs_9AOQdvAfkTpf9wz0GNLDu4If3nC3fubwy_cLkHtNO4ZUlIfiNa/s1600/beacon2.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="960" data-original-width="540" height="320" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgZ98tJV99tthqOxDuu2JOcFkEPyNrWEQ6ejVjYyeOJidfMcphaSn4P80hY8k_LklAjwNXmu-zECmnwEBK06dIaoGGAs_9AOQdvAfkTpf9wz0GNLDu4If3nC3fubwy_cLkHtNO4ZUlIfiNa/s320/beacon2.jpg" width="180" /></a></div>
And here is the registration screen:<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgkrhX9zbbWp6aX4QYBqKdCS5LvMrOTM9gFzZPCGZtHbGU83oUksf45VSBoe2QZTCvy6P094G_-YfDjpDTNI1CcVLDGfE307IgLwl_-m_J0mob41drAOoUFreBMk3Y_P_XFCVeBTZ2d9EoE/s1600/beacon1.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="960" data-original-width="540" height="320" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgkrhX9zbbWp6aX4QYBqKdCS5LvMrOTM9gFzZPCGZtHbGU83oUksf45VSBoe2QZTCvy6P094G_-YfDjpDTNI1CcVLDGfE307IgLwl_-m_J0mob41drAOoUFreBMk3Y_P_XFCVeBTZ2d9EoE/s320/beacon1.jpg" width="180" /></a></div>
<div class="separator" style="clear: both; text-align: center;">
<br /></div>
I only populated the Description field and saved the registration on this android app.<br />
<br />
4. I went back to the Beacon Dashboard and clicked on the project and it has taken me to the screen that lists all active beacons on that project.<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhgmBvkI6EUw96JBGBEoLb9uhNH9SlXEnkk7fI4tWiS4myM8fkCgAo3gWm4OHtuLdb1ak9r8DZRySDayr7Bx1CG2C7c7vEj8T94n2N-HcMU4K7ZN0jAw-Pijl3EoPEeDsUACNGR6QTkPliK/s1600/beacon8.JPG" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="320" data-original-width="1068" height="95" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhgmBvkI6EUw96JBGBEoLb9uhNH9SlXEnkk7fI4tWiS4myM8fkCgAo3gWm4OHtuLdb1ak9r8DZRySDayr7Bx1CG2C7c7vEj8T94n2N-HcMU4K7ZN0jAw-Pijl3EoPEeDsUACNGR6QTkPliK/s320/beacon8.JPG" width="320" /></a></div>
<br />
5. I clicked the active beacon I registered in the Beacon Tools app, and has taken me to a screen that allows me to further configure the beacon:<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgfuKY_grm8VA-6xOm1O7WJy4gImffDNE3_4-IZx20HlNQIb2sdiTohOU1aHgkuofR2lM_w99eeCuyHgBl4HUtiOLyBo7hyphenhyphenWHTp9eG1XtdDnAbWPHiTSU4ykmYguJk04gYpsiDu0fN30htf/s1600/beacon9.JPG" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="540" data-original-width="1218" height="141" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgfuKY_grm8VA-6xOm1O7WJy4gImffDNE3_4-IZx20HlNQIb2sdiTohOU1aHgkuofR2lM_w99eeCuyHgBl4HUtiOLyBo7hyphenhyphenWHTp9eG1XtdDnAbWPHiTSU4ykmYguJk04gYpsiDu0fN30htf/s320/beacon9.JPG" width="320" /></a></div>
<br />
<div class="separator" style="clear: both; text-align: center;">
</div>
In this screen, I populated all the fields and added just one property and went to the second tab(create attachment).<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
</div>
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjrg9p989RLtBgYWlBcoXoh0G6ATtFRkoAL0dn3qgNhEcYM6QTtbK-UwLZzcOChPMpAXKSL8DId5Ap2hlhpo8xfmcuYJhHdBNNaf-_jrQUVLAJkW0QAoLI_82zJyDcL10hxlYGqdr62rn6p/s1600/beacon9.JPG" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="540" data-original-width="1218" height="141" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjrg9p989RLtBgYWlBcoXoh0G6ATtFRkoAL0dn3qgNhEcYM6QTtbK-UwLZzcOChPMpAXKSL8DId5Ap2hlhpo8xfmcuYJhHdBNNaf-_jrQUVLAJkW0QAoLI_82zJyDcL10hxlYGqdr62rn6p/s320/beacon9.JPG" width="320" /></a></div>
<br />
Even though I had no idea what it is for, I just created a dummy data:<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEi9lwuxsHbOhQBs-7xRMb7AIJpFUivr4ve5AFQuOhb9MrWHij_-tJGRI1RzQC-x2S6XI3Yhj_xggmVbVWOEIPEzP9ppngm12xanH8JkPEA98REsGFJbD4nKaqf80h6lY8z_xUdWCtov1MIw/s1600/beacon10.JPG" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="557" data-original-width="1129" height="157" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEi9lwuxsHbOhQBs-7xRMb7AIJpFUivr4ve5AFQuOhb9MrWHij_-tJGRI1RzQC-x2S6XI3Yhj_xggmVbVWOEIPEzP9ppngm12xanH8JkPEA98REsGFJbD4nKaqf80h6lY8z_xUdWCtov1MIw/s320/beacon10.JPG" width="320" /></a></div>
<div class="separator" style="clear: both; text-align: center;">
<br /></div>
<div class="separator" style="clear: both; text-align: left;">
And here is the attachment I created:</div>
<div class="separator" style="clear: both; text-align: left;">
<br /></div>
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjrBWnIGdDAP8VbVHChA7jOdd1yvdYxg4OEGdZI92oj7JclCoDHNWOVMReRxLmiSQnzej2KG80KruBX_HVDcXqvFiw_rFyaHG6yHYS9KcK8_RZek_iSICJcSG_sNxX_pXXSeEkTV6O8Twjl/s1600/beacon11.JPG" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="443" data-original-width="1128" height="125" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjrBWnIGdDAP8VbVHChA7jOdd1yvdYxg4OEGdZI92oj7JclCoDHNWOVMReRxLmiSQnzej2KG80KruBX_HVDcXqvFiw_rFyaHG6yHYS9KcK8_RZek_iSICJcSG_sNxX_pXXSeEkTV6O8Twjl/s320/beacon11.JPG" width="320" /></a></div>
<div class="separator" style="clear: both; text-align: center;">
<br /></div>
And lastly, I created the Nearby Notification:<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiuKwYuXCNINFW07JQ1y_2G_NUebdBFz8bzPEzxbyykq2foKY5ZLzzjbEt5cYw_xrCmh7-yv8SG2oyGRcZZHRZtO_Qb9hnX030i8K_dYSs-uy0UvAXGgapwVoh_DV4f9G1KpNyuSM34VWyD/s1600/beacon12.JPG" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="452" data-original-width="1167" height="123" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiuKwYuXCNINFW07JQ1y_2G_NUebdBFz8bzPEzxbyykq2foKY5ZLzzjbEt5cYw_xrCmh7-yv8SG2oyGRcZZHRZtO_Qb9hnX030i8K_dYSs-uy0UvAXGgapwVoh_DV4f9G1KpNyuSM34VWyD/s320/beacon12.JPG" width="320" /></a></div>
<div class="separator" style="clear: both; text-align: center;">
<br /></div>
<br />
I saved the data I entered. My main objective here is to just send a notification message which when clicked, will open my blog to an internet browser on the smartphone.<br />
<br />
And here is the final result showing the Eddystone URL link:<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjpD3XfRdlUJ43dtpIYt9XZbla0EDOx1c7dFTOOUFW8nl1YYPFRkatPCAdIx_DHV9BpJyru9a8LMME1-WIKU5OrIl1lbS5IOYMv38FvKxSSsjSdc2uUgRDLAMoZSgAWc6FvL1IhddDS8NxG/s1600/beacon5.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="960" data-original-width="540" height="320" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjpD3XfRdlUJ43dtpIYt9XZbla0EDOx1c7dFTOOUFW8nl1YYPFRkatPCAdIx_DHV9BpJyru9a8LMME1-WIKU5OrIl1lbS5IOYMv38FvKxSSsjSdc2uUgRDLAMoZSgAWc6FvL1IhddDS8NxG/s320/beacon5.jpg" width="180" /></a></div>
<br />
<br />
I have not explained in detail what each fields are for because I am also a beginner trying to make the Google Nearby work and so that I can check if it is stable and yes it was! There are other message types that will allow the user to open the app of the eddystone owner if it was already installed or will open the google play store which displays the app and the user will have to click the download button and install the app.<br />
<br />
To complete my experiment, I went to a nearest Samsung Concept store and brought along my Eddystone to check if other android smartphones can detect the signal without doing any configuration and it was a success, I did not took any picture because I did not bring along my phone so that I can fully test it. Bringing along my phone could influence the result.<br />
<br />
Conclusion:<br />
I still see a lot cons than pros but the best part of it is that the service is very stable and reliable and google has solved the huge problem how to get people' attention to get them download the business owner's app.John Cruzehttp://www.blogger.com/profile/07838474765128004393noreply@blogger.com0tag:blogger.com,1999:blog-5638435311610920074.post-66649390367627862032017-12-16T22:10:00.000-08:002017-12-16T22:10:02.367-08:00Ways Eddystones can help boost sales of BusinessesWith the Philippines' growing economy, big retailers keeps on investing in huge malls all over the country leaving small players struggling to boost sales. This holiday season, employees has received their 13th to 14th month pay plus Christmas bonuses and have a lot of money to spend.<br />
<br />
With this huge potential customers, capturing a small portion can make retailers earn more profits. Beacon technologies is new and most likely very few developers and business owners are aware of its existence. And because of this, if early adapters use the technology to attract more customers is one great advantage because of the following reasons:<br />
<br />
1 Beacon Technology can deliver relevant information to potential customers at the right place and the right time.<br />
2. Traditional Marketing tool have smaller conversion rate than Beacon Marketing Technologies.<br />
3. Beacon Marketing Technology enhance customers shopping experience by introducing new payment methods and helping them get the information they need with incredibly rich content and carefully designed website and video.<br />
4. It can prevent customers frustrations when they cant find the products they need by sending them forms that will enable them to list those products and retailers can inform when the product is already in stock in invite them to come back.<br />
<br />
I end this post with a sample news report featuring the beacon technology:<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<iframe width="320" height="266" class="YOUTUBE-iframe-video" data-thumbnail-src="https://i.ytimg.com/vi/yEZigO41s5M/0.jpg" src="https://www.youtube.com/embed/yEZigO41s5M?feature=player_embedded" frameborder="0" allowfullscreen></iframe></div>
<br />John Cruzehttp://www.blogger.com/profile/07838474765128004393noreply@blogger.com0tag:blogger.com,1999:blog-5638435311610920074.post-37387339467207219402017-12-16T02:59:00.002-08:002017-12-16T03:03:19.431-08:00Digital Passes Issuance App with EddystoneDigital Passes although not widely used in the Philippines can be a great tool to lure more customers or reach more customers that can not be reached by traditional forms of marketing tools. And with the help of eddystones, you can promote your products 24hrs a day or even when you go to a party. I have made a post explaining in detail what digital passes are(<a href="http://gadgetzoneblog.blogspot.com/2015/06/pass2u-pass-issuance-service-integrated.html" target="_blank">Pass2U Pass Issuance Service Integrated with Ibeacons</a>).<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhI-KT3Mcwo0_wNJZfu5UHiI6tMpZmvDrjA5IezYKY1jg_lWLLDP4DGB4k5teKwwGsG87Ziv9j1mE-5Yk8bXFx8K9sDZcqnW9rZXrKvUpFoDVKar4W8bvEG9H1085BvLhI9-HcTRd123smY/s1600/ibeacon.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="480" data-original-width="320" height="320" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhI-KT3Mcwo0_wNJZfu5UHiI6tMpZmvDrjA5IezYKY1jg_lWLLDP4DGB4k5teKwwGsG87Ziv9j1mE-5Yk8bXFx8K9sDZcqnW9rZXrKvUpFoDVKar4W8bvEG9H1085BvLhI9-HcTRd123smY/s320/ibeacon.jpg" width="213" /></a></div>
<br />
<br />
As we all know, eddystone signals can be detected by any smartphone when the Physical Web is enabled in that smartphone. So in this case, we can develop a webpage that can generate a digital pass(like a discount coupon or an event) so that when the owner of that smartphone clicks on the link displayed on the physical web screen, it will automatically download the digital pass.<br />
<br />
This marketing tool can be effective if the eddystone is placed along the highway or you may always carry it along with you so even if you are not saying anything about your business, people will still get know about it.John Cruzehttp://www.blogger.com/profile/07838474765128004393noreply@blogger.com0