Skip to main content
Главная страница » Ice-hockey » Halifax Mooseheads (Canada)

Halifax Mooseheads: Top Performers in QMJHL Hockey!

Overview of the Halifax Mooseheads

The Halifax Mooseheads are a professional ice hockey team based in Halifax, Nova Scotia, Canada. They compete in the Quebec Major Junior Hockey League (QMJHL) and were founded in 1997. The team is known for its passionate fanbase and competitive spirit within the league.

Team History and Achievements

The Mooseheads have a rich history marked by several notable achievements. They won the prestigious Memorial Cup in 2008, solidifying their status as a formidable team in junior hockey. Throughout their existence, they’ve consistently performed well, often finishing at the top of league standings during various seasons.

Current Squad and Key Players

The current squad boasts several key players who have made significant impacts this season. Notable among them is star forward John Doe, known for his scoring prowess and leadership on the ice. Defenseman Jane Smith provides stability with her exceptional defensive skills.

Key Players:

  • John Doe – Forward – Known for scoring ability
  • Jane Smith – Defenseman – Strong defensive skills

Team Playing Style and Tactics

The Mooseheads employ an aggressive playing style focused on quick transitions from defense to offense. Their strategy emphasizes speed and precision, capitalizing on fast breaks to outmaneuver opponents. While their offensive play is a strength, they occasionally face challenges with maintaining defensive consistency.

Strengths:

  • Rapid transitions from defense to offense
  • Precise puck handling

Weaknesses:

  • Inconsistent defensive play at times

Interesting Facts and Unique Traits

The Mooseheads are affectionately nicknamed “The Moosies” by their fans. They have a storied rivalry with the Cape Breton Screaming Eagles, which adds excitement to their matchups. The team also celebrates its tradition of community involvement and youth development programs.

Nicknames:

  • “The Moosies”

Rivalries:

  • Cape Breton Screaming Eagles – A heated rivalry that draws large crowds.

Lists & Rankings of Players, Stats, or Performance Metrics

The following table summarizes key player statistics:

NamePositionGames Played (GP)Goals (G)Ast (A)
John DoeForward30 🎰 20 ✅ 15 💡
Jane SmithDefenseman28 🎰 5 ✅ 10 💡

Comparisons with Other Teams in the League or Division

In comparison to other teams in the QMJHL, the Mooseheads stand out due to their high-scoring offense and strategic gameplay. While teams like the Victoriaville Tigres focus more on physical play, Halifax excels through skillful puck movement and speed.

Case Studies or Notable Matches

A breakthrough game for the Mooseheads was their victory against the Blainville-Boisbriand Armada in late December last year. This match showcased their ability to perform under pressure and execute strategic plays effectively.

Betting Insights: Tips & Recommendations for Analyzing Team Performance 🎯💡📊⚽️🏒🏈🏀⚾️🥊🏆👟⚽️🏐⚽️🎳💸💹💲💵💰💶💷✅❌❗‼️➕➖♻️♿️♂️♀️☝️✋✍️✔️❌❤️😍😘😜😝😛☺️😁😂🤣😃😉😊😇🙂🙃☹️😐😑😶😏😒😬🤔🤨😳🥴🤢🤮🥵🥶😱😨😰 😥 😫 😓 🙁 😦 ☹ 😔 😟 😕 🧐 👀 🤫 🙄 🤓 💭 💭 👉 👈 👉 👈 👉 👈 🔙 🔙 🔙 🔙 🔙 🔙 🔙 🔙 🔙 🔙 ⬅ ➡ ⬆ ⬇ ↗ ↖ ↘ ↙ ➲ ➳ ➴ ➵ ➶ ➷ ➸ ➹ ➺ ➻ ➼ ⤴ ⤵ ⤷ ⤸ ⦿ ◾ ◽ ▪ ▫ ▯ ▰ ▱ ▲ △ ▴ ► ◄ ↩ ⇦ ⇨ ↔ ↕ ⇧ ⇩ ⇪ ⇫ ☜ ☝ ☞ ☟ ☠ ☢ ☣ ☦ ☧ ☩ ✝ ✡ ☸ ✯ ❖ ✰ ❇ ❎ ❧ ✿ ❀ 💮 ★ ☆ ✪ ❦ ❧ ✿ ❀ 💮 ★ ☆ ✪ ❦ ❧ ✿ ❀ 💮 ★ ☆ ✪ ❦ ❧ ◆ ■ ● ○ Δ ∇ ⊛ ⊞ ⊡ ⊠ ⊢ ⊣ ⊤ ⊥ ∞ ≈ ≠ ≡ ≤ ≥ ≪ ≫ 〈 〉 ∈ ∋ ∩ ∪ ∖ ∗ ⁂ ⁋ ⁌ ⁕ ⁞ ⁝ ⁣ ⁢  ℅ ℅ ℁ ℂ ℕ ℍ ℝ ♭ ♮ ♯ ♠ ♣ ♥ ♦ § ¶ • † ‡ • ′ ″ • • • • • • • • •••••••••••••••∘∴∵∴∵∴∵∴∵∴∵ΛΛΛΛΛΛΛΛΛΛΛΛΛΛ▄▄▄▄▄▄▄▄▄▄▄◊◊◊◊◊◊◊◊◊◊●●●●●●●●●●●★☆★☆★☆★☆★☆★☆■■■■■■■■■■‼‼‼‼‼‼‼‼⁉⁉⁉⁉⁉⁉⁉⁉﹃﹄﹃﹄﹃﹄﹃﹄——–――――――――――—–—–»»»»»»»»»»«««««« « « « « « « « « «««««««「「「「「「「 「 「 「 「 「 「 「 「 「」」」」」」」 » » » » » » » » »

Frequently Asked Questions about Betting on Halifax Mooseheads:

What are some key factors to consider when betting on Halifax Mooseheads?

Betting on Halifax involves analyzing player performance metrics such as goals scored per game and overall team form over recent matches. It’s also crucial to consider head-to-head records against upcoming opponents.

How does Halifax compare defensively against other teams?

The Mooseheads have shown variability in their defensive consistency but generally maintain strong goaltending performances that can be pivotal in close matches.

Predictions: Who are likely standout players this season?

This season’s standout players include John Doe due to his offensive capabilities and Jane Smith for her defensive reliability.

Tips & Recommendations for Analyzing Team Performance 🎯💡⚽️⚾️⚾️⚽️⚽️⚽️⚽️❗❌✅➕➖♻︎♿︎♂︎♀︎☝︎✋✍︎✔︎❌❤︎☺︎✨☀︎☁︎☔︎❄︎❅❆❇︎✈︎✉︎✍︎✔︎❌❤︎☺︎✨☀︎☁︎☔︎❄︎❅ #include “common.h” #include “utils.h” #include “thread.h” #include “threadpool.h” #include “queue.h” #include “rbtree.h” #include “list.h” #include “atomic.h” #include “spinlock.h” // thread pool static struct queue *task_queue; static struct spinlock task_queue_lock; struct threadpool { struct list *threads; int max_threads; }; static void *threadpool_thread(void *arg); int threadpool_init(struct threadpool **tpp, const int max_threads, const int queue_size) { int rc = pthread_mutex_init(&task_queue_lock.mutex, NULL); if (rc != 0) { return rc; } task_queue = queue_create(queue_size); if (!task_queue) { return E_NO_MEM; } struct threadpool *tp = malloc(sizeof(*tp)); if (!tp) { return E_NO_MEM; } tp->threads = list_create(); if (!tp->threads) { free(tp); return E_NO_MEM; } tp->max_threads = max_threads; pthread_t tid; #if defined(_WIN32) #define MAX_THREADS_PER_PROCESSOR (4) #else #define MAX_THREADS_PER_PROCESSOR (8) #endif #define MAX_THREADS_PER_CORE ((MAX_THREADS_PER_PROCESSOR + __NPROC_ONLN – 1) / __NPROC_ONLN) #if defined(_WIN32) #define MAX_THREADS_PER_PROCESSOR_MAX ((MAX_THREADS_PER_PROCESSOR + __NPROC_ONLN – 1) / __NPROC_ONLN) #else #define MAX_THREADS_PER_PROCESSOR_MAX ((MAX_THREADS_PER_CORE + __NPROC_ONLN – 1) / __NPROC_ONLN) #endif #define MAX_THREADS (((MAX_THREADS_PER_PROCESSOR_MAX + tp->max_threads – 1) / tp->max_threads)) #if defined(_WIN32) #undef MAX_THREADS_PER_PROCESSOR #undef MAX_THREADS_PER_CORE #undef MAX_THREADS_PER_PROCESSOR_MAX #undef MAX_THREADS #endif #define THREADPOOL_THREAD_STACK_SIZE (64*1024) #if defined(_WIN32) #define THREADPOOL_THREAD_STACK_SIZE_DEFAULT ((THREADPOOL_THREAD_STACK_SIZE+4095)/4096*4096) #else #define THREADPOOL_THREAD_STACK_SIZE_DEFAULT THREADPOOL_THREAD_STACK_SIZE #endif #ifdef _MSC_VER #pragma comment(lib,”Ws2_32.lib”) #ifndef WIN32_LEAN_AND_MEAN #define WIN32_LEAN_AND_MEAN // Exclude rarely-used stuff from Windows headers. #endif #include DWORD WINAPI threadpool_thread_main(LPVOID arg); DWORD WINAPI threadpool_thread_main(LPVOID arg) { struct thread *t = arg; //printf(“thread %d startedn”, t->id); while(1){ void (*fn)(void *); void *arg; if(thread_get_task(t,&fn,&arg)){ fn(arg); thread_complete_task(t); } else{ break; } } printf(“thread %d finishedn”, t->id); return EXIT_SUCCESS; } static void *threadpool_thread(void *arg){ struct thread *t = arg; thread_set_start_fn(t,(void *(*)(void *))threadpool_thread_main); pthread_attr_t attr; pthread_attr_init(&attr); pthread_attr_setstacksize(&attr, THREADPOOL_THREAD_STACK_SIZE_DEFAULT); t->tid = pthread_create(NULL,&attr,t,(void *)t); return NULL; } #else static void * threadpool_thread(void *arg){ struct thread *t = arg; while(1){ void (*fn)(void *); void *arg; if(thread_get_task(t,&fn,&arg)){ fn(arg); thread_complete_task(t); } else{ break; } } return NULL; } #endif for(int i=0;iid = i+1; rc = list_push(tp->threads,new_thrp); if(rc != OK){ free(new_thr); free(new_thrp); return rc; } #ifdef _MSC_VER new_thr->tid = GetCurrentThreadId(); #else pthread_t tid; pthread_attr_t attr; pthread_attr_init(&attr); pthread_attr_setstacksize(&attr, THREADPOOL_THREAD_STACK_SIZE_DEFAULT); rc = pthread_create(&tid,&attr, (void *(*)(void *))threadpool_thread,new_thr); if(rc != OK){ printf(“pthread_create failedn”); exit(-1); } new_thr->tid = tid; #endif rc |= atomic_inc(&(new_thr->active)); if(rc != OK){ printf(“atomic_inc failedn”); exit(-1); } rc |= atomic_inc(&(new_thr->tasks_in_progress)); if(rc != OK){ printf(“atomic_inc failedn”); exit(-1); } rc |= atomic_dec(&(tp->_idle_count)); if(rc != OK){ printf(“atomic_dec failedn”); exit(-1); } rc |= list_push(tp->_busy_list,&(new_thr->_node)); if(rc != OK){ printf(“list_push failedn”); exit(-1); } } *ttp=tp; return OK; } int threadpool_add_task(struct threadpool **ttp,void (*fn)(void*),void* arg){ if(!task_queue || !fn || !arg)return EINVAL; int rc=pthread_mutex_lock(&(task_queue_lock.mutex)); if(rc!=OK)return rc; rc=queue_enqueue(task_queue,(void*) fn,(void*) arg); pthread_mutex_unlock(&(task_queue_lock.mutex)); if(rc!=OK)return rc; rc=atomic_inc(&((*ttp)->_idle_count)); if(rc!=OK)return rc; struct rbnode **busy_node=NULL; rc=list_first((*ttp)->_busy_list,busy_node); while(busy_node && !rc){ struct rbnode *_n=*busy_node; struct rbnode **next_busy_node=NULL; rc=list_next(_n,next_busy_node); struct thread *_thr=(struct thread *)rbtree_entry(_n,_thr,_node); pthread_t tid=_thr->tid; rc=pthread_kill(tid,PRI_USER); if(rc==ESRCH){ list_remove((*ttp)->_busy_list,busy_node); free(busy_node); busy_node=NULL; continue; } if(rc==EINTR||rc==EINVAL||rc==EPERM||rc==ENOTRECOVERABLE||rc==ESRCH){ list_remove((*ttp)->_busy_list,busy_node); free(busy_node); busy_node=NULL; continue; } free(busy_node); return OK; } return ENOMEM; } int threadpool_destroy(struct threadpool **ttp){ int rc=OK; while(list_size((*ttp)->threads)){ struct rbnode **thr=NULL; rc=list_first((*ttp)->threads,&thr); if(!thr || rc!=OK)return rc; struct rbnode *_n=*thr; struct rbnode **next_thr=NULL; rc=list_next(_n,next_thr); struct thread *_t=(struct thread *)rbtree_entry(_n,_t,_node); pthread_join(_t->tid,NULL); free(thr); free(next_thr); } list_destroy((*ttp)->threads,NULL,NULL); while(queue_size(task_queue)){ queue_dequeue(task_queue,NULL,NULL); } queue_destroy(task_queue,NULL); pthread_mutex_destroy(&task_queue_lock.mutex); free(*ttp); *ttp=NULL; return OK; } shashankkumar/parallel_algorithms// http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2017/p0654r0.html #pragma once namespace std { template class bit_vector { private: T data[N*M]; public: using value_type=T::value_type; using size_type=size_t; constexpr static size_type size()noexcept{return N*M;} constexpr static size_type bit_size()noexcept{return N;} constexpr value_type operator[](size_type n)const noexcept{ return data[n/M].operator[](n%M);} value_type& operator[](size_type n)const noexcept{ return data[n/M].operator[](n%M);} constexpr bool test(size_type n)const noexcept{ return data[n/M].test(n%M);} constexpr void set(size_type n,bool v=true)const noexcept{ data[n/M].set(n%M,v);} constexpr void flip(size_type n)const noexcept{ data[n/M].flip(n%M);} constexpr bool any()const noexcept{ for(size_t i=0;i<N*M;++i){ if(data[i].any())return true;} return false;} constexpr bool none()const noexcept{ for(size_t i=0;i<N*M;++i){ if(data[i].any())return false;} return true;} friend constexpr bool operator==(const bit_vector& lhs,const bit_vector& rhs)const noexcept{ for(size_t i=0;i<N*M;++i){ if(lhs.data[i]!=rhs.data[i])return false;} return true;} friend constexpr bool operator!=(const bit_vector& lhs,const bit_vector& rhs)const noexcept{return !(lhs==rhs);} friend constexpr bit_vector& operator&=(bit_vector& lhs,const bit_vector& rhs)const noexcept{ for(size_t i=0;i<N*M;++i){ lhs.data[i]&=rhs.data[i];} return lhs;} friend constexpr bit_vector& operator|=(bit_vector& lhs,const bit_vector& rhs)const noexcept{ for(size_t i=0;i<N*M;++i){ lhs.data[i]|=rhs.data[i];} return lhs;} friend constexpr bit_vector& operator^=(bit_vector& lhs,const bit_vector& rhs)const noexcept{ for(size_t i=0;i<N*M;++i){ lhs.data[i]^=rhs.data[i];} return lhs;} friend constexpr friend constexpr bit_vector(operator&(const bit_vector& lhs,const bit_vector& rhs))const noexcept{return lhs&rhs;} friend constexpr friend constexpr bit_vector(operator|(const bit_vector& lhs,const bit_vector& rhs))const noexcept{return lhs|rhs;} friend constexpr friend constexpr friend constexpr friend friend friend friend friend friend friend friend friend }; }<|file_sep#pragma once namespace std { template class vector { private: T data[N][M]; public: using value_type=T::value_type; using size_type=size_t; constexpr static size_type size()noexcept{return N*M;} value_type& operator[](size_type n)=delete; value_type const& operator[](size_type n)=delete; constexpr value_type const& get(size_typen)const noexcep{ } }<|file_sep: # https://isocpp.org/files/papers/N4719.pdf ## “ ### `[[nodiscard]]` ### `[[likely]]`/`[[unlikely]]` ### `[[deprecated]]`/`[[deprecated(“reason”)]]` ### `[[fallthrough]]` ## “ ## “ ## “ ## “ ## “ ## “ ## “ ## “ ### `std::chrono::duration_cast` – Add support for integer types. ### `std::chrono::time_point` – Add support for arithmetic operations. ### `std::chrono_literals` – Add support for integer types. ## “ ## Compiler Extensions: ### Range-based For Loop Optimization: cpp auto&& v=[…]; for(auto&& e:v){…} #### Expanded Form: cpp auto it=v.begin(),end=v.end(); for(;it!=end;++it){…} #### Optimized Form: cpp auto it=v.begin(),end=v.end(); decltype(v)::reference e=*it;//or decltype(v)::reference e=&*it;//or auto&& e=*it;//or auto&& e=&*it;// for(;it!=end;++it,e=*it){…}//or for(;it!=end;++it,e=&*it){…}//or while(it!=end){e=*it,…,*++it=e;}//or while(it!=end){e=&*it,…,*++it=e;} #### Explanation: In C++14, cpp auto&& v=[…]; for(auto&& e:v){…} is equivalent to, cpp auto it=v.begin(),end=v.end(); decltype(v)::reference e=*it;//or decltype(v)::reference e=&*it;//or auto&& e=*it;//or auto&& e=&*it;// for(;it!=end;++it,e=*it){//or for(;it!=end;++it,e=&*it){//or while(it!=end){e=*it,…,*++ite;}//or while(it!=end){e=&*ite,…,*++ite;} In C++17, If we replace, cpp decltype(v)::reference e=*v.begin();//with decltype(v)::reference e=v[0];//in both expanded forms. then we can optimize them further. So, cpp auto&& v=[…]; for(auto&& e:v){…} can be optimized into either of these forms. cpp auto it=v.begin(),end=v.end(); decltype(v)::reference e=v[0],**e[it]=*(++v.begin());//This is equivalent to decltype(v)::reference e=v[0],**e[it]=*(v.begin()+1);//which is equivalent to decltype(v)::reference e=v[0],**e[it]=*(v.cbegin()+1);//which is equivalent to decltype(v)::reference e=v[0],**e[it]=*(v.rbegin()+v.size()-1);//which is equivalent to decltype(v)::reference e=v[0],**e[it]=*(–v.rend());// for(;(v.end()!=++(++v.cbegin()))&&(++(++v.cbegin())<=–(–v.rend()));**(++(++v.cbegin())),**(++(++v.cbegin()))++){…(***(–(–v.rend())))*=***(–(–v.rend()));//*–(–(–v.rend()))=}// /*Or*/ auto it=v.begin(),end=v.end(); decltype(v)::reference e*v[0],**e[it]=*(++(*(*((std::vector<decltype(**(std::declval().cbegin()))>::*)(std::declval().data())).cbegin())));//This is equivalent to decltype(v)::reference e*v[0],**e[it]=*(++(*(std::declval<std::vector<decltype(**(std::declval().cbegin()))>::*>(std::declval().data())).cbegin())));//which is equivalent to decltype(v)::reference e*v[0],**e[it]=*(++(*(reinterpret_cast<std::vector<decltype(**(std::declval().cbegin()))>::*>(reinterpret_cast<std::_Vector_base<decltype(**(std::declval().cbegin())), std::__cxx11::_Vector_base_auxiliary::__push_alloc>::*>((reinterpret_cast<std::_Vector_base<(decltype(**(std::__decay_copy_helper<const std::__wrap_iter, typename std::__enable_if<!(sizeof(…) == sizeof(std::__wrap_iter) && sizeof(…)/sizeof(std::__wrap_iter) == sizeof(typename std::__enable_if<!(sizeof(…) == sizeof(std::__wrap_iter) && sizeof(…)/sizeof(std::__wrap_iter) == sizeof(typename std::__enable_if<!(sizeof(…) == sizeof(std::__wrap_iter) && sizeof(…)/sizeof(std::__wrap_iter) == sizeof(typename std::__enable_if<!__is_cpp17_constexpr(__is_trivially_default_constructible_v<typename iterator_traits::difference_type>,typename iterator_traits::difference_typetypedef iterator_traits::iterator_category category;if(__is_cpp17_constexpr(category,!__is_cpp17_constexpr(category,std::_Iter_cat_helper,category),category),category),category),iterator_traits::iterator_category))))*,typename iterator_traits::pointer pointer;if(__is_cpp17_constexpr(pointer,!__is_cpp17_constexpr(pointer,std::_Pointer_helper,pointer),pointer),pointer),pointer)),_Tp*,typename __allocator_traits<std::__allocator_of>::template rebind_alloc>::rebind>::_Rebind_alloc>*>::data())->allocate(std::_Vector_base<(decltype(**(std::__decay_copy_helper<const std::__wrap_iter, typename std::__enable_if<!(sizeof(…) == sizeof(std::__wrap_iter) && sizeof(…)/sizeof(std::__wrap_iter) == sizeof(typename std::__enable_if<!(sizeof(…) == sizeof(std::__wrap_iter) && sizeof(…)/sizeof(std::__wrap_iter) == sizeof(typename std::__enable_if<!(sizeof(…) == sizeof(std::__wrap_iter) && sizeof(…)/sizeof(std::__wrap_iter) == sizeof(typename std::__enable_if<!__is_cpp17_constexpr(__is_trivially_default_constructible_v<typename iterator_traits::difference_typetypedef iterator_traits<_Itsebastianjara/tufts-cs257-final-project-2019-fall-sebastian-jara-martinez-and-michael-lombardi-hodges<|file_sep|RFID Tag Reader:| === RFID Tag Reader using Raspberry Pi Zero W with RFID reader RDM6300 connected via UART. ![alt text](https://github.com/sebastianjara/tufts-cs257-final-project-2019-fall-sebastian-jara-martinez-and-michael-lombardi-hodges/blob/master/Documentation/images/rfid%20reader%20connection.png) To use this script you must first install pySerial by running: pip install pyserial Then you can run this script using python rfid.py . Note that you must specify where your rfid reader connects as well as what port you want your server socket listening on. Example: python rfid.py /dev/ttyAMA0:96000 localhost:8088 When you run this script you should see output similar too: Listening… Connected by ('127.10.xx.xx', xxxx). Received tag: DABADABADABA. Received tag: DABADABADABA. The first line indicates that our server socket has been initialized. The second line indicates that our server socket has received a connection from a client. The third line indicates that our server socket has received an RFID tag from our RFID reader.sebastianjara/tufts-cs257-final-project-2019-fall-sebastian-jara-martinez-and-michael-lombardi-hodges<|file_sepcode{white-space: pre;} # Tufts CS257 Final Project Proposal Sebastian Jara-Martinez Michael Lombardi Hodges December 13,2019 Our project idea involves creating an automated system using Raspberry Pi’s which will allow students attending Tufts University events such as concerts or sporting events be able check-in at different checkpoints throughout these events without having to stop at a manned check-in desk every time they want access into another area of an event space. Our project will involve creating two scripts which will run simultaneously on two different Raspberry Pis connected via WiFi. One script will be responsible for reading RFID tags using an attached RFID reader via UART connection using Python’s pySerial library [https://pyserial.readthedocs.io/en/latest/index.html](). The other script will serve as a web server using Python’s Socket Library [https://docs.python.org/3/library/socket.html]() which will listen for incoming connections from clients who wish to verify whether or not an RFID tag has been read by our RFID reader program. Once we have verified that our scripts are working properly together we plan on integrating these scripts into one so that they can run simultaneously without needing two separate Raspberry Pis. We plan on implementing additional features such as adding user authentication so only authorized users may read tags or adding database functionality so information about each tag can be stored long-term rather than just being printed out when read by our RFID reader program. # References RFID Tag Reader [https://www.instructables.com/id/Raspberry-Pi-RFID-reader-with-RDM630/]() RFID Tag Reader Code [https://gist.github.com/gmbyrne/fc07a68ecfe23f79b19eb34d56c67c96]() Socket Server Code [https://gist.github.com/benhoyt/2271706]() Socket Client Code [https://gist.github.com/benhoyt/2271717]() Project Proposal Template [http://web.mit.edu/courseware/_media/syllabus_files/project_proposal_template.pdf]() Tufts CS257 Syllabus [http://www.cs.tufts.edu/~oz/cs257/f19/syllabus.html]() # Appendix A: Project Proposal Template This appendix contains our project proposal template which includes information regarding background research into related work done before us along with details about how we plan on executing our project idea including proposed schedule dates when certain milestones should be met. Project Title Tufts CS257 Final Project Proposal Project Members Sebastian Jara-Martinez Michael Lombardi Hodges Background Research Our group did some research online regarding similar projects involving RFID readers used with Raspberry Pi’s which led us too finding two main sources which helped us understand how these components interacted together when building a system similar too what we hope too create ourselves. One source was Instructables post titled “Raspberry Pi RFID reader with RDM630” found here: https://www.instructables.com/id/Raspberry-Pi-RFID-reader-with-RDM630/. This post explains how one could build an inexpensive RFID reader using a Raspberry Pi Zero W connected via UART connection too an inexpensive RDM630 chip along with providing code examples written in Python which uses PySerial library found here https://pyserial.readthedocs.io/en/latest/index.html. Another source was Gist GitHub repository titled “rfid_pi” found here https://gist.github.com/gmbyrne/fc07a68ecfe23f79b19eb34d56c67c97/. This repository contains example code written in Python which uses PySerial library found here https://pyserial.readthedocs.io/en/latest/index.html along with instructions explaining how too build own version based off example provided within gist repository itself. Proposal Details Our project involves creating two scripts which will run simultaneously on two different Raspberry Pis connected via WiFi network called “PiNet”. One script will be responsible reading tags using attached RFID reader via UART connection using Python’s pySerial library found here https://pyserial.readthedocs.io/en/latest/index.html . The other script serves as web server using Python’s Socket Library found here https://docs.python.org/3/library/socket.html which listens incoming connections clients wishing verify whether tag has been read by our RFID reader program. Once we’ve verified scripts work properly together plan integrate them into single script runs simultaneously without needing separate Raspberry Pis. We plan implement additional features such user authentication only authorized users may read tags add database functionality store information long-term rather then just being printed out when read by our RFID reader program. Proposed Schedule Date | Milestone | Deliverable(s) | Status — | — | — | — 12/13/2019 | Submit proposal document describing planned work | Project proposal document | Complete 12/20/2019 | Research relevant technologies needed complete project successfully including hardware/software components required build system prototype capable performing desired functions | Document describing relevant technologies researched including hardware/software components required build system prototype capable performing desired functions | Complete 12/27/2019 | Build system prototype capable performing desired functions | System prototype capable performing desired functions | Complete 01/03/2020 | Test system prototype ensuring all components function properly together achieving desired results | Document describing tests conducted verifying all components function properly together achieving desired results | Complete 01/10/2020 | Integrate additional features improving usability/security overall quality final product | Document describing additional features implemented improving usability/security overall quality final product | In Progress 01/17/2020 | Finalize documentation providing clear instructions guide users setup/configure use developed system successfully sebastianjara/tufts-cs257-final-project-2019-fall-sebastian-jara-martinez-and-michael-lombardi-hodges<|file_sep Beginning December 16 I worked primarily alone until December 22 after Michael came back from break because he had gone home over winter break but I was still working remotely at my house near Boston where my laptop was located since I didn’t bring my pi home over break since there wasn’t much point given I wouldn’t have access too wifi there anyway unless I used my phone hotspot but then again even then there wouldn’t really be much point because I’d need both pi’s physically present so I could connect them directly wirelessly anyways so instead decided just leave everything plugged into router back home where both pi’s already setup waiting me coming back school start classes up again come January since then also would hopefully make things easier once got everyone else back school trying figure out exactly what going try accomplish given had little experience programming myself before coming take this class so figured better off focusing learning basics python first before attempting anything more complex like trying implement ideas proposed original proposal document submitted earlier month.sebastianjara/tufts-cs257-final-project-2019-fall-sebastian-jara-martinez-and-michael-lombardi-hodges<|file_sep Tunneling SSH Port Forwarding Using PuTTY On Windows Machine To Access Remote Machine Running TCP Server On Linux Machine ![alt text](https://github.com/sebastianjara/tufts-cs257-final-project-2019-fall-sebastian-jara-martinez-and-michael-lombardi-hodges/blob/master/Images/Putty%20SSH%20Tunneling%20Setup.png) First step requires installing putty ssh client application onto windows machine being used tunnel ssh port forwarding between remote linux machine running tcp server onto windows machine running tcp client locally connected directly putty application itself acting intermediary allowing direct communication between local windows machine remote linux machine bypassing any potential firewall restrictions otherwise blocking direct communication otherwise occur normally otherwise possible directly connecting machines themselves locally network environment possibly present otherwise exists potentially present potentially existent otherwise existing potentially existent potentially existent otherwise existent potentially existent potentially existent otherwise existing potentially existent potentially existing otherwise existing potentially existing possibly existing possibly existent possibly existing possibly existent possibly existing possible existing possible existing possible existing potential existing potential existing potential existence possible existence possible existence possible existence potential existence potential existence potential existence possibility existence possibility existence possibility possibility possibility possibility possibility possibility possibility possibility possibility possibility possibility possibility sebastianjara/tufts-cs257-final-project-2019-fall-sebastian-jara-martinez-and-michael-lombardi-hodges<|file_sep dereferencing null pointer exception encountered during execution attempt connect client-server application causing unexpected termination process resulting failure establish successful communication between client-server components involved application leading inability fulfill intended purpose facilitate seamless interaction exchange information data entities participating interaction engagement collaboration cooperation endeavor collaborative effort mutual benefit shared objective common goal collective aspiration joint venture unified pursuit concerted action harmonious cooperation synergistic collaboration cooperative endeavor collaborative effort cooperative enterprise collective enterprise sebastianjara/tufts-cs257-final-project-2019-fall-sebastian-jara-martinez-and-michael-lombardi-hodges<|file_sep Context Switching Between Multiple Processes Running Concurrently On Single Processor Within Operating System Kernel Space Enabling Efficient Utilization Resources Available Hardware Components Associated With Execution Concurrent Tasks