Want to do away with the headache of figuring out when and what your family's meals are going to be today, tomorrow or for the next several weeks? Need a meal planning tool that goes above and beyond the call of duty and is 'Smart'? Try Kitchen Monki's Meal Planner and Meal Calendar. Simply put, it is THE tool for planning your family's meals by the day, week, or even month. Recipes in your Kitchen Monki recipe queue can be dragged right onto your meal calendar. You can scale the recipe for more or fewer servings. You can even make freeform notes so that your meal plan is complete.
Kitchen Monki's Meal Planner allows you to take control of what your family is eating day in and day out, week in and week out, through simple click, drag, and drop functionality. AND, if you need a hard copy of the meal plan and meal calendar as well as the recipes in the plan, Kitchen Monki's all-inclusive print-outs (with meals properly scaled) will let you stick the plan on the fridge so everyone can see when and what's cooking! We at Kitchen Monki understand that time is of the essence in today's hectic society, so why not try out this cool tool that will let you spend less time making your weekly meal plan, and more time enjoying the meals.


text:
Grieving mother warns of motorbike dangers
Published: 8:06 AM July 28, 2010 Updated: 4:19 PM November 1, 2020
THE mother of Matthew Elliott wants to raise awareness of the dangers of allowing inexperienced riders to ride powerful motorbikes.
Alison Staff said that alerting other young riders to the risks could prevent other families suffering.
"It's such a big jump going from riding a 50cc scooter to a 600cc motorbike, which is what Matthew did," she said. "He had been riding a scooter for a year, but the difference from a motorbike is huge.
"It's so much power for an inexperienced rider to step up like that."
After passing his test on Wednesday, Matthew went out for a ride on Friday to get used to the new bike. His parents believe he was doing the same on Saturday when he was involved in a collision with a car.
Mrs Staff said: "We don't know where he was going on Saturday. We think he was just going for a ride to get used to the bike.
"If we can use this to get the message out about 17-year-olds buying 600cc motorbikes, then we may help other families. We didn't want Matthew to have such a powerful bike.
"I want to make sure this doesn't happen again to anyone else, and that they don't have to go through what we have."
Nich Brown, general secretary of the Motorcycle Action Group, one of the UK's leading bikers' groups, said that intermediate steps were already in place to ensure riders progressed moved on to more powerful bikes gradually.
"At 16 years old people can ride a 50cc scooter, and at 17 they will train on a 125cc motorbike for their test. If they pass, their bikes are then limited to 33 horse power for the first two years," he said.
He added that general inexperience of the road could often be a more telling factor than the power of the vehicle.
"Young road-users, regardless of vehicle, are often a safety concern. The lack of experience on the road can be more significant than the size of the bike."

redpajama_set_name: RedPajamaCommonCrawl


text:
Home » News » Bollywood News » Salman Khan breaks no-night shift rule for Sultan
Salman Khan breaks no-night shift rule for Sultan
Subhash K. Jha
Created: Mar 18, 2016 - 9:54 am IST
It's an all-out war-footing shooting for Salman Khan's Sultan to meet the Eid deadline. No effort is being spared to make sure that the film is completed on time. Salman Khan has never been seen to give so much of himself to any project. Not only has gained considerable weight to add bulk to his wrestler's role, he is now breaking his ground-rule of no-nights shooting to ensure the shooting schedule doesn't go off the track.
Says a source close to the project, "Salman is making every kind of adjustment to meet the Eid release. I don't think he has shot beyond day-time schedules for any film in recent times. He's shooting nights for Sultan. This is unheard of for Salman. He is normally unable to focus on his lines during night-time."
The wrestling scenes which are now being shot, and Salman, according to sources from the unit, "is not faking the moves at all."
This we've got to see.
More Pages: Sultan Box Office Collection , Sultan Movie Review
Tags : Salman Khan, Sultan
TRP TUESDAY: Jennifer Winget and Ashish…
Remo D'Souza is already working on another…
BREAKING: Shoot of Salman Khan starrer Radhe…
Pankaj Tripathi opens up about his first…
Prabhu Dheva to direct the next Ek Tha Tiger…
Bigg Boss 13: Himanshi Khurana holds…
VIDEO: Salman Khan nails the Garmi challenge on Bigg…
Bigg Boss 13: Shefali Jariwala is evicted, Salman Khan…
Salman Khan goes cycling as he wishes for 'fit India'…
Bigg Boss voice artist and The Family Man actor Vijay…
Makers of Radhe: Your Most Wanted Bhai ban single-use…
Akshay Kumar hilariously pranks paparazzi, watch video
After same sex marriage comment, Ayushmann Khurrana…
Grammys 2020: After Priyanka Chopra gets trolled for…
Jan 28, 2020 - 8:49 PM hrs IST
Predicting the Rs. 100, 200 and 300 crore films of 2020…
Jan 28, 2020 - 11:00 AM hrs IST
Tanhaji: The Unsung Warrior Box Office Collections:…
Jan 28, 2020 - 12:31 PM hrs IST
Saif Ali Khan confirms being approached for Vikram…
Jan 27, 2020 - 9:27 AM hrs IST
SCOOP: Will the much awaited TRAILER of Akshay…
Kabir Khan reveals that the easiest part of The…
Priyanka Chopra joins the cast of Keanu Reeves starrer…
Day 4 Estimates: Street Dancer and Panga FAIL the…
Karan Johar speaks about Shah Rukh Khan's cameo in Alia…
Varun Dhawan says he might back Bhushan Kumar as a…
Has Aamir Khan shelved his Mahabharat? : Bollywood News…
To avoid clashing with himself at the box office,…
Has Aamir Khan shelved his Mahabharat?
Karan Johar opens up about winning Padma Shri alongside Kangana Ranaut
Karan Johar speaks about Shah Rukh Khan's cameo in Alia Bhatt - Ranbir Kapoor's…
Priyanka Chopra joins the cast of Keanu Reeves starrer Matrix 4


We are Tour Mount Bromo. We are Surabaya's most leading travel agency with offices in Surabaya and Singapore. For the past 25 years, we are dedicated to bringing to life the unique moments that inspire you to leave East Indonesia with your own stories to tell.
From our carefully-crafted trips and to our tribe of passionate Travel Guides and Tour Planner Specialists. We want to offer you a simple way to discover activities, attractions and things to do when you come to Indonesia and a fuss-free way to enjoy your vacation with activities, explorations and experiences to remember! Building a team here at TMB, we believe that we only grow as fast as our number of satisfied customers and their satisfaction (and safety) is of our top most concern.
After all, it's the people and places we've know. Book a tour with us.
We enable you to live The Good Life on over 3,000 trips in Bromo/Ijen since inception.
We strive to make an impact globally, locally, and individually.
From the iconic to the unexpected, TMB connects you with the soul of a destination. You get the real thing without worrying about a thing.
With included transportation, accommodation and guides, we have all the details taken care of so you are free to just "be" – be happy, be in the moment and be inspired.
With 97% guest satisfaction, we are your champions of happy. We believe so much in what we do. We publish unedited reviews online, check on Google and TripAdvisor.
We understand that holidays are times when folks want to rest, relax and unwind. So, we make your holiday experience stress-free by taking care of all your travel needs and ensuring that your experience is an enjoyable one. We do this by offering different packages of varying comfort level so that there will be no shock and surprises when you are on the tour.
See you on our tours!
Tour Mount Bromo Pte. Ltd.


text:
CIC News > Latest News > nigerian
How to Immigrate to Canada from Nigeria Over 42,000 Canadians of Nigerian descent call Canada home, and this number continues to grow.
Nigerians are Canada's fourth largest source country of immigrants. In 2021, over 15,000 Nigerians were granted permanent residency in Canada.
By Julia Hornstein
Immigrate to Canada from Nigeria with these immigration programs Nigerians who want to immigrate to Canada have over 100 economic-class pathways to choose from.
Every year thousands of Nigerians immigrate to Canada, and the numbers have been growing in recent years.
Nigerian immigration to Canada is booming Nigerian immigration to Canada has tripled in recent years, and is poised for further increases post coronavirus.
In 2019, Nigeria became the fourth-leading source country of new immigrants to Canada, behind India, China, and the Philippines.
By Kareem El-Assal


text:
Flight dynamics
Robert F. Stengel
Flight Dynamics takes a new approach to the science and mathematics of aircraft flight, unifying principles of aeronautics with contemporary systems analysis. While presenting traditional material that is critical to understanding aircraft motions, it does so in the context of modern computational tools and multivariable methods. Robert Stengel devotes particular attention to models and techniques that are appropriate for analysis, simulation, evaluation of flying qualities, and control system design. He establishes bridges to classical analysis and results, and explores new territory that was treated only inferentially in earlier books. This book combines a highly accessible style of presentation with contents that will appeal to graduate students and to professionals already familiar with basic flight dynamics. Dynamic analysis has changed dramatically in recent decades, with the introduction of powerful personal computers and scientific programming languages. Analysis programs have become so pervasive that it can be assumed that all students and practicing engineers working on aircraft flight dynamics have access to them. Therefore, this book presents the principles, derivations, and equations of flight dynamics with frequent reference to MATLAB functions and examples. By using common notation and not assuming a strong background in aeronautics, Flight Dynamics will engage a wide variety of readers. Introductions to aerodynamics, propulsion, structures, flying qualities, flight control, and the atmospheric and gravitational environment accompany the development of the aircraft's dynamic equations.
0691114072, 9780691114071
Dive into the research topics of 'Flight dynamics'. Together they form a unique fingerprint.
Flight Dynamics Mathematics 100%
Flight dynamics Engineering & Materials Science 68%
Aircraft Mathematics 58%
Aviation Engineering & Materials Science 22%
Flight Control Mathematics 21%
Control System Design Mathematics 17%
Systems analysis Engineering & Materials Science 17%
Stengel, R. F. (2015). Flight dynamics. Princeton University Press.
Stengel, Robert F. / Flight dynamics. Princeton University Press, 2015. 845 p.
@book{33fe3ae3d39d43c0b4339a2a1e74153e,
title = "Flight dynamics",
abstract = "Flight Dynamics takes a new approach to the science and mathematics of aircraft flight, unifying principles of aeronautics with contemporary systems analysis. While presenting traditional material that is critical to understanding aircraft motions, it does so in the context of modern computational tools and multivariable methods. Robert Stengel devotes particular attention to models and techniques that are appropriate for analysis, simulation, evaluation of flying qualities, and control system design. He establishes bridges to classical analysis and results, and explores new territory that was treated only inferentially in earlier books. This book combines a highly accessible style of presentation with contents that will appeal to graduate students and to professionals already familiar with basic flight dynamics. Dynamic analysis has changed dramatically in recent decades, with the introduction of powerful personal computers and scientific programming languages. Analysis programs have become so pervasive that it can be assumed that all students and practicing engineers working on aircraft flight dynamics have access to them. Therefore, this book presents the principles, derivations, and equations of flight dynamics with frequent reference to MATLAB functions and examples. By using common notation and not assuming a strong background in aeronautics, Flight Dynamics will engage a wide variety of readers. Introductions to aerodynamics, propulsion, structures, flying qualities, flight control, and the atmospheric and gravitational environment accompany the development of the aircraft's dynamic equations.",
author = "Stengel, {Robert F.}",
publisher = "Princeton University Press",
Stengel, RF 2015, Flight dynamics. Princeton University Press.
Flight dynamics. / Stengel, Robert F.
Princeton University Press, 2015. 845 p.
T1 - Flight dynamics
AU - Stengel, Robert F.
N2 - Flight Dynamics takes a new approach to the science and mathematics of aircraft flight, unifying principles of aeronautics with contemporary systems analysis. While presenting traditional material that is critical to understanding aircraft motions, it does so in the context of modern computational tools and multivariable methods. Robert Stengel devotes particular attention to models and techniques that are appropriate for analysis, simulation, evaluation of flying qualities, and control system design. He establishes bridges to classical analysis and results, and explores new territory that was treated only inferentially in earlier books. This book combines a highly accessible style of presentation with contents that will appeal to graduate students and to professionals already familiar with basic flight dynamics. Dynamic analysis has changed dramatically in recent decades, with the introduction of powerful personal computers and scientific programming languages. Analysis programs have become so pervasive that it can be assumed that all students and practicing engineers working on aircraft flight dynamics have access to them. Therefore, this book presents the principles, derivations, and equations of flight dynamics with frequent reference to MATLAB functions and examples. By using common notation and not assuming a strong background in aeronautics, Flight Dynamics will engage a wide variety of readers. Introductions to aerodynamics, propulsion, structures, flying qualities, flight control, and the atmospheric and gravitational environment accompany the development of the aircraft's dynamic equations.
AB - Flight Dynamics takes a new approach to the science and mathematics of aircraft flight, unifying principles of aeronautics with contemporary systems analysis. While presenting traditional material that is critical to understanding aircraft motions, it does so in the context of modern computational tools and multivariable methods. Robert Stengel devotes particular attention to models and techniques that are appropriate for analysis, simulation, evaluation of flying qualities, and control system design. He establishes bridges to classical analysis and results, and explores new territory that was treated only inferentially in earlier books. This book combines a highly accessible style of presentation with contents that will appeal to graduate students and to professionals already familiar with basic flight dynamics. Dynamic analysis has changed dramatically in recent decades, with the introduction of powerful personal computers and scientific programming languages. Analysis programs have become so pervasive that it can be assumed that all students and practicing engineers working on aircraft flight dynamics have access to them. Therefore, this book presents the principles, derivations, and equations of flight dynamics with frequent reference to MATLAB functions and examples. By using common notation and not assuming a strong background in aeronautics, Flight Dynamics will engage a wide variety of readers. Introductions to aerodynamics, propulsion, structures, flying qualities, flight control, and the atmospheric and gravitational environment accompany the development of the aircraft's dynamic equations.
BT - Flight dynamics
PB - Princeton University Press
Stengel RF. Flight dynamics. Princeton University Press, 2015. 845 p.


text:
Osoba o nazwisku Weissenberger:
 Markus Weissenberger – austriacki piłkarz
 Theodor Weissenberger – niemiecki pilot

redpajama_set_name: RedPajamaWikipedia


text:
October 20, 2018 sndoss
[Candace Parker Photo, Susan Lesch, Oct. 4, 2017.CC 4.0; Anthony Parker Photo, Bradley University Athletics; photo illustration, Lamoureux]
Original Run Date on WCBU/Peoria Public Radio: April 14 & 15, and October 20 & 21, 2018.
Many pairs of male siblings have played in the NBA.
Steph and Seth Curry bring to mind Tom and Dick Van Arsdale; Jon, Brent, and Drew Barry; Dominique and Gerald Wilkins; and the Grant brothers, Horace and Harvey.
Pau and Marc Gassol are among more than five dozen brothers-in-baskets.
Only four brother and sister pairs have played in the NBA and the Women's Professional Basketball Leagues—a select group.
The Meyers, Ann and Dave; the Parkers, Candace and Anthony; as well as Ime and Mfon Udoka and Rudy and Marta Fernandez.
However, Marta Fernandez played one season with the LA Sparks and Mfon Udoka played in only three Detroit Shock games.
The Meyers and Parkers feature the female side of the equation eclipsing their brothers.
Ann Meyers, the only woman to sign an NBA contract, was the first player drafted by the Women's Professional Basketball League. She was enshrined in the Naismith Memorial Basketball Hall of Fame and inducted as a charter member of the Women's Basketball Hall of Fame.
Ann's brother, Dave, distinguished himself playing for the Milwaukee Bucks.
Dave retired, after only four seasons, to concentrate on family and faith.
Anthony Parker, twice named the EuroLeagues' MVP in six years overseas, played across nine seasons with four NBA teams.
In 2008, Candace Parker was the first player to win the WNBA's Rookie of the Year and Most Valuable Player Awards in the same season. Twice voted league MVP and six times All-WNBA, Candace was also named MVP of an All-Star Game and of a championship Finals series.
Few siblings are able to match sports skills with their professional brothers or sisters. Those that do, remind us that sibling rivalry can sometimes lead to excellence in sports and life achievements.
"NBA Siblings Becoming Widespread." Joel Brigham, Basketball Insiders, Sept. 26, 2014.
"List of Brothers who have Played in NBA." allaboutbasketball.us
Mfon Udoka
WNBA.com
Ime Udoka
Basketball Reference
Ann Meyers
Candace Parker
Photo, Susan Lesch, Oct. 4, 2017.CC 4.0 International.
WNBA Stats
Anthony Parker
Photo, Bradley University Athletics.
Europe Stats
Previous Article← Episode 14: Hometown Heroes
Next ArticleEpisode 16: Lorene Ramsey →


Featuring an entirely new Digital Traffic navigation system based on the DAB radio network, the Garmin Nuvi 3598LMT has been stylishly revamped and comes with a new mount system. The sat nav does come with Real Directions for more natural instructions, fast and accurate digital traffic service and Lifetime map updates, hands-free calls, Live capability and speed camera alerts among others making it a premium sat nav to own.
It comes with a 5.0″ high resolution display with "pinch and zoom" capability to enable you quickly access onscreen information. With dual-orientation capabilities, you can utilize the unit either vertically or horizontally. It comes loaded with detailed maps of Europe featuring 3D landmarks and terrain. It does come with preloaded POIs. Also available are free lifetime updates to help ensure that the routes utilized are reflective of the most up-to-date maps, navigation information and POIs (points of interest). With no additional fees, new maps are available for download up to 4 times per year, for the life of the device.
The Garmin Digital Traffic is not only fast and accurate but it is free! It is capable of providing accurate and continuous updates on the super-fast digital network. This means that you are able to know of any incidents, queues or delays ahead of time and proceed to utilize the simple directions for alternative routes.
The Nuvi 3598LMT enables you keep an eye out for the latest speed cameras. This is made possible thanks to the Cyclops Speed Camera system utilized by Garmin. The sat nav comes preloaded with the full safety camera database with the option of getting regular or one-off updates to enable you have the latest camera locations for a safe and legal drive.
The sat nav comes with voice-activated navigation to enable you drive with both hands on the wheel. Aside from the power of your voice, you can also utilize the touchscreen interface that comes with the device.
With Garmin's unique Real Navigation, you are able to drive to your destination under the guidance of Real Directions that make use of recognizable landmarks, traffic lights or buildings. With this feature, you not only get realistic images of road signs but also a more natural sounding voice.
By way of an integrated microphone and speaker, you can utilize this sat nav for hand-sfree calling. This can be done when you sync the sat nav to a Bluetooth-enabled phone. This is especially useful in keeping your eyes on the road and your hands on the wheels while you drive.
In addition, the Active Lane Guidance feature that comes with the Garmin 3598LMT ensures that you have clear guidance on the road that you can see and hear. Drive with confidence through an exit or junction with the animated models that utilize brightly colored arrows to indicate the proper lane needed for your route in addition to a friendly voice that provides further help. You are able to utilize the photoReal junction view which displays junctions and road changes along your route in a realistic maner, complete with road signs and the surrounding landscape. In the case of complicated junctions, the sat nav can make use of the Bird's Eye junction view to provide a detailed ariel picture of the road network.


text:
Trasnfer files by https.
This program may be diffucult to read due to its difficulties and my coding ability sorry!!

***This program is beta.
if there is an error, please restart pythonista

Todo
Support windows by pyqt
More stable

redpajama_set_name: RedPajamaGithub


text:
Q: Rubymotion, ProMotion ... How to create a list in a view Where are methods like numberOfLines:, text:, etc defined?  Are they part of RubyMotion?
Is there a method for creating a list?  How can I create a list in ruby motion...more specifically ProMotion?

A: Most of those are Objective-C methods. You can see the API reference here:
http://www.rubymotion.com/developer-center/api/index.html
For ProMotion, look at the README, specifically the Table Screens portion:
https://github.com/clearsightstudio/ProMotion/#table-screens
There are also a few screencasts which will help you a lot:
https://github.com/clearsightstudio/ProMotion/#tutorials
If you're having a problem, feel free to file a GitHub issue on ProMotion and someone will help you fairly quickly. We try to be very helpful to newbies, since we're not that far removed from being newbies ourselves. :)

redpajama_set_name: RedPajamaStackExchange


//Okay, SSID IE is ready for appending.
//CreatePacket returns a beacon, we will also send out directd probe responses.
ProbePacket.wlan_header->subtype = 5; //probe response.
f6e713de f680d131000002  test    byte ptr [eax+31D1h],2     ds:0023:ccccfe9d=??
In this case, the crash occurred because a variable on the stack was overwritten that was subsequently used as a pointer. This overwritten pointer was then dereferenced. In this case, the dereference occurred through the eax register. Although the crash occurred as a result of the dereference, it's important to note that the return address for the stack frame was successfully overwritten with a controlled value of 0xcccccccc. If the function had been allowed to return cleanly without trying to dereference corrupted pointers, full control of the instruction pointer would have been obtained.
In order to avoid this crash and gain full control of the instruction pointer, it's necessary to try to calculate the offset of the return address from the start of the buffer that is being transmitted. Figuring out this offset also has the benefit of making it possible to figure out the minimum number of bytes necessary to transmit to trigger the overflow. This is important because it may be useful when it comes to preventing the dereference crash that was seen previously.
From this stack trace, it can be seen that the return address was overwritten with 0x5c5b5a59. Since byte-ordering on x86 is little endian, the offset within the buffer that contains the SSID is 0x59.
With knowledge of the offset at which the return address is overwritten, the next step becomes figuring out where in the buffer to place the arbitrary code that will be executed. Before going down this route, it's important to provide a little bit of background on the format of 802.11 Management packets. Management packets encode all of their information in what the standard calls Information Elements (IEs). IEs have a one byte identifier followed by a one byte length which is subsequently followed by the associated IE data. For those familiar with Type-Length-Value (TLV), IEs are roughly the same thing. Based on this definition, the largest possible IE is 257 bytes (2 bytes of overhead, and 255 bytes of data).
805500b8  82 84 8b 96 24 30 48 6c-0c 12 18 60 44 00 55 80  ....$0Hl...`D.U.
80550188  fd fe e9 84 00 00 00 00-e0 9e 6a 01 ac 01 55 80  ..........j...U.
Based on this dump, it appears that the majority of the SSID was indeed copied across the stack. However, a large portion of the buffer prior to the offset of the return address has been mangled. In this instance, the return address appears to be located at 0x805500e4. While the area prior to this address appears mangled, the area succeeding it has remained intact.
|               |    \_ Can hold at most 163 bytes of arbitrary code.
\_ Start of SSID that is mangled after the overflow occurs.
Transmitting a buffer that is structured as shown above does indeed result in a bluescreen. It is possible to differentiate actual crashes from those generated as the result of an int3 by looking at the bugcheck information. The use of an int3 will result in an unhandled kernel mode exception which is bugcheck code 0x8e. Furthermore, the exception code information associated with this (the first parameter of the exception) will be set to 0x80000003. Exception code 0x80000003 is used to indicate that the unhandled exception was associated with a trap instruction. This is generally a good indication that the arbitrary code you specified has executed. It's also very useful in situations where it is not possible to do remote kernel debugging and one must rely on strictly using crash dump analysis.
The above crash dump information definitely shows that arbitrary code execution has been achieved. This is a big milestone. It pretty much proves that exploitation will be possible. However, it doesn't prove how reliable or portable it will be. For that reason, the next step involves identifying changes to the exploit that will make it more reliable and portable from one machine to the next. Fortunately, the current situation already appears like it might afford a good degree of portability, as the stack addresses don't appear to shift around from one crash to the next.
At this stage, the return address is being overwritten with a hard-coded stack address that points immediately after the return address in the buffer. One of the problems with this is that the amount of space immediately following the return address is limited to 163 bytes due to the maximum size of the SSID IE. This is enough room for small stub of a payload, but probably not large enough for a payload that would provide anything interesting in terms of features. It's also worth noting that overwriting past the return address might overwrite some important elements on the stack that could lead to the system crashing at some later point for hard to explain reasons. When dealing with kernel-mode vulnerabilities, it is advised that one attempt to clobber the least amount of state as possible in order to reduce the amount of collateral damage that might ensue.
Limiting the amount of data that is used in the overflow to only the amount needed to trigger the overwriting of the return address means that the total size for the SSID IE will be limited and not suitable to hold arbitrary code. However, there's no reason why code couldn't be placed in a completely separate IE unrelated to the SSID. This means we could transmit a packet that included both the bogus SSID IE and another arbitrary IE which would be used to contain the arbitrary code. Although this would work, it must be possible to find a reference to the arbitrary IE that contains the arbitrary code. One approach that might be taken to do this would be to search the address space for an intact copy of the 802.11 packet that is transmitted. Before going down that path, it makes sense to try to find instances of the packet in memory using the kernel debugger. A simple search of the address space using the destination MAC address of the packet sent is a good way to find potential matches. In this case, the destination MAC is 00:14:a5:06:8f:e6.
84efdecc  00 14 a5 06 8f e6 00 00-65 00 00 00 16 00 25 0a  ........e.....%.
84223048  00 ff 4a 0d 01 55 80 0d-01 55 80 0d 01 55 80 0d  ..J..U...U...U..
84223058  01 55 80 0d 01 55 80 0d-01 55 80 0d 01 55 80 0d  .U...U...U...U..
84223068  01 55 80 0d 01 55 80 0d-01 55 80 0d 01 55 80 0d  .U...U...U...U..
84223078  01 55 80 0d 01 55 80 0d-01 55 80 0d 01 55 80 0d  .U...U...U...U..
84223088  01 55 80 0d 01 55 80 0d-01 55 80 0d 01 55 80 0d  .U...U...U...U..
84223098  01 55 80 0d 01 55 80 0d-01 55 80 0d 01 55 80 0d  .U...U...U...U..
Inspecting each of these registers individually eventually shows that the edi register is pointing into a copy of the packet.
As chance would have it, edi is pointing to the source MAC in the 802.11 packet that was sent. If it had instead been pointing to the destination MAC or the end of the packet, it would not have been of any use. With edi being pointed to the source MAC, the rest of the cards fall into place. The hard-coded stack address that was previously used to overwrite the return address can be replaced with an address (probably inside ntoskrnl.exe) that contains the equivalent of a jmp edi instruction. When the exploit is triggered and the vulnerable function returns, it will transfer control to the location that contains the jmp edi. The jmp edi, in turn, transfers control to the first byte of the source MAC. By setting the source MAC to some executable code, such as a relative jump instruction, it is possible to finally transfer control into a location of the packet that contains the arbitrary code that should be executed.
806590ca  ff e7 ff 5f eb 05 bb 22-00 00 c0 8b ce e8 74 ff  ..._..."......t.
With the exploit all but finished, the final question that remains unanswered is where the arbitrary code should be placed in the 802.11 packet. There are a few different ways that this could be tackled. The simplest solution to the problem would be to simply append the arbitrary code immediately after the SSID in the packet. However, this would make the packet malformed and might cause the driver to drop it. Alternatively, an arbitrary IE, such as a WPA IE, could be used as a container for the arbitrary code as suggested earlier in this section. For now, the authors decided to take the middle road. By default, a WPA IE will be used as the container for all payloads, regardless of whether or not the payloads fit within the IE. This has the effect of allowing all payloads smaller than 256 bytes to be part of a well-formed packet. Payloads that are larger than 255 bytes will cause the packet to be malformed, but perhaps not enough to cause the driver to drop the packet. An alternate solution to this issue can be found in the NetGear case study.


Timothy Austin v. Ashley Draper et.al.
Austin alleges he was seriously injured on March 28, 2005, while a passenger in Draper's car when she collided with another vehicle at the intersection of State Route 159 and Illinois Route 140 in Ft. Russell Township. Austin is seeking damages in excess of $50,000.


Bassell, M. Lambert S. and H.H. Friedman 2018. "Attitudes and Opinions Regarding Leadership Qualities of Marketing Executives: A Quantitative Analysis." Journal of Global Scholars of Marketing Science.
Lambert, S., Bassell, M. and H.H. Friedman. 2018. "Marketing Leadership in a Knowledge Economy. " Atlantic Marketing Journal.
Lambert, S., Bassell, M., and H.H. Friedman. 2017. "Leadership in a Knowledge Economy: Building an Innovative Marketing and Branding Organization." Atlantic Marketing Association Peer Reviewed Proceedings. September 27.
Clarke, C. and M. Bassell. 2014. "The Financial Debacle Necessitates a Systematic Approach to Achieving Ethical Behavior in the Corporate Workplace." Journal of Business Systems, Governance & Ethics. Vol. 8 Issue 1, p 22 – 33.


I recently put together a C-Beam CNC from Openbuilds. It can mill through wood and metal and have a capacity of one square feet. I also have another machine which can mill 2*2 feet material. But when milling non-ferrous metal pieces they usually do not go beyond one square feet. This is mainly because of the cost of the pieces and the clamping required. Any material that crosses one square feet is usually CNC milled using an automatic CNC machine.
While the bigger machine has more power, I prefer using the smaller C-Beam machine because of its rigidity. Aluminium and Brass are relatively harder than wood so the frame of the CNC has to be strong. This is because when the router bit passes through the metal the vibration that is produced should not be translated into the axis too. If it does, then there will deviation in the milled parts which we do not want. So further down we will now see the three main factors that make CNC milling aluminium and brass a breeze.
All non-ferrous metals while CNC Milling require some kind of coolant. In some rare cases brass can be milled without coolant but that puts too much of load on the end mill. Using different types of end-mill can reduce the stress level on them but we will discuss that later.
So because coolant is normally used it is advised to use only metal clamps. The router rotates at 5000-6000 rpm and at these speeds the force exerted on the work piece is really heavy. The force is exerted from the top down (z direction) and also in the left and right (x,y direction). And thats why clamping it from the top and the sides are required.
The base plate is usually made of metal or polycarbonate. Both offers different strengths in their own way. Good things is both can be subjected to moisture. To clamp the workpiece from the sides, dowel pins are used. These look round in shape and are normally made of steel. Once slotted into the base plate they will never come out. And butting the piece to these dowel pins clamps them.
The router gives the rotational power in CNC Milling. But the actual material is cut using carbide coated End Mills. An end mill is held in router using collet. Most popular are the ER series collect and nut. If your router does not support a ER series collect then its time to upgrade. The collect comes in different sizes to accommodate different diameter of end mills. There is a chart added for your understanding.
The end mills are differentiated broadly into three types. Flat, Round Nose and V-Type. The flat end mill is used to clear away the material. The round nose end mill is using for smooth finishing passes and the V-Type end mill is used for engraving into non-ferrous metals.
Each of these bits comes with various flute counts. Flute is the cutting edge around the end mill which when touch the material at high speed shears of the material. The most common ones are single flute, double flute and 4 flute. For CNC Milling non-ferrous metals its is recommended to use single flute. These are a bit costly but they are the best for this purpose. Single flute is preferred over the others because when shearing of the metal, single flute tends to remove the metal quickly. Where as the others may have issues of clogging if the metal melts at intense heat. Thats where the feed rate comes into play which we will see next.
Aluminium melts at 660.3deg Celcius and brass melts at 900-940deg Celcius. While CNC Milling if the router is set 1000rpm and above then it is easy to reach the above mentioned temperatues. Then while milling instead of metal chips we can see clogging of metal on the end mill. This especially happens with Aluminium. Thus it is required that the feed rate is set very low at 200mm per second.
Feed Rate is the speed at which the router reaches from point A to B. The slower the speed the better the milling. But too much slowness will result in a longer period of milling which is a waste of energy. So it is important to find a balance.
Similarly the plunge depth is also measured in millimeters. This defines how deep the end mill goes into the metal at every pass. A typical wood CNC Milling can cut upto 4mm deep at every pass. But with non-ferrous milling we can remove only about 0.15mm maximum per pass. Any more than that then depending on the thickness of the end mill diameter we may break it.
So with the right information any dummy who is new to CNC milling can start working on aluminium and brass metals. Its in inevitable that you will make mistakes at the beginning, you might even break some bits but its all part of the learning. Every machine is not the same so you will understand your machine better only by trying. But starting with some knowledge about the different terms and what they do is necessary. And I hope that this article was able to give you that. If you have any question please contact me via instagram by clicking here.


text:
Q: Shell Script to extract the tag value Suppose I have one xml file as mentioned below and I want to extract the application name, machine and status tag value using unix commands and present it in comma separated format.
XML file:-
 <?xml version="1.0" encoding="UTF-8"?>
<applications>
<application name="Adapter/Code1">
<service name="Code1.par">
<deploymentStatus>Success</deploymentStatus>
<serviceInstance name="Code1-One">
    <machine>123</machine>
    <status>Running</status>
</serviceInstance>
<serviceInstance name="Code1-Two">
    <machine>456</machine>
    <status>Running</status>
</serviceInstance>
</service>
</application>
<application name="Adapter/Code2">
<service name="Code2.par">
<deploymentStatus>Success</deploymentStatus>
<serviceInstance name="Code2-One">
    <machine>123</machine>
    <status>Running</status>
</serviceInstance>
<serviceInstance name="Code2-Two">
    <machine>456</machine>
    <status>Running</status>
</serviceInstance>
</service>
</application>
</applications>

Output:-
Adapter/Code1,123,Running

Adapter/Code1,456,Running

Adapter/Code2,123,Running

Adapter/Code2,456,Running

Can you please help me in giving unixcommand/shell script for doing this activity.?
Thanks in advance!!!

A: Python 3.x solution (with xml.etree.ElementTree module):
import xml.etree.ElementTree as ET

tree = ET.parse("test.xml")
root = tree.getroot()
for app in root.findall('application'):
    for m,s in zip(app.iter('machine'), app.iter('status')):
        print("%s,%s,%s" % (app.get('name'), m.text, s.text))

The output:
Adapter/Code1,123,Running
Adapter/Code1,456,Running
Adapter/Code2,123,Running
Adapter/Code2,456,Running

https://docs.python.org/3.6/library/xml.etree.elementtree.html?highlight=etree#module-xml.etree.ElementTree

xmlstarlet + awk (used to group child nodes for each application element) solution:
xmlstarlet sel -t -v "//application/@name| .//machine/text()| .//status/text()" -n input.xml
 | awk '/Adapter/{app=$0; r=app; c=0; next}
   { if(++c==2){ c=0; print r","$0; r=app } else { r=r","$0 }}'

The output:
Adapter/Code1,123,Running
Adapter/Code1,456,Running
Adapter/Code2,123,Running
Adapter/Code2,456,Running

*

*"//application/@name| .//machine/text()| .//status/text()" - XPath expression to get the needed nodes

*/Adapter/{app=$0; r=app; c=0; next} - capturing each application name for further concatenation
http://xmlstar.sourceforge.net/doc/UG/xmlstarlet-ug.html

A: Install xidel and use xpath.
In my opinion the best point of view is from serviceInstance:
xidel f.xml -e '//serviceInstance/string-join((../../@name, machine, status),",")'

Adapter/Code1,123,Running
Adapter/Code1,456,Running
Adapter/Code2,123,Running
Adapter/Code2,456,Running

A: Using xmlstarlet to loop over each serviceInstance node:
xmlstarlet sel -t \
    -m '//application/service/serviceInstance' \
    -v '../../@name' -o , \
    -v 'machine' -o , \
    -v 'status' -nl \
    file.xml

This matches the serviceInstance nodes, and for each such node, it extracts the name attribute of its grandparent node, the machine node's value and the status node's value.  These are outputted with commas in-between them (-o ,) and a newline at the end (-nl).
You may also get quoted CSV output from xq (from https://kislyuk.github.io/yq/):
xq -r '
    .applications.application[] | ."@name" as $name |
    .service.serviceInstance[]  | [ $name, .machine, .status ] | @csv' file.xml

A: If you have good reason for not using xml tools, you can use low-level parsing, as long as your application stays trivial as your example:
sed 's/<application name="\([^"]*\)">/\1/
Ta
h
d
:a
/<machine>/!d
G
N
s_.*<machine>\(.*\)</machine>\n\(.*\)\n.*<status>\(.*\)</status>.*_\2,\1,\3_' yourfile.xml


NYS Tax Info- New York State website that includes tax forms and directions.
Federal Tax Info-Federal website that includes tax forms and directions.
Includes over 35 databases and can be accessed either by a title list or by subject, such as Business; Science and Health; Literature; and Students.
Includes information on Historic landmarks in West Nyack; highlights of the Local History Collection; and Local History Internet Resources and Databases.


American Ronda Rousey helped bring female mixed martial arts to a mainstream audience en route to becoming the first UFC women's champion.
She came to be a judo champion, earning back-to-back golds at the Pan American Championships and also a 2008 Olympic bronze medal. Rousey joined the mixed martial arts circuit in 2010, earning popularity as the UFC Bantamweight Champion, prior to experiencing her initial loss in November 2015.


DJ Jimmy Jatt is back with another tune titled "Obalende Gold" featuring Obadice and Vector, They are ready to get you on the dance floor with this obalende anthem for the hustler guys on the street, i know you will like this!
This is a sure banger.. Enjoy!!


text:
"4G changed lives. 5G will change society" – Huawei's Steven Wu
At MWC 2019, we were briefed by President of Consulting & Service Solution Sales Dept., Carrier BG, Huawei and Steven Wu on how the vendor is prepared for the imminent arrival of commercial 5G.
How is Huawei helping to bring about the launch of global 5G?
Huawei's service mission is to bring 5G into reality by offering the most advanced technologies, products and services in 5G. That said, the best product doesn't mean the best network, and the best network doesn't mean the best business. Good professional services will enable the network to perform better, to be better monetised, and to achieve better business results.
To this end, we are setting up our Digital Transformation Practice Centre (DTPC), which helps customers to incubate business ideas and collect best practice of digital transformation.
Huawei is working widely with global industry panels. 4G changed lives, but 5G will change society – industry application will be a very important trend of 5G. We have signed more than 30 commercial contracts and shipped over 40,000 5G sites globally.
What are the main challenges?
Digital transformation is not an easy journey. There are three main stumbling blocks; the first is culture. People are afraid of change, and it takes courage for them to change their minds to accept a new concept – this can be seen in examples as old as the unwillingness to accept steam engines or cars instead of horse-drawn carriages. Changing mindsets is difficult, which is why companies need to adopt a culture of transformation.
Second is strategy – having a clear, firm digital transformation strategy is essential, coupled with strong leadership to guarantee its execution. Thirdly, organisational processes – companies are used to traditional ways of working, but they need to rebuild these via digital transformation.
How long will 4G and 5G coexist?
When 3G was new, ten to fifteen years ago, operators were discussing when to end 2G services. In fact, 2G has survived up to today, because we need a fundamental network to provide basic services like voice and data. 4G will play this role in the era of 5G. In China and some European countries operators are considering shutting down their 2G networks, and following this VoLTE will become the base voice service, with traditional data services offered over 4G.
4G will be the fundamental network for operators to provide voice and data services for the foreseeable future, coexisting with 5G – and this makes co-optimisation very important. Solutions such as decoupling the uplink and downlink help us to improve performance by 10x. We have the top P3 ranking and the highest share of the optimisation market, with over 400 4G networks deployed globally. Our Rayce propagation model, together with our 3D simulation solutions, has already allowed us to increase site selection accuracy by 15%, allowing for the optimisation of customer investment.
Where else do efficiencies need to be improved?
5G site density will be more than that of 4G, so fast deployment is key for customers looking to achieve the first mover advantage. Our unique 360-degree panorama photo-scanning technology enables a digitised view of the site; this advanced knowledge of the site combined with our digital delivery allows for reducing 30% deployment period comparing with traditional approach. The lightweight camera is used by the engineer to scan the site and the data is collected automatically and mirrored automatically across other sites.
Cost of power will also be a heavy load for 5G operators. Based on 64T64R sites (i.e. maximum capacity) using massive MIMO, power consumption for 5G will be higher per site than for 4G. Helping customers save on the cost of this energy is a very important mission for technology providers. Huawei's PowerMate solution can reduce power consumption by around 15% per site by dynamically shutting off the TRX according to the traffic.
Additionally, this consumption is estimated based on maximum capacity. In the initial stages, 5G networks will be deployed in 'hot' coverage areas and certain business cases, such as eMBB and FWA. This depends on business return, but data consumption is likely to increase by 4 or 5 times, so it's a matter of 'complete cost' – the cost per bit will be much cheaper than with 4G. Vendors are conducting a lot of research into managing power consumption, and we're aiming for 'zero bit, zero watt' – if there's no consumption of data, then there is no consumption of power. With AI technology and automation, we are aiming for dynamic shutdown if the tech is not in use.
Is this the key function of AI in 5G networks?
Manual network optimisation at a 5G level is impractical - using AI and machine learning technologies improves efficiency by as much as 10x. The working load for 5G drive tests is huge due to the increased site density, and we've worked minimization of drive test (MDT). Our solution replaces the existing drive test, improving efficiency by as much as 6x. In MIMO networks the complexity is 100x that of a traditional network, but with our AI technologies we can improve capacity gain by 10% without adding additional hardware, demonstrating our optimisation capability.
Which other areas will benefit from digital transformation?
Operation and maintenance is another pain point – operators are currently running 2G, 3G and 4G networks together, and they'll be adding another one soon. These are typically siloed and run with manual processes, which cannot work with 5G arriving. We have developed a new cloud-based platform that can digitise a customer's assets, making assets visible and automating operational process via cloud, big data and AI technologies. This allows us to consolidate four systems into one platform.
We have a very complex solution that combines four antennae into one – 2G/3G low-band, 4G middle-band, and 5G high-band. This reduces the space taken on towers by 4 times, making it easier to find suitable sites. From a service point of view, our LIVESITE solution digitises all site information, allowing operators to survey locations and available space remotely. All public operator information can be consolidated to this platform, helping with site selection to more precisely plan, acquire and deploy.


text:
Pope Francis will not be able to travel to Canada to personally apologize for the suffering endured by First Nations.Catholic News Service
Pope Francis not coming to Canada to apologize for residential schools
By Michael Swan, Canadian Catholic News
Pope Francis won't be coming to Canada to personally apologize for the suffering endured by Indigenous Canadians at residential schools.
A personal apology from the Pope, delivered on Canadian soil, was one of 94 "Calls to Action" that came out of a five-year Truth and Reconciliation Commission review of the legacy of residential schools in 2015.
In a March 27 letter to the Indigenous peoples of Canada, Canadian Conference of Catholic Bishops president Bishop Lionel Gendron delivers the news that Pope Francis is not able to travel to Canada for the sole purpose of delivering the apology.
"As far as Call to Action #58 is concerned, after carefully considering the request and extensive dialogue with the bishops of Canada, he (Pope Francis) felt that he could not personally respond," Gendron, the bishop of Saint-Jean-Longueil in Quebec, writes.
Gendron stresses that reconciliation with Canada's original inhabitants remains "a major pastoral priority," for Canada's bishops and the Church from coast to coast.
"We look forward to a future where systemic injustices are meaningfully addressed, where we all discover new ways of living together through which the First Peoples of this land are honoured and respected," he wrote.
To the surprise of some, the question of a papal visit to Canada was not on the official agenda when Canadian bishops held their annual plenary in Cornwall, Ont., Sept. 25-29.
Outgoing CCCB president Douglas Crosby of Hamilton said the matter had to be considered carefully "because it can be really expensive."
"That's why there is a lot of discussion with government and with other agencies," said Crosby.
At the annual meeting of Canadian prelates, bishops seemed divided on how to respond to Call to Action #58. The 2015 call for a papal apology was subsequently repeated by others.
In a May 29, 2017 meeting at the Vatican, Prime Minister Justin Trudeau asked Pope Francis to come to Canada to issue the apology as requested by the Truth and Reconciliation Commission. The bishops of Saskatchewan issued a similar invitation last December, asking the Pope to make an apology on Canadian soil.
A papal visit, however, requires the support of Canada's bishops.
"The Pope would never come to a country unless the conference (CCCB) was in favour or supported it, or wanted him to come," Crosby said last September, adding he doubted the Pope would come "just for an apology."
Gendron stresses that a future apology on Canadian soil remains a possibility, but the Pope is not at this time able to make the trip.
"A future Papal visit to Canada may be considered," Gendron wrote. "Taking into account all circumstances, and including an encounter with the Indigenous Peoples as a top priority."
When Gendron became president of the CCCB in October he said the bishops were in a process of discernment regarding a papal visit.
"If the Pope wants to come, we will welcome him," Gendron said. "Our way of interpreting him, Pope Francis would accept (and) if at some point we see that it is important, we might as well say, 'Holy Father, if you wish to come…"
In his March 27 letter, Gendron emphasizes local and personal efforts to forge a new relationship between the Church and Indigenous Canadians.
"We have heard your invitation to engage honestly and courageously with the past, to acknowledge the failings of members of the Catholic Church, and to take active steps of solidarity with Indigenous Peoples towards a better future," he wrote. "…We wish to dedicate ourselves with you to reconciliation at the local level through concrete pastoral initiatives."
Gendron also reminded readers of the Pope's statements regarding the importance of Indigenous populations worldwide.
"He has pointed to Indigenous Peoples as critical dialogue partners to whom the Church needs to listen," Gendron wrote.
Truth and Reconciliation Commission
Devotion to Indigenous St. Kateri helps bridge cultural divides
Pope Francis names women as full members of congregation for religious
Rugumba
St. Thomas More Lawyers' Guild
Bishop Fred Henry
Newman Theological


text:
Jimmy Giuffre 'Jimmy Giuffre 3 & 4 New York Concerts' 2CD (Elemental) 4/5
2nd August 2014 ukvibe
Texan Multi-reedist Jimmy Giuffre is that most rare of jazz musicians, with a foot in both the cool and avant-garde camps. He first made his reputation as a clarinettist in the Woody Herman orchestra where his 'Four Brothers' composition became a hit early on his career. However, by the mid-1950s he had left behind larger swing ensembles for small group modern jazz, sometimes referred to as chamber jazz. For Atlantic records Giuffre constantly experimented with unusual trio line-ups including guitar, reeds and trombone and most famously bass, guitar and reeds. Out of the latter came his most endearing piece, 'The Moon and the River', which became a hit in the mid-1950s and a live performance was seen on the seminal film, 'Jazz on a Summer's Day' from 1958. By the early 1960s, however, Giuffre had left behind the cool school of the West coast for freer forms and his 1962 trio recording for Columbia, 'Free for all' was way ahead of its time and caught both his label and the jazz public in general off guard. It was a sensational line-up of musicians including pianist Paul Bley and bassist Steve Swallow (the trio would also record 'Thesis' and 'Fusion' for Verve, both widely available on a superb ECM 2 CD re-issue), yet such was the conservative nature of the buying public at the time that the trio found it impossible to support themselves long-term and eventually were forced to split (though thankfully re-united once again in the 1990s and this time were extremely well received on a European tour and new York concerts). Even worse, Giuffre lost his major label deal when Columbia became disenchanted with his new style and between 1962 and 1971 Jimmy Giuffre did not record for any label.
This is where the newly unearthed set of recordings come in. Despite the lack of interest from record companies, Giuffre still managed to tour and thanks to a sound engineer and young jazz DJ George Klabin, was able to secure a recording date, one a free Sunday afternoon in the empty and intimate setting of New York's Judson Hall, and the other a live date in front of an audience at the much larger Wollman Hall with a multi-purpose stage. Ironically Klabin had then only recently been appointed head of jazz at the Columbia radio station, the very label that had let Giuffre go in the first place! The two separate set of recordings both date from 1965 and yet vary significantly in terms of line-up and instrumentation. The second is the more conventional of the two with Don Friedman on piano. Bassist Richard Davis and regular Blue Note drummer Joe Chambers provide the thrilling rhythm section on the first date and there is an idiosyncratic take on Ornette Colemans' 'Crossroads' (the only non-original and Giuffre was an admirer of his fellow Texan tenorist) while on the blues-inflected 'Cry, Want' Giuffre's plaintive clarinet offers a wonderful contrast to the rest of the group. Barre Philips takes over bass duties on the second date with Friedman providing atonal support on piano. There is some overlap between the pieces performed with three titles, but even then it is fascinating to compare and contrast versions with the varying formations and Giuffre's use of folk melodies means that the music never really sounds dated and has a true timeless quality to it. A highly informative booklet rounds matters off with an excellent insight from former French Jazz Magazine journalist Philippe Carles, personal recollections by musicians Jim Hall and Steve Swallow. In short, Jimmy Giuffre is an innovative musician demanding of your attention and these excellent quality live recordings demonstrate precisely why.
Previous PostDave Van Ronk 'Down in Washington Square. The Smithsonian Folkways Collection' 3CD (Smithsonian Folkways) 5/5Next PostRobert Mitchell Presents Invocation
Yes! Trio 'Groove du Jour' LP/CD (jazz&people) 4/5 13th November 2019
MIGHTY SUGARCANE 'Atomic' LP/CD (Self-released) 5/5 12th November 2019


text:
<?php namespace Codersmedia\TrendooSms;

use Config;
use Exception;

class Trendoo {
    /**
     * @var string $debug
     */
    protected static $debug;

    /**
     * @var string $username
     */
    protected static $username;

    /**
     * @var string $password
     */
    protected static $password;

    /**
     * @var string $type
     */
    protected static $message_type;

    /**
     * @var mixed $sender
     */
    protected static $sender;

    /**
     * @var DateTime $data
     */
    protected static $data;

    /**
     * @var mixed $base_url
     */
    protected static $base_url;

    /*****************************************************
     * DO NOT EDIT THE BELOW PARAM.
     * @link: http://www.trendoo.it/pdf/API_http.pdf
     *
     * SETTINGS
     *****************************************************/

    protected static $dateFormat                = 'yyyyMMddHHmmss';
    protected static $method                    = 'GET';
    protected static $responseColumnDivider     = '|';
    protected static $responseNewLineDivider    = ';';
    protected static $responseError             = 'KO';
    protected static $responseValid             = 'OK';
    protected static $iso                       = 'IT';    //ISO 3166
    protected static $charset                   = 'UTF-8';
    protected static $singleSmsChars            = 160;
    protected static $maxSmsChars               = 1000;
    protected static $specialChars              = ['^', '{', '}', '\\', '[', '~', ']', '|', '€'];
    protected static $send_endpoint             = 'Trend/SENDSMS';
    protected static $status_endpoint           = 'Trend/SMSSTATUS';
    protected static $remove_delayed_endpoint   = 'Trend/REMOVE_DELAYED';
    protected static $history_endpoint          = 'Trend/SMSHISTORY';
    protected static $credits_endpoint          = 'Trend/CREDITS';
    protected static $sms_new_endpoint          = 'OESRs/SRNEWMESSAGE';
    protected static $sms_history_endpoint      = 'OESRs/SRHISTORY';
    protected static $sms_historyid_endpoint    = 'OESRs/SRHISTORYBYID';

    /*******************
     * Response Status
     ******************/

    protected static $SCHEDULED     = 'Positicipato, non ancora inviato';
    protected static $SENT          = 'Inviato, non attende delivery';
    protected static $DLVRD         = 'Sms correttamente ricevuto';
    protected static $ERROR         = 'Errore nella consegna SMS';
    protected static $TIMEOUT       = 'Operatore non ha fornito informazioni sullo stato del messaggio entro 48 ore';
    protected static $TOOM4NUM      = 'Troppi SMS per lo stesso destinatario nelle ultime 24 ore';
    protected static $TOOM4USER     = 'Troppi SMS inviati dall\'utente nelle ultime 24 ore';
    protected static $UNKNPFX       = 'Prefisso SMS non valido o sconosciuto';
    protected static $UNKNRCPT      = 'Numero del destinatario non valido o sconosciuto';
    protected static $WAIT4DLVR     = 'Messaggio inviato, in attesa di delivery';
    protected static $WAITING       = 'In attesa, non ancora inviato';
    protected static $UNKNOWN       = 'Stato sconosciuto';

    /*******************
     * Response slug
     ******************/

    protected static $SI     = 'Sms SILVER';
    protected static $GS     = 'Sms GOLD';
    protected static $GP     = 'Sms GOLD+';
    protected static $EE     = 'Sms Esteri';

    /*****************************************************
     * END PARAM.
     * @link: http://www.trendoo.it/pdf/API_http.pdf
     *****************************************************/

    /*
     * Response Params
     */
    protected static $requestUrl;
    protected static $responseStatus = null;
    protected static $responseData = null;
    protected static $parsedResponse = null;

    protected static $smsChars = 0;

    public function __construct()
    {
	    self::$base_url		= Config::get("trendoo.base_url");
        self::$username   	= Config::get("trendoo.login");
        self::$password   	= Config::get("trendoo.password");
        self::$message_type = Config::get("trendoo.sms.message_type");
        self::$sender      	= Config::get("trendoo.sms.sender");
        self::$debug      	= Config::get("trendoo.debug");
    }

    /**
     * @return array
     */
    protected static function injectLoginParams(){
        return [
            'login' => self::$username,
            'password' => self::$password
        ];
    }

    /**************
     *   REQUEST  *
     **************/

    /**
     * @param $endpoint
     * @param array $args
     * @return string
     */
    protected static function buildRequest($endpoint, Array $args = null){

        // Inject LOGIN and PASSWORD
        $loginParams = self::injectLoginParams();

        // Define ENDPOINT
        $url = self::$base_url . $endpoint;

        // $_GET Parameters to Send
        $params = ($args != null) ? array_merge($loginParams,$args) : $loginParams;

        // Update URL to container Query String of Paramaters
        $url .= '?' . http_build_query($params);

        return $url;
    }

    protected static function tryRequest($endpoint, Array $params = null){
        try {
            self::doRequest($endpoint, $params);

            if(self::$responseStatus == 200) {
                self::$parsedResponse = self::parseResponse($endpoint, self::$responseData);
            }
            else {
                self::$parsedResponse = self::responseWithError(0,'General error.');
            }

            return self::$parsedResponse;
        }
        catch (Exception $e) {
            self::$parsedResponse = self::responseWithError(0, $e->getMessage());
            return self::$parsedResponse;
        }
    }

    /**
     * @param $endpoint
     * @param array $args
     */
    protected static function doRequest($endpoint, Array $args = null){
        self::$requestUrl = self::buildRequest($endpoint, $args);

        // cURL Resource
        $ch = curl_init();

        // Set Curl Option
        $options = [
            // Set URL
            CURLOPT_URL => self::$requestUrl,
            // Tell cURL to return the output
            CURLOPT_RETURNTRANSFER => true,
            // Tell cURL NOT to return the headers
            CURLOPT_HEADER => false
        ];

        curl_setopt_array($ch, $options);

        // Execute cURL, Return Data
        self::$responseData = curl_exec($ch);

        // Check HTTP Code
        self::$responseStatus = curl_getinfo($ch, CURLINFO_HTTP_CODE);

        // Close cURL Resource
        curl_close($ch);

    }

    /**************
     *    CHECK   *
     **************/

    protected static function charsCount($message = null){

        if ($message == null) return 0;
        $count = 0;
        foreach(self::$specialChars as $special) {
            $count += substr_count($message, $special);
        }
        $count += strlen($message);
        self::$smsChars = $count;

    }

    /**************
    *  	RESPONSE  *
    **************/

    /**
     * @param $responseBody
     * @return \Symfony\Component\HttpFoundation\Response
     */
    protected static function parseResponse($endpoint, $responseBody){
        if(substr($responseBody, 0, 2) == self::$responseError){
            $response = explode(self::$responseColumnDivider, $responseBody);
            return self::responseWithError($response[1],$response[2]);
        }
        else {
            switch($endpoint){
                case 'Trend/SENDSMS':
                    return self::sentParse($responseBody);
                    break;
                case 'Trend/SMSSTATUS':
                    return self::statusParse($responseBody);
                    break;
                case 'Trend/CREDITS':
                    return self::creditsParse($responseBody);
                    break;
                case 'Trend/REMOVE_DELAYED':
                    return self::rmDelayParse($responseBody);
                    break;
                case 'Trend/SMSHISTORY':
                    return self::historyParse($responseBody);
                    break;
                case 'OESRs/SRNEWMESSAGES':
                    return self::smsNewParse($responseBody);
                    break;
                case 'OESRs/SRHISTORY':
                    return self::smsHistoryParse($responseBody);
                    break;
                case 'OESRs/SRHYSTORYBYID':
                    return self::smsHistoryIdParse($responseBody);
                    break;
            }
            return self::responseWithError(0,'No endpoint defined');
        }
    }

    protected static function sentParse($response){
        // OK|1F11FEADCB6A4|1
        $data = explode(self::$responseColumnDivider, $response);
        if($data[0] == self::$responseValid) {
            return self::responseWithSuccess([
                'order_id' => $data[1],
                //TODO if returnCredits = true this return the credit used for request
                // and not the sensers count.
                'senders' => $data[2]
            ]);
        }
    }

    protected static function statusParse($response){
        // OK;recipient_number|status|delivery_date;...;
        $data = explode(self::$responseNewLineDivider, $response);
        $parsed=[];
        $i = 0;
        if($data[0] == self::$responseValid) {
            foreach($data as $element) {
                if ($i++ == 0) continue;
                if($i == count($data)) break;
                $tmp = explode(self::$responseColumnDivider, $element);
                $parsed[] = [
                    'recipient' => $tmp[0],
                    'status' => $tmp[1],
                    'status_message' => self::statusToMessage($tmp[1]),
                    'delivery_date' => isset($tmp[0]) ?: 'N/A',
                ];
            }

            return self::responseWithSuccess($parsed);
        }
    }

    protected static function creditsParse($response){
        // OK;GS|IT|37;GP|IT|37;SI|IT|37;GS|ES|56;GP|ES|56;SI|ES|100;EE||81
        $data = explode(self::$responseNewLineDivider, $response);
        $parsed = null;
        $i = 0;
        if($data[0] == self::$responseValid) {
            foreach($data as $element) {
                if (($i++ == 0)) continue;
                if($i == count($data)) break;
                $tmp = explode(self::$responseColumnDivider, $element);
                $parsed[] = [
                    'type' => $tmp[0],
                    'type_human' => self::${$tmp[0]},
                    'nation' => $tmp[1],
                    'count' => $tmp[2]
                ];
            }
            return self::responseWithSuccess($parsed);
        }
    }

    protected static function rmDelayParse($response)
    {
        $data = explode(self::$responseNewLineDivider, $response);
        $parsed = null;
        if($data[0] == self::$responseValid) {
            return self::responseWithSuccess($parsed);
        }
    }

    protected static function historyParse($response)
    {
        //OK;
        //|20090217164232|GS||2|20090219164153; {6}
        //1F11FEAD08FE0|20090309113910|GP|test|1|; {6}
        //|20090309120139|GP|mItTeNtE|2| {6}

        $data = explode(self::$responseNewLineDivider, $response);
        $parsed = null;
        $i = 0;
        if($data[0] == self::$responseValid) {
            foreach($data as $element) {
                if (($i++ == 0)) continue;
                if($i == count($data)) break;
                $tmp = explode(self::$responseColumnDivider, $element);
                $parsed[] = [
                    'message_id' => $tmp[0],
                    'creation_date' => $tmp[1],
                    'type' => $tmp[2],
                    'type_human' => self::${$tmp[2]},
                    'sender' => $tmp[3],
                    'recipient_count' => $tmp[4],
                    'send_at' => $tmp[5]
                ];
            }
            return self::responseWithSuccess($parsed);
        }
    }

    protected static function smsNewParse($response)
    {
        //OK;

        $data = explode(self::$responseNewLineDivider, $response);
        $parsed = null;
        if($data[0] == self::$responseValid) {
            return self::responseWithSuccess($parsed);
        }
    }
    protected static function smsHistoryParse($response)
    {
        // OK;83342|%2B393407249303|%2B393493888678|FURTO+NEROCUBO|20150930101353|;

        $data = explode(self::$responseNewLineDivider, $response);
        $parsed = null;
        $i = 0;
        if($data[0] == self::$responseValid) {
            foreach($data as $element) {
                if (($i++ == 0)) continue;
                if($i == count($data)) break;
                $tmp = explode(self::$responseColumnDivider, $element);
                $parsed[] = [
                    'message_id' => $tmp[0],
                    'recipient' => $tmp[1],
                    'sender' => $tmp[3],
                    'message' => $tmp[4],
                    'send_at' => $tmp[5]
                ];
            }
            return self::responseWithSuccess($parsed);
        }
    }

    protected static function smsHistoryIdParse($response)
    {
        $data = explode(self::$responseNewLineDivider, $response);
        $parsed = null;
        if($data[0] == self::$responseValid) {
            return self::responseWithSuccess($parsed);
        }
    }

    protected static function smsPostParse($request)
    {
        // OK;83342|%2B393407249303|%2B393493888678|FURTO+NEROCUBO|20150930101353|;

        $data = explode(self::$responseNewLineDivider, $request);
        $parsed = null;
        $i = 0;

        foreach($data as $element) {
            if($i == count($data)) break;
            $tmp = explode(self::$responseColumnDivider, $element);
            $parsed[] = [
                'message_id' => $tmp[0],
                'message' => $tmp[1],
                'sender' => $tmp[3],
                'recipient' => $tmp[4],
                'delivery_date' => $tmp[5]
            ];
        }
        return self::responseWithSuccess($parsed);
    }

    protected static function statusToMessage($status){
        return self::${$status};
    }

    /**
     * @param $code
     * @param $message
     * @return \Symfony\Component\HttpFoundation\Response
     */
    protected static function responseWithError($code,$message) {
        $response = [
            "success" => false,
            "data" => [
                'error' => $code,
                'message' => urldecode($message)]
        ];
        if(self::$debug == true) $response['data']['request'] = self::$requestUrl;
        return response()->json($response);
    }

    /**
     * @param $data
     * @return \Symfony\Component\HttpFoundation\Response
     */
    protected static function responseWithSuccess($data) {
        return response()->json(["success" => true, "data" => [$data]]);
    }

    protected static function createDateTime($data){
        self::$data = \DateTime::createFromFormat(self::$dateFormat,$data);
    }

    protected static function generateError($message, $code = 502){
        return self::responseWithError($code,$message);
    }

    /*
     *
     * PUBLIC METHOD REFERER TO THIS
     *
     */

    /**
     * @param $to
     * @param $message
     * @return mixed
     */
    public static function sendMessage(Array $recipients, $message, $option = null)
    {

        $recipients = implode(',',$recipients);

        $params = [
            'message' => $message,
            'recipient' => $recipients
        ];

        if($option) {
            $params['message_type'] = isset($option['message_type']) ? $option['message_type'] : self::$message_type;
            $params['sender'] = isset($option['sender']) ? $option['sender'] : self::$sender;
            if (isset($option['scheduled_delivery_time'])) $params['scheduled_delivery_time'] = $option['scheduled_delivery_time'];
            if (isset($option['order_id'])) $params['order_id'] = $option['order_id'];
            if (isset($option['returnCredits'])) $params['returnCredits'] = $option['returnCredits'];
        }
        else {
            $params['message_type'] = self::$message_type;
            $params['sender'] = self::$sender;
        }

        // $this->smsChars
        self::charsCount($message);

        self::tryRequest(self::$send_endpoint, $params);

    }

    public static function checkCredits(){
        return self::tryRequest(self::$credits_endpoint);
    }

    public static function getData($format){
        return date_format(self::$data,$format);
    }

    public static function SMSByPost($request){
        return self::smsPostParse($request);
    }

    public static function historySMS(){
        return self::tryRequest(self::$sms_history_endpoint);
    }

    /**
     * @param $order_id
     * @return mixed
     */
    public static function removeDelayed($order_id)
    {
        $params = [
            'order_id' => $order_id
        ];

        self::tryRequest(self::$remove_delayed_endpoint, $params);

    }

    /**
     * @param $order_id
     * @return mixed
     */
    public static function smsStatus($order_id)
    {
        $params = [
            'order_id' => $order_id
        ];

        self::tryRequest(self::$status_endpoint, $params);

    }

    /**
     * @param       $endpoint
     * @param array $params
     *
     * @return mixed
     */
    public static function genericRequest($endpoint, Array $params)
    {
        self::tryRequest($endpoint, $params);

    }

    public static function getResponseData(  )
    {
       return self::$responseData;
    }

    public static function getResponseCode(  )
    {
        return self::$responseCode;
    }

    public static function getParsedResponse(  )
    {
        return self::$parsedResponse;
    }

}


Below, I suggest four enhancements to the Simutrans economy that, I hope, will be both simple to implement and give a dual advantage of added realism and enhanced gameplay. I have suggested these together in one post instead of in several separate posts, because, although in one sense they are separate suggestions, they are closely linked with each other, and some would not work properly (or lose part of their raison d'etre) without the others being implemented.
Description: Currently, the speed bonus applies equally to journeys of all lengths: if this suggestion were implemented, the shorter the journey, the less relevant that the speed bonus would be to the calculation of the revenue, and the longer the journey, the more relevant (up to a certain limit of, perhaps, the equivalent of say 500km). The exact degree of the falloff could be set by a parameter in simuconf.tab.
Realism advantages: In reality, passengers care far more about the speed and comfort of their journey if it is a long one than if it is a short one. Slow transport for time-sensitive goods matters far more if the journey is over hundreds of kilometres than if it is over a few kilometres. In reality, transportation networks use very different sorts of vehicles and infrastructure for local journeys than long-distance journeys, and, particularly for passengers, use higher density, but slower and less comfortable vehicles for local journeys than for long distance journeys.
Gameplay advantages: At present, the speed bonus and revenue system together make long distance transport orders of magnitude more profitable than local transport, to an extent that the game seems unbalanced. (See, for instance, the discussion here). It can be extremely difficult to make shorter distance transport profitable. Reducing the effect of the speed bonus could increase the relative profit margin on short distance routes by making cheaper, higher capacity but slower vehicles earn higher revenues than they can at present. The fun in a game comes from making interesting decisions: if the speed bonus matters more and more the longer that the journey, the decision as to which vehicle to use for each route becomes far more interesting, as there is an additional factor to consider. A wider variety of different types of vehicles become useful, since the most profitable type of vehicle will depend on the route's length. Local commuter trains, for example, will be useful for shorter routes, whereas express trains more useful for longer routes. A player might have to strike interesting compromises between vehicles that travel different distances in different parts of the journey. Furthermore, if the disparity in profitability between long- and short-distance travel is narrowed, a wider variety of networking designs become viable, making the game more interesting by increasing overall variety. It has sometimes been remarked that Simutrans is mainly about long-distance transport: that may be so, but, both in reality and in the game as it currently stands, long-distance transport relies on short-distance transport to be viable: goods and (especially) passengers need to be transported between their individual origins and destinations and major transport hubs before embarking upon long journeys. Besides, nothing in this suggestion would undermine any of the long-distance aspect of gameplay, or be so complicated to implement that it would take much developer time. Indeed, if it was linked to a preference in simuconf.tab, the player would be able to turn off the effect entirely if it was not desired.
Description: The maintenance costs of all vehicles marked "obsolete" would be multiplied by a factor specified in simuconf.tab, with a default of, perhaps, 1.5 or 2.
Realism advantages: In reality, older vehicles need more maintenance. Obsolete vehicles in particular, for which spare parts are no longer readily produced and whose manufacturers may long since have gone out of business, cost a great deal more to maintain than current vehicles. It is not realistic that Stephenson's Rocket has the same maintenance cost in 2030 as it does in 1830.
Gameplay advantages: If, as suggested above, the speed bonus effect is made directly proportionate to distance travelled, the use of cheap but highly obsolete vehicles may become the most profitable option for very local transport. The speed bonus system was designed to disincentivise the use of very old vehicles, but if its effect is weakened for short-distance transport, an alternative needs to be considered. It is intuitive that an obsolete vehicle's maintenance should be considerably higher than that of a current vehicle, and should not cause players undue confusion (indeed, the present state of affairs of not having costs increase in that way might cause as much, if not more, confusion than what is proposed here). Such a measure would also mean that the difference between current and obsolete vehicles becomes more important than it currently is. If the multiplier were able to be set via simuconf.tab, players would be able to adjust the value to taste, and players who preferred not to have the effect at all could simply set the value to 1.
Description: As I understand it, the likelihood of passengers and mail being bound for any given town is directly proportionate to the size of that town ("the size factor"), and inversely proportionate to the distance to that town ("the distance factor"). That, in itself, is sensible, but, what I propose is making the effect stronger, by making the distance factor stronger the lower that the size factor is. It may help to express it as an algebraic equation.
Realism advantages: In reality, people are far more likely to travel a long distance to go to a large town than a small town. That is not adequately reflected by a greater likelihood of going to large towns combined with a lesser likelihood of going to distant towns, since this is not how people actually behave: the likelihood of travelling from London to a tiny village in the Highlands of Scotland is less than the likelihood of a person from London travelling to Berlin divided by the size difference between Berlin and the tiny village, and less than the chances of a person from London travelling to a small village on the outskirts of London divided by the extra distance to the Highland village. At present in Simutrans, there are large numbers of passengers travelling to distant, but small, destinations, which is not terribly realistic. The larger the town, the more likely that people are to travel to it, but, moreover, the more likely that people are to travel to it in spite of the distance.
Gameplay advantages: The network effect of passengers and mail is one of the most important aspects of Simutrans: unlike in other transport simulators, passengers have a destination, and, the more destinations that one's transport network serves, the more passengers that will be interested in travelling on it. That effect helps to make strategic planning and careful network design (all interesting decisions) more important in Simutrans than in other simulators. However, it is well-known by frequent players that this network effect can sometimes be exaggerated: especially when playing on larger maps (which, in and of themselves, are more fun because of the exponentially greater number of network options with the increasing size), once a network of passenger transportation passes a certain level, the demand gets so high that the game ceases to be financially challenging, the challenge instead being to keep the stations from becoming overcrowded (which challenge is itself rather limited in terms of fun, partly because there is no real disadvantage to the player in having overcrowded stations and partly because, in larger towns, the overcrowding becomes so extreme that it can be difficult to address with anything approaching realistic levels of service). It might be said that that is an interesting challenge in and of itself, and it is up to a point, but it can also become frustrating, especially when the degree of overcrowding is so high as to make the necessary remedial measures reduce substantially the realism of the network. If passengers become less likely than they are at present to travel to distant smaller towns, the exponentiality of the network effect is tamed somewhat, keeping passenger number growth somewhat more linear, but also more tied to the number of large cities served.
Description: At present, there is no particular penalty (other than stilted town growth) to having an overcrowded station. I suggest that the extent to which a station is overcrowded should affect the speed bonus. In particular, the speed bonus of cargoes transported from an overcrowded origin station should be reduced in proportion to that overcrowding (multiplied by an adjustable factor in simuconf.tab). This should link in with the suggestion above in relation to speed bonuses and local transport, such that the overcrowding penalty for speed bonuses is equally reduced in significance for shorter journeys as the speed bonus itself.
Realism advantages: If the speed bonus is supposed to reflect the comfort, speed and convenience of travel, then if it is based only on the maximum speed of the vehicles itself, a crucial element is missing: the time and convenience of boarding/loading in the first place. If, for example, a passenger has to wait hours at a terribly crowded station because three full trains pass before there is enough room on a train to get on, the fact that the journey thereafter is fast and relatively comfortable is rather moot. There should, as discussed elsewhere (in a thread that I cannot currently find), be some sort of penalty for overcrowded stations, because, in reality, an overcrowded station is less efficient for the passengers/consigners of cargo than one that is not overcrowded.
Gameplay advantages: If there is little or no revenue incentive to relieve overcrowding at stations, players can feel somewhat uneasy that they are able to make large profits despite there being something wrong with their network in a very real way, and, as discussed above, the present situation leads to an economy in which revenue generation is very challenging at the beginning of the game, but trivially easy once one has passed a certain threshold. An effective penalty for overcrowding would have the effect of keeping the game financially challenging in the later stages, making the game more rewarding. If there was a substantial financial incentive to reduce overcrowding, the game would not only become more challenging, but involve more interesting decisions, since the player would have to plan capacity carefully before expanding, and weigh capacity considerations against capital and maintenance costs in ways which are currently, at best, optional. As with the other suggestions, if the extent to which overcrowding affects the speed bonus is set in simuconf.tab, it would be easy to adjust this effect to taste, and even turn it off entirely. Finally, if overcrowding becomes less common as a result of suggestion no. 3 above, it makes more sense to penalise it, as overcrowding would be more of an indication of a true problem than it is at present.
I haven't read it all but I like a lot your idea.
Never thought about them! 1 & 4 is particularly interesting.
I think too this game needs financial penalty for having over crowding stations.
station capacity since even the most basic accept virtually infinite passengers.
Overall you tell everything I wanted to say!
Then unfortunately you don't understand it well. Distance is not involved in the calculations. Realistic as it might be, it's simply too time and/or memory consuming to calculate. The size of the town is not directly involved, every building in the town has a weight factor.
@jamespetts: One extension request per topic, please. You can edit you own post (remove parts and move them to new topics) in order to comply with that rule.
EDIT: jamespetts explained the issue to me, and I have to admit that it makes sense to keep at least some of these things together. But an extension request that touches many areas may become too complicated to discuss.
Hmm, forgive me, in that case, for having mistaken the analysis of the mechanics of the game. Without having read all the code it is not always easy to understand what is happening under the hood! As to the building weightings, I was aware of that element: the "size" of the towns to which I referred was meant to be an indication of the cumulative effect of all of those building weightings. Unless I am missing something, the fact that it is done that way does not make a difference as to the suggestion.
The distance issue is another matter: I was not aware that distance was not a factor at all. However, I am not convinced that it is too computationally expensive to work out the distance between different towns. The simple solution is to calculate the distance between each town and each other town once, when the map is generated, and keep a table in memory somewhere. The distance between one town and another would be based on the straight line distance (i.e. shortest distance traversing tiles: there should already be an algorithm for this somewhere when building inter-city roads and for AI players) between the respective towns' town halls. Whenever a new town is added, the calculations could be performed afresh just for that town (the distance between that town and every other town).
Then, when calculating distance, all that the buildings need to do is factor in the distance between it and the possible destination building's town when determining how to generate passengers and mail. A simple table lookup should not be computationally expensive at all, and the table itself (which need be no more than one array of integers per town) would take little memory. The only noticeable impact on performance would be at map creation, and whenever (rarely) a new town is added.
Passenger generation computations are calculated per station. Based on the buildings within reach of a station, every station gets an accumulated weight factor. Passengers destinations (from a station) are then distributed using that weight factor. The main advantage of this method is that you need a (permanent) list with one weight factor per station. Say we have N stations, then we need a list of N weight factors.
1) For every station you generate a temporary list in which you correct the weight factor with distance. You'll have to do this every time you generate passengers for every station. This is too time consuming.
2) Keep a permanent list of destination stations per station where you correct the weight factor with distance. This will lead to a list of N * N weight factors. When you have 10 stations this is no problem, when you have 100 stations you're getting in trouble and when you have 1000 stations you have just blown up the system. So this is too memory consuming.
The second point is very interesting..
imho, this is quite reasonable, and it will force players to update vehicles even if they are profitable. It's a new challange for them. On the other hand, it only has sense if you're playing with timeline option, hasn't it?
Yes, true, but on the other hand it causes a lot of micromanagement, which makes gameplay tedious for large games.
After 1900 there are enough locomotives one can choose. More than 5.
Increased maintenance for retired engines would force me to drop more profitable old engine and to use new less profitable one.
If a player has got a lot of money, there is almost nothing that presses him to upgrade engines.
It would be very good challenge from the economical point of view.
As I "studied" in NiNiWania, two times stronger newer engine has more than two times higher costs and it cannot drag more than two times more cargo. Its profit is smaller than in the case of two old engines. So I have no need to upgrade engines except if I have to drop the number of trains because of full track and station capacity.
So, I vote for rising costs of retired engines and vehicles. It has a sense only in timeline games, of course .
Today I have to change about 400 trains with kkStB110 engines for about 150 trains with new engines (timeline, year 1893).
Work for several hours of real time and 3-5 years of gameplay.
And I do not consider it as a large game.
- Number of vehicles available.
- Penalty factor you have in simuconf.tab.
- If you want to update the vehicles or not.
Yes but you have only a few trucks, at least in pak64...I suppose we're refering to all kinds of vehicles.
I have no need to upgrade engines except if I have to drop the number of trains because of full track and station capacity.
I think Simutrans compensates with the speedbonus, that unleashes player's greed to earn more money, so he must upgrade vehicles for transporting goods faster and getting that extra money.
Another point, I guess you can also use negative values for this parameter.
I like your idea No. 1. Curently there is no distinct difference between vehicles for short distance and long distance. Your idea could really make vehicle choice more interesting.
But I don't like No.2, as it forces players to do something... This would be clearly annoying for me, especially having a large game.
Thank you, everyone, for all your replies. I will have to think a little more about the distance issue: I still suspect that there should be a way to solve it.
As to nos. 1 and 2: there are obviously differing opinions about the desirability of obsolete vehicles having higher maintenance costs. Obviously, it will only make sense on a game with a timeline. Some people like the idea, others consider it to require excess micromanagement. However, in view of the facts: (1) that it should be relatively easy to code; and (2) of the fact that, as proposed, it would be trivially easy to turn it off (perhaps with it automatically turned off whenever a timeline is not used), there is every reason to add it to satisfy those who do want it.
My view on the micromanagement issue, incidentally, is this: in any event, there will be an incentive to replace obsolete vehicles, because the introduction of newer vehicles makes older vehicles less profitable because of the speed bonus. That will involve an element of micromanagement all of itself, and that is considered an acceptable degree of micromanagement (some have requested - quite understandably - an automated way of doing this to reduce micromanagement - this would also be sensible, if feasible). As far as I can tell, the game, at least with the timeline enabled, was always designed to encourage players to upgrade vehicles. Vehicles become obsolete, after all, for a reason. The increase of maintenance costs for obsolete vehicles should not cause significantly more micromanagement (in principle, at least) than the existence of the speed bonus itself.
However, in cases where the speed bonus has little impact (either, as things stand now, for bulk goods, or, as things will be if my suggestion no. 1 is implemented, for local traffic), the incentive to replace obsolete vehicles is impaired, and the number of interesting decisions thereby reduced. If my suggestion no. 1 is implemented, this will be more of an issue than it is at present. The game is evidently designed to be at least partly realistic, and also to be economically challenging. Both of those aims will be more effectively achieved if obsolete vehicles cost more to maintain than current vehicles.
I realise, of course, that, as with all forms of entertainment, what people enjoy is inherently subjective. That is evident from the differences of opinion on this thread. That is why it is better to have a feature such as this customisable, such that those who dislike it can disable it, and those who like it can enable it.
1) The distance dependent speed bonus would just make a higher revenue for longer distance (since it would get more and more birdlike distance). Moreover it would require some extra field which would eat up considerable memory and CPU time. (There is a patch, serach for it in the old forum).
2) Maintenance cost for old vehicles could be easily increased. However, in Simutrans vehicles are usually available for a large time period. Moreover, the speed bonus does exactly this penalizing. This is the aim of the speedbonus, penalizing old vehicles, not getting extra income.
3) The passengers to certain towns involve mainly the size of the town (the larger the more likely) and the distance (close than 100 tiles more likely). Thus I would consider this a fulfilled.
So second point is already implemented, as currently the speedbonus is loaded from a file, isn't it?
// prissi: Why on earth 1/3???
No, there is no easy way to achieve this. YOu have to go the way of the patch, i.e. extend the ware field with one additional field for timekeeping purposes and have to change the routines that join goods. When I denied the patch the last time, it was exactly for these reasons.
I'm not sure that I follow, I'm afraid - what exactly was the reason that you denied the patch the last time? As I wrote before, that patch does something completely different to what I'm seeking to achieve: that patch tries to make the actual time taken to transport the goods feature in the revenue calculation, like Transport Tycoon, etc.. I am not trying to do that. I am just trying to make the speed bonus less and less relevant the shorter the journey. From my preliminary testing, that seems as if it might require awarding a supplemental bonus for all local transport no matter what its speed to prevent local transport that would otherwise have been profitable because of the large speed bonus being rather less profitable, although that should probably be an adjustable factor, since it all rather depends on the paksets.
I have created a patch to the code which gives effect to suggestion no. 1. I have tested it briefly, and the code compiles, and runs without either crashing or being noticeably or measurably slower than the default version. I have noticed, however, that, on Pak128 (which I am using for testing), with the older vehicles downloaded from addons.simutrans.com installed, the speed bonus settings are far too low: the road speed bonus in 1900, for instance, is 21kph, whereas the ordinary 'busses have a maximum speed of 88kph, giving a massive speed bonus to all 'bus traffic. Reducing the effect of the speed bonus locally then means that that bonus is reduced, having the opposite effect desired. For this patch to have the desired effect, the settings in speedbonus.tab will have to be set more accurately to reflect the speeds of the available vehicles in the era. If that is done, the "local_bonus_supplement" value can then be reduced.
//These values should in due course be read from simuconf.tab, not just hard-coded.
float local_bonus_multiplier = 0.75; // 0 = No local bonus. 1 = full speed bonus automatically applied to all local transport (below min_bonus_max_distance, proportionate thereafter).
//If distance of journey too low, disapply speed bonus entirely, but apply local bonus supplement instead.
//Apply proportionate mix of local bonus supplement and conventional speed bonus.
//The effect of this code is that, if the local supplement is set to 1, a 100% speed bonus is applied until max_bonus_min_distance is reached.
//For that reason, it is better not to set local supplement to 1.
//Apply full speed bonus in conventional way.
I hope that I have adequately complied with the coding style guidelines - I could not find the post setting them out, so do excuse me if I have made any mistakes.
Edit: I have now posted an updated version of the patch here, which reads the values from simuconf.tab.