At our introduction, their implemented approach was to utilizes $argv[] and search that way. This is not going to help you when end users start filling spaces with their imagination. Its also not going to be accurate later down the road when you want to facilitate more complicated or simply chained commands. Their direction was to utilize preg_match which we didn’t agree with. We believed that the patterns were so similar between queries and products that it would either fail or the entire format must be re-thought. As a much quicker and less costly workaround, we offered to re-write the string manipulation logic.
Solution
We proposed a solution which searched for the most prevalent feature in every single command. Its also the easiest to test for, the numbers. Immediately, we offer a scenario where you group the number positions into an array. Decisions can then be made on these groups of numbers. What kind of decisions you ask. Seems silly you say. Well our team believed, well the project manager, that if you know the positions of the numbers, you can test things like:
- how many groups of numbers exist
- what exists before and after any group of number (especially first/last)
- size of the groups
We definitely utilized all three findings through this solution. Right away we can do some, error checking, introduce a class of seperators to combat the end user’s space filling imagination, and we are configured correctly to take the api efficiency to the next stratomosphere.
How is this done
Now this must be the checkmate of the whole thing. If you have two classes, one with modifiers (+, -, =) and another with the stuff users think up (space, period, comma, semicolon <- not the words, the actual characters), you can definitely make a better guess as to what the user was trying to send. If you would like to see the code, you can find a sample here [downloads query=”include=1″]
Recientemente hemos lanzado nuestro servicio de Project Manager para ofrecer alternativas al cliente para proyectos de pago único. Muchas veces los clientes necesitan ayuda planificación del producto o refinar después su sido lanzado. Este servicio nos da la oportunidad de trabajar con usted sobre una base casi cada hora para orientar su proyecto justo cuando más lo necesite.
Stringify
Como parte de este servicio, recientemente tuvimos la oportunidad de trabajar con un no para fines de lucro que necesiten ayuda procesar mensajes sms. Enseguida, se puede ver que este es un proyecto de manipulación de cadenas. Más tarde, pensábamos que sería un ejemplo perfecto para nuestro mal la serie.
Synopsys
Por suerte estamos tirados en el escenario cuando el sistema ya está construido y ha sido a través de sus pruebas iniciales. Indeviduals que han construido sólidos productos saben que pruebas son clave para lograr ese objetivo. Pruebas pueden demostrar si usted ha sido minería carbón o diamantes. Y a través de pruebas, esta empresa observado defectos en el diseño de su productos.
Su analizador recibida muy bien el formato de mensajes sms de FrontlineSMS un servicio gratuito para las ONG. Sin embargo, ellos rápidamente habían averiguado que el aspecto de su software que totalmente no consideran, era el cliente. Como puede imaginar, los clientes no siempre siguen las instrucciones de su software. Esto puede afectar considerablemente la utilización del software y, obviamente, su rentabilidad y crecimiento.
Su situación era muy simple. Esperan a los usuarios actualizar, consulta y registrarse a través de mensajes sms. Con un producto lista recuerde infinita y usuarios agrupados por instalación, comienzas a ver el alcance de formatos que pueden surgir. Además, puede que el alcance de los usuarios finales pensará en los formatos de imagen. Permite echar un vistazo
Conde item_name + phonenumber
item_name (+,-, =) #number + phonenumber
Ambos modelos explicativos muy sensata y auto. Enseguida podemos ver espacios que pueden ser llenados por todo tipo de mal. También vemos montones de validación de las partes separadas. Lo más importante, podemos ver una carretera tretcherous por delante a la hora de ampliar este patrón
En nuestra introducción, su enfoque implementado fue utiliza $argv [] y la búsqueda de esa manera. Esto no va a ayudarle cuando los usuarios finales empiezan a llenar espacios con su imaginación. Su también no va a ser precisa más adelante en el camino cuando desea facilitar más había complicado o simplemente encadenado comandos.
Su dirección fue utilizar preg_match que no comparto. Creíamos que los patrones eran tan similares entre las consultas y productos que tampoco fallaría o el formato completo debe ser re-thought. Como mucho más rápido y menos costoso para solucionarlo, nos ofreció a re-escribir la lógica de la manipulación de cadenas.
Solución
Hemos propuesto una solución que se buscó para la función más frecuente en cada comando único. Su también el más fácil de probar, los números. Inmediatamente, ofrecemos un escenario donde se agrupan las posiciones números en una matriz. Luego puede tomar decisiones sobre estos grupos de números.
¿Qué tipo de decisiones que pides. Parece una tontería que dices. Así nuestro equipo cree, el Gerente de proyecto, que si se saben las posiciones de los números, puedes probar cosas como:
- ¿cuántos grupos de números existen
- lo que existe antes y después de cualquier grupo de número (especialmente primer/último)
- tamaño de los grupos
Definitivamente hemos utilizado todas las tres conclusiones a través de esta solución. Enseguida podemos hacer algunos, comprobación, introducir una clase de seperators para luchar contra el espacio del usuario final llenar la imaginación, y estamos configurados correctamente para aprovechar la eficacia de la api para el próximo stratomosphere de errores.
¿Cómo se hace
Ahora debe ser el jaque mate de todo esto. Si tienes dos clases, uno con modificadores (+, -, =) y otro con los usuarios de cosas piensa (espacio, punto, coma, punto y coma <-no las palabras, los caracteres reales), definitivamente puede hacer que una adivina mejor a lo que el usuario intentaba enviar.
Si desea ver el código, puede encontrar un ejemplo aquí [downloads query=”include=1″]